Soy estudiante de ing eléctrica y necesito que me ayudes con mi proyecto. Si me puedes ayudar con el software implementando un pic16f84, teclado 4*4 matricial, y un lcd 2*16. El hardware ya lo tengo con un circuito, pero necesito el programa que utiliza 4 claves distintas para distintos usuarios.
Estas con Henry Moreno Mira te envío el programa del teclado, unicamente no te puedo ayudar mucho ya que estoy en mi tesis. Si tengo tiempo te colaboro con el sistema del lcd. Las claves son fáciles solo ponlo a compara con la instrucción btfss. list p = 16f84 Radix hex TECLA equ 0x0a KEY_1 equ 0x0b KEY_2 equ 0x0c KEY_DELAY_1 equ 0x0d KEY_DELAY_2 equ 0x0e STATUS equ 0x03 PUERTAB equ 0x06 OPTION_REG equ 0x81 NOT_RBPU equ 0x07 RP0 equ 0x05 PCL equ 0x02 Z equ 0x0c C equ 0x0c KEY_SCAN bsf STATUS,RP0 ; Seleccioan pagina 1 movlw b'00001111' movwf PUERTAB ; RB7-RB4 salidas, RB3-RB0 entradas bsf OPTION_REG,NOT_RBPU ; Activa cargas pull-up bsf STATUS,RP0 ; Selecciona pagina 0 movlw 4 movwf KEY_1 ; Numero de columnas a explorar movlw b'01111111' movwf TECLA ; Columna a activar KEY_SCAN_1 movf TECLA,W movwf PUERTAB ; Activa fila nop movf PUERTAB,W movwf KEY_2 subwf TECLA,W ; Lee las colunmas btfss STATUS,Z ; Hay alguna tecla pulsada? goto KEY_SCAN_2 ; Si hay alguna pulsada bsf STATUS,C ; No hay ninguna en esa fila rrf TECLA,C ; Seleeciona siguiente fila decfsz KEY_1,F ; Salta si se han terminado las filas goto KEY_SCAN_1 movlw 0x80 goto VOLVER ; Retorna codigo 0x80 (no hay pulsacion) KEY_SCAN_2 movlw .100 ; Bucle de temporizacion de unos 20 ms movwf KEY_DELAY_1 ; para evitar el rebote de los pulsadores KEY_SCAN_3 clrf KEY_DELAY_2 clrwdt KEY_SCAN_4 decfsz KEY_DELAY_2,F goto KEY_SCAN_4 decfsz KEY_DELAY_1,F goto KEY_SCAN_3 Movf TECLA, W ; Tras la temporizacion se lee nuevamente movwf PUERTAB ; si la tecla es la misma. Asi se nop ; evitan los rebotes movf PUERTAB,W subwf KEY_2,W btfss STATUS,Z ; Es la misma? goto KEY_SCAN_1 ; No, seguir con la exploracion movf KEY_2,W ; Si, guardar en variable de salida TECLA el ; valor recogido VOLVER movwf TECLA return ; Fin de exploracion KEY_TABLA movf KEY_1,W addwf PCL,F ; Calcula desplazamiento retlw 0x7D ; 0 retlw 0xEE ; 1 retlw 0xED ; 2 retlw 0xEB ; 3 retlw 0xDE ; 4 retlw 0xDD ; 5 retlw 0xDB ; 6 retlw 0xBE ; 7 retlw 0xBD ; 8 retlw 0xBB ; 9 retlw 0x7E ; A retlw 0x7B ; B retlw 0x77 ; C retlw 0xB7 ; D retlw 0xD7 ; E retlw 0xE7 ; F KEY_HEX movf TECLA,W movwf KEY_2 ; Almacena el codigo temporalmente clrf KEY_1 ; Contador HEX a 0 KEY_HEX_2 call KEY_TABLA ; Busca codigo en la tabla subwf KEY_2,W ; Compara con el de la tecla btfsc STATUS,Z ; Coincide? goto KEY_HEX_1 ; Si incf KEY_1,F ; No, incrementa contador HEX goto KEY_HEX_2 KEY_HEX_1 movf KEY_1,W movwf TECLA ; Carga contador HEX en la variable de salida return end
Muchas gracias si tienes tiempo ayudame con el lcd, por favor es que tengo que entregar el proyecto para el 13 de noviembre si puedes escríbeme. Gracias por tu ayuda