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
Como se ve hay 2 puntos de interés en el programa. En la etiqueta sigue es donde se escribe el valor del teclado, sin embargo me enfrento a dos problemas. El primero es como saber cuando se dejó de apretar una tecla para no escribirla infinitamente en el lcd. El segundo es como escribo el segundo caracter sin borrar e primero que ya escribí.
El segundo punto de interés es la etiqueta blanco, ya que si no la anotaba al apretar una tecla (digamos 5) se mostraba al 5 y después de dejarla de presionar regrsaba a 0. Como puedo evitarlo sin poner una etiqueta forzada dentro de la tabla? muchas gracias por su atenci´pn