Sigue
movlw .6
call LCD_PosicionLinea2 ; aqui es donde mando a escribir solo un número
call Lee_Teclado
call LCD_Nibble
goto Sigue
sleep
Lee_Teclado
BUCLE
call KB_Scan
return ;Vuelve a la subrutina BUCLE
KB_Scan ;Escanea el teclado
clrf auxiliar
CLRF Tecla ;Borra Tecla y
clrf auxiliar1
INCF Tecla,f ;prepara Tecla para primer c¢digo.
MOVLW b'1000' ;Saca 0 a la primera fila
MOVWF PORTD ;de la Puerta B
NOP ;Nada para estabilizaci¢n de señal.
Cheq_Col BTFSC PORTD,4 ;Primera columna = 0
GOTO antirebotes ;Sale si se ha pulsado tecla.
INCF Tecla,f ;Si no tecla pulsada, incrementa tecla.
BTFSC PORTD,5 ;Segunda columna = 0
GOTO antirebotes ;Sale si se ha pulsado tecla.
INCF Tecla,f ;Si no tecla pulsada, incrementa tecla.
BTFSC PORTD,6 ;Tercera columna = 0
GOTO antirebotes ;Sale si se ha pulsado tecla.
INCF Tecla,f ;Si no tecla pulsada, incrementa tecla.
BTFSC PORTD,7 ;Cuarta columna = 0
GOTO antirebotes ;Sale si se ha pulsado tecla.
INCF Tecla,f ;Si no tecla pulsada,incrementa Tecla.
Ultima_Tecla MOVLW d'17' ;Carga W con el n£mero de Teclas + 1.
SUBWF Tecla,w ;y lo compara con el valor actual de Tecla.
BTFSC STATUS,Z ;Si Tecla + 1 = valor actual.
GOTO NTeclas ;No ha sido pulsada ninguna tecla.
BSF STATUS,C ;Pone a 1 Bit C.
RRF PORTD,f ;as¡ la Fila 1 pasa a 1 con la rotaci¢n a izqda.
GOTO Cheq_Col
NTeclas movlw 0x10
movwf Tecla
call T_Conv ;Coloca variable Tecla a 0
RETURN ;y regresa.
antirebotes movf PORTD,0
movwf auxiliar1
MOVF Tecla,w ;pone en w el numero contenido en la variable
movwf auxiliar
andlw 0x0F
CALL T_Conv ;llama a la tabla de conversion y retorna
MOVWF Tecla ;con el valor en hexadecimal y lo pone en la variable.
movwf auxiliar
RETURN ;vuelve al programa principal que hizo la llamada.
T_Conv ADDWF PCL,F
RETLW b'11111010'
RETLW b'11111111' ;Tecla nº1 = F
RETLW 0;Tecla nº2 = 0
RETLW b'11111110' ;Tecla nº3 = E
RETLW b'11111101' ;Tecla nº4 = D
RETLW 1 ;Tecla nº5 = 1
RETLW 2 ;Tecla nº6 = 2
RETLW 3 ;Tecla nº7 = 3
RETLW b'11111100';Tecla nº8 = C
RETLW 4 ;Tecla nº9 = 4
RETLW 5 ;Tecla nº10 = 5
RETLW 6 ;Tecla nº11 = 6
RETLW b'11111011';Tecla nº12 = B
RETLW 7 ;Tecla nº13 = 7
RETLW 8 ;Tecla nº14 = 8
RETLW 9 ;Tecla nº15 = 9
goto Blanco
Blanco call LCD_Linea2EnBlanco ; manda este valor si no hay ninguna tecla presionada
goto Sigue