# Cerradura electrónica con PIC



## javi.tom (Jun 28, 2006)

Hola a todos! 
Estoy intentando hacer una cerradura electrónica y me gustaría a ver si alguien puede explicarme como puedo conectar a un pic 16f84a un teclado matricial de forma que me ocupe el menor número de lineas posibles. He mirado en la página web

http://www.josepino.com/pic_projects/indexsp.pl?security_keypad.jps

y ahí aparece una opción con diodos de forma que solo se necesitan 4 puertos para el teclado, pero no logro entender como funciona el teclado con esos diodos conectados, ¿alguien me lo puede explicar?







Gracias de antemano! Saludos!


----------



## EinSoldiatGott (Jun 28, 2006)

Hola, acá preguntaron algo similar, revíselo haber si le sirve.

Saludos


----------



## javi.tom (Jun 28, 2006)

He estado mirando por el foro antes de preguntar y no he encontrado nada. ¿Puedes indicarme por donde encontrarlo? Gracias


----------



## EinSoldiatGott (Jun 28, 2006)

javi.tom dijo:
			
		

> He estado mirando por el foro antes de preguntar y no he encontrado nada. ¿Puedes indicarme por donde encontrarlo? Gracias



Jeje, olvidé pegarle el link   ops: 

https://www.forosdeelectronica.com/f25/crear-cerradura-electronica-flip-flop-1987/
https://www.forosdeelectronica.com/f25/cerradura-digital-combinacion-1763/
https://www.forosdeelectronica.com/f23/candado-electronico-1336/

Saludos


----------



## javi.tom (Jun 28, 2006)

Gracias por la información, pero en el documento de word que hay adjunto en uno de tus mensajes solo explican como hacer funcionar la cerradura, pero no como diseñarla y conectar el teclado a la misma. De todos modos, parece ser que a la pagina a la que hace referencia el documento de word ya no existe y no me deja ver la imagen (ni descargar ninguno de los .asm y .hex) del circuito nada mas que muy pequeña y no puedo distinguir ninguno de los componentes. 

Agradecería cualquier tipo de información al respecto. Gracias de nuevo y saludos a todos!


----------



## EinSoldiatGott (Jun 30, 2006)

Bueno, pues deberá empezar desde 0, em este foro si no mal recuerdo hay un post de como conectar un teclado de matriz.

Imagino que sabe programar pics.

Así que no le queda más que ir avanzando, no creo que alguien le pueda hacer todo el código, pero vaya haciéndolo y en lo que tenga problemas aquí le ayudamos.

Empiece por hacer que muestre el número que presiona, después definir un número y que solo lo muestre cuando se presioen cierta convinación.

Lo de ra cerradura es sencillo, lo difícil es hacer que busque un código.

Saludos


----------



## javi.tom (Jul 2, 2006)

Buenas a todos! estoy empezando a preparar mi cerradura electrónica, pero me está surgiendo un problema que no consigo solucionar. Quiero simularlo en el Proteus ISIS Lite, pero no consigo que funcione. Tengo un código muy muy simple: 

```
LIST    p=16F84
ORG   0
entrypoint    goto  init

ORG   5
        init	clrf 0x05
	bsf	0x05,2
	bcf	0x05,2
	bsf	0x05,1
	bcf	0x05,1

END
```

El caso es que cuando le doy a simular paso a paso, pone a 0 el Puerto A, pero cuando hace el bsf 0x05,2 me pone en el puerto A un 00000101 y en la siguiente instruccion me pone un 00000001 (la ejecuta bien) y cuando llega de nuevo a bsf 0x05,1 me pone un 00000111 en el puerto A. No entiendo por qué pasa esto, pero he probado mil posibilidades (configuracion del pic, usar la libería 16f84.INC,...) y no consigo arreglarlo, a ver si alguien me puediera ayudar a que esto me funcione de una vez. 

Gracias de antemano.


----------



## newlin (Ago 31, 2006)

chamo aqui te envio un programa que sirve bien


----------



## John Sebastian (Dic 3, 2007)

de las opciones que he visto en el foro hsta el momento no la han mensionado, y es de la posibilidad de conectar un teclado matricial utilizando solo una linea, como?
conectandolo a una entrada A/D del micro y realizando divisores de tension.
les dejo la inquietud


----------



## DARKEASC (May 16, 2008)

En estos dìas estoy interesado en hacer este proyecto... por ahì encontrè esta pag donde esta todo hecho, no lo he probado pero es solo cuestion de tiempo...

http://perso.wanadoo.es/chyryes/circuitos/cerradura.htm

Cuando lo pruebe comento  que tal funciona... (si lo pruebo... estoy algo ocupado, por ahì en uno, dos o tres meses   )

Lo ùnico que no sè y que quisiera que alguien me explicara es, como va la cerradura ahì? la parte mecànica, que es lo que abre/cierra la puerta?


----------



## Meta (May 17, 2008)

LA web no tira.


----------



## Fogonazo (May 17, 2008)

http://www.defenderseguridad.com.ar/cerradur/index.htm#990a


----------



## Meta (May 17, 2008)

Fogonazo dijo:
			
		

> http://www.defenderseguridad.com.ar/cerradur/index.htm#990a



Muy interesante la web.

EDIT:

YouTube - LCD+teclado 3x4+16F84a


----------



## chimboloco2008 (Jul 1, 2008)

se que no es lo que pidio al pricipio pero es mucho mejor

aqui tienes pa que te diviertas ya esta todo echo y en varios modelos con lcd sin lcd, con dos tipos de teclado en fin mas no se puede pedir.


http://jap.hu/electronic/combination_lock.html


----------



## fraluta (Sep 27, 2010)

http://platea.pntic.mec.es/~lmarti2/cerra/index.htm


----------



## Chyryes (Sep 29, 2010)

Quizás les interesen este proyecto con LCD, teclado y PIC16F84A: http://electronica.webcindario.com/circuitos/control_accesos_teclado.htm

Se trata de una cerradura electrónica multiusuario, donde se pueden configurar parámetros como nº de intentos fallidos o nº de dígitos de los códigos de acceso. Cada usuario es capaz de cambiar su propia clave y existe un usuario con permisos de administrador que puede eliminar usuarios y cambiar la configuración del sistema


----------



## sdel (Ene 12, 2011)

Muy interesante lo del teclado con una sola linea.

yo hice el diseño de una cerradura en mikroc. adjunto los esquemas, codigos y archivo de proteus. el programa permite guardar solo una clave, para mas claves hay que hacer unos cambios minimos.
saludos espero sirva.


----------



## luis electro (Mar 6, 2012)

Hola SDEL:::

hola qe tal, estuve analizando tu proyecto acerca de la llave electronica muy bueno por cierto , & quice implementarlo en un pic similar qe es el 16f887, pero no tuve respuesta, sabes si es por el tipo de lbrerias o por qe cres qe no jale?? saludos

hola qe tal, estuve analizando tu proyecto acerca de la llave electronica muy bueno por cierto , & quice implementarlo en un pic similar qe es el 16f887, pero no tuve respuesta, sabes si es por el tipo de lbrerias o por qe cres qe no jale?? saludos


----------



## sdel (Mar 7, 2012)

Hola Luis, sinceramente no se que problema tendrás, si el compilador soporta al micro no debería haber problema con las librerías para ese micro. Seria bueno que adjuntes el codigo y un esquema para ver las conexiones.

Saludos


----------



## luis electro (Mar 12, 2012)

Hola q*U*e tal amigo q*U*e crees? ya res*O*lvi el problema del pi*C*, eran unas librerias ,pero me surgio un nuevo problema, vez q*U*e al insertar la clave se regresa a menu, amm pues q*U*isiera saber como hacerle para q*U*e en vez de q*U*e te mande a ese menu, te envie a un menu 2, q*U*e ya fue declarado como el menu anterior. saludos


----------



## PoolDkoz (Ene 24, 2013)

esta es mi programación

```
LIST P=16F876
#INCLUDE <P16F876.INC>

    __CONFIG _XT_OSC & _PWRTE_ON & _BODEN_OFF &_CP_OFF & _WDT_OFF ;& _RPD_OFF & _PGD_OFF
;DEFINICION DE REGISTROS 
    CBLOCK 20
    ENDC
MENSTABLA EQU 21H
AUXA EQU 22H
AUXB EQU 23H
AUXC EQU 24H
REG_LCD EQU 25H
ROTA EQU 26H
TECLA EQU 27H
COLUMNA EQU 28H
DATALCD EQU 29H
FLAGCLAVE EQU 30H
C1 EQU    31H
C2 EQU    32H
C3 EQU    33H
C4 EQU    34H
I1 EQU    35H
I2 EQU    36H
I3 EQU    37H
I4 EQU    38H
FILA EQU 39H

#DEFINE ENABLE PORTA,0
#DEFINE RS PORTA,1


;PARA VISUALISAR MENSAJES EN LCD

VISMENSLCD    MACRO TABLA
            LOCAL MENSAJE,FIN
            CLRF MENSTABLA
MENSAJE        MOVF MENSTABLA,W
            CALL TABLA
            XORLW 1BH
            BTFSC STATUS,2
            GOTO FIN
            MOVF MENSTABLA,W
            CALL TABLA
            CALL WRITE_DATO
            INCF MENSTABLA,F
            GOTO MENSAJE
;FIN            NOP
            ENDM


;MACRO PARA LEER TECLA PULSADA
CAPT_TECLA    MACRO REG
            LOCAL CICLOTECLA
            MOVLW .20
            MOVWF TECLA
CICLOTECLA    CALL TECLADO    
            MOVF TECLA,W
            XORLW .20
            BTFSC STATUS,2
            GOTO CICLOTECLA
            MOVF TECLA,W
            MOVWF REG
            ENDM
;...............................................................................
            ORG 000H
            GOTO MAIN
            ORG 006H
;TABLAS DE MENSAJE LCD
CLAVEOK 
        ADDWF    PCL,F
        RETLW 'C'
         RETLW 'L'
         RETLW 'A'
         RETLW 'V'
         RETLW 'E'
        RETLW ' '
        RETLW 'I'
         RETLW 'G'
         RETLW 'U'
         RETLW 'A'
         RETLW 'L'
CLAVEERROR
        ADDWF PCL,F
        RETLW 'C'
         RETLW 'L'
         RETLW 'A'
         RETLW 'V'
         RETLW 'E'
        RETLW ' '
        RETLW 'E'
         RETLW 'R'
         RETLW 'R'
         RETLW 'A'
         RETLW 'D'
        RETLW 'A'
        RETLW 1BH
INGRESODECLAVE
        ADDWF PCL,F
        RETLW 'I'
        RETLW 'N'
        RETLW 'G'
        RETLW 'R'
        RETLW 'E'
        RETLW 'S'
        RETLW 'E'
        RETLW ':'
        RETLW ' '
        RETLW 1BH
ALMACENARCLAVE
        ADDWF PCL,F
        RETLW 'A'
        RETLW 'L'
        RETLW 'M'
        RETLW 'A'
        RETLW 'C'
        RETLW 'E'
        RETLW 'N'
        RETLW 'A'
        RETLW 'R'
        RETLW ' '
        RETLW 'C'
        RETLW 'L'
        RETLW 'A'
        RETLW 'V'
        RETLW 'E'
        RETLW ':'
        RETLW 1BH
;..................................................................................

;TABLAS PARA RUTINAS DE TECLADO

COLUMNA_1    ADDWF PCL,F
            RETLW 'A'
            NOP
            NOP
            NOP
            RETLW '3'
            NOP
            RETLW '2'
            RETLW '1'
            RETURN
    
COLUMNA_2    ADDWF PCL,F
            RETLW 'B'
            NOP
            NOP
            NOP
            RETLW '6'
            NOP
            RETLW '5'
            RETLW '4'
            RETURN
COLUMNA_3    
            ADDWF PCL,F
            RETLW'C'
            NOP
            NOP
            NOP
            RETLW '9'
            NOP
            RETLW '8'
            RETLW '7'
            RETURN
COLUMNA_4 
            ADDWF PCL,F
            RETLW'D'
            NOP
            NOP
            NOP
            RETLW '#'
            NOP
            RETLW '0'
            RETLW '*'
            RETURN
CONFIG_PIC
            BANKSEL TRISB
            MOVLW    b'10000111'
            MOVWF ADCON1
            MOVLW  b'00000000'
            MOVWF TRISB
            MOVLW b'11110000'
            MOVWF  TRISC
            MOVLW b'11111100'
            MOVWF TRISA
            BANKSEL PORTB
            CLRF PORTB
            CLRF PORTC
            RETURN
;......................................................................
;RUTINA DE RETARDO PARA LA ACTIVACION LCD
DELAY1    MOVLW .8
        MOVWF AUXA
LOOP1    MOVLW .200
        MOVWF AUXB
LOOP2    MOVLW .250
        MOVWF AUXC
LOOP3    NOP
        NOP
        DECFSZ AUXC,F
        GOTO LOOP3
        NOP
        DECFSZ AUXB,F
        GOTO LOOP2
        NOP
        DECFSZ AUXA,F
        GOTO LOOP1
        NOP
        RETURN
;...........................................................................
;RUTINA DE RETARDO PARA ENVIO DE INFORMACION A LCD
DELAY2    MOVLW    .3
        MOVWF    AUXA
LOP11    MOVLW    .255
        MOVWF    AUXB
LOP22    DECFSZ    AUXB,F
        GOTO    LOP22
        DECFSZ    AUXA,F
        GOTO    LOP11
        NOP 
        RETURN
;............................................................................
;RUTINA DE ESCRITURA DE INSTRUCCIONES O DATOS EN EL LCD
WRITE_INST    MOVWF REG_LCD
            BCF RS
            GOTO CONTINUAR
WRITE_DATO    MOVWF REG_LCD
            BSF RS
            NOP
            NOP
CONTINUAR    MOVF REG_LCD,W
            MOVWF PORTB
            BSF    ENABLE
            NOP
            NOP
            NOP
            BCF ENABLE
            CALL DELAY2
            RETURN
;CONFIGURACION INICIAL DE LCD

INI_LCD    CALL DELAY1
        MOVLW b'00111000'
        CALL WRITE_INST
        MOVLW b'00001100'
        CALL WRITE_INST
        MOVLW b'00000110'
        CALL WRITE_INST
        RETURN
SCAN_FIN
            BSF STATUS,C
            MOVF PORTC,W
            ANDLW 0x0F0
            XORLW 0x0F0
            BTFSS STATUS,2
            GOTO SCAN_FIN
            RETURN
ROTAR        RLF ROTA,F
            MOVF ROTA,W
            MOVWF PORTC
            BTFSC ROTA,4
            RETURN
TECLADO        CALL ROTAR
            MOVF PORTC,W
            ANDLW 0F0;11110000
            MOVWF COLUMNA
            SWAPF COLUMNA,F
            MOVF COLUMNA,W
            XORLW 0XF
            BTFSC STATUS,2
            RETURN
            BTFSS PORTC,0
            GOTO FILA_1
            BTFSS PORTC,1
            GOTO    FILA_2
            BTFSS PORTC,2
            GOTO FILA_3
            GOTO FILA_4
FILA_1    MOVLW .07
        SUBWF COLUMNA,W
        CALL COLUMNA_2
        MOVWF TECLA
        CALL SCAN_FIN
        RETURN
FILA_2    MOVLW .07
        SUBWF COLUMNA,W
        CALL COLUMNA_2
        MOVWF TECLA
        CALL SCAN_FIN
        RETURN
FILA_3    MOVLW .07
        SUBWF COLUMNA,W
        CALL COLUMNA_3
        MOVWF TECLA
        CALL SCAN_FIN
FILA_4    MOVLW .07
        SUBWF COLUMNA,W
        CALL COLUMNA_4
        MOVWF TECLA
        CALL SCAN_FIN
        RETURN
;RUTINA DE COMPARACION DE CLAVES
COMPCLAVES
        BCF FLAGCLAVE,0
        MOVF C1,W
        XORWF I1,W
        BTFSS STATUS,2
        RETURN
        MOVF C2,W
        XORWF I2,W
        BTFSS STATUS,2
        RETURN
        MOVF C3,W
        XORWF I3,W
        RETURN
        MOVF C4,W
        XORWF I4,W
        BTFSS STATUS,2
        RETURN
        BSF FLAGCLAVE,0
        RETURN

;PROGRAMA PRINCIPAL
MAIN 
        CALL CONFIG_PIC
        CALL INI_LCD
 VISMENSLCD ALMACENARCLAVE
            MOVLW b'11000001'
            CALL WRITE_INST
            CAPT_TECLA C1
            MOVLW '*'
            CALL WRITE_DATO
CLAVE1
            CAPT_TECLA C2
            MOVLW '*'
            CALL WRITE_DATO
CLAVE2
            CAPT_TECLA C3
            MOVLW '*'
            CALL WRITE_DATO
CLAVE3
            CAPT_TECLA C4
            MOVLW '*'
            CALL WRITE_DATO
CLAVE4
            CALL DELAY1
CICLOMAIN
            MOVLW b'00000001'
            CALL WRITE_INST
    VISMENSLCD    INGRESOCLAVE
CAPT_TECLA I1
CALL WRITE_DATO
CAPT_TECLA I2
CALL WRITE_DATO
CAPT_TECLA I3
CALL WRITE_DATO
CAPT_TECLA I4
CALL WRITE_DATO
MOVLW b'11000001'
CALL WRITE_INST
CALL COMPCLAVES
BTFSS FLAGCLAVE,0
GOTO ERRORC
VISMENSLCD CLAVEOK
CALL DELAY1
GOTO CICLOMAIN
ERRORC 
VISMENSLCD CLAVEERROR
CALL DELAY1
GOTO CICLOMAIN
END
```
y aquí os muestro el los errores que me salen

```
Message[302] C:\USERS\PROPIETARIO\CERRADURA PIC 16F876\CERRAR.ASM 184 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Error[113]   C:\USERS\PROPIETARIO\CERRADURA PIC 16F876\CERRAR.ASM 38 : Symbol not previously defined (INGRESOCLAVE)
Error[113]   C:\USERS\PROPIETARIO\CERRADURA PIC 16F876\CERRAR.ASM 43 : Symbol not previously defined (INGRESOCLAVE)
Warning[206] C:\USERS\PROPIETARIO\CERRADURA PIC 16F876\CERRAR.ASM 350 : Found call to
```


----------



## D@rkbytes (Ene 24, 2013)

Puedes hacer dos cosas.
Esta parte...

```
[B]INGRESODECLAVE[/B]
        ADDWF PCL,F
        RETLW 'I'
        RETLW 'N'
        RETLW 'G'
        RETLW 'R'
        RETLW 'E'
        RETLW 'S'
        RETLW 'E'
        RETLW ':'
        RETLW ' '
        RETLW 1BH
```
cambiarla por...

```
[B]INGRESOCLAVE[/B]
        ADDWF PCL,F
        RETLW 'I'
        RETLW 'N'
        RETLW 'G'
        RETLW 'R'
        RETLW 'E'
        RETLW 'S'
        RETLW 'E'
        RETLW ':'
        RETLW ' '
        RETLW 1BH
```
O esta parte...
VISMENSLCD   * INGRESOCLAVE*
cambiarla por...
VISMENSLCD   * INGRESODECLAVE*

Saludos.


----------



## PoolDkoz (Ene 28, 2013)

Señores muy buenas , estoy realizando el circuito de cerradura electronica de clave es 0000, lo estoy simulando en proteus y no funciona a ver si alguien me pude ayudar  a les adjunto todo lo q' avanzado asta ahora  ojala alguien me pueda ayudar


----------



## D@rkbytes (Feb 2, 2013)

Ese programa es muy parecido a este que adjunto, solo que este si funciona.
Si te fijas al ver los programas notarás que son similares.
No recuerdo de que pagina lo conseguí, y el programa estaba hecho para un PIC16F877A.
Recuerdo que el archivo contenía el diseño de simulación muy mal realizado, y lo modifique.
También adapté el código para trabajar con un PIC16F873A
Como el PIC16F876 es similar, con solo cambiar el tipo de PIC te funcionará.

Suerte.


----------



## pato uchiha20 (May 15, 2013)

Oye amigo puse el código de ese programa de la cerradura electrónica en el pic16f873a hice un pcb pero lo que pasa esque se me movió la clave y ya no se cuál es , no lo puedo quemar de nuevo por que me marca error en la EEPROM 0x0000 necesito saber si ahí alguna manera de regresarlo a 0000 como estaba antes ? O encontrar la clave que se tecleó


----------



## D@rkbytes (May 16, 2013)

pato uchiha20 dijo:


> Oye amigo puse el código de ese programa de la cerradura electrónica en el pic16f873a hice un pcb pero lo que pasa esque se me movió la clave y ya no se cuál es , no lo puedo quemar de nuevo por que me marca error en la EEPROM 0x0000 necesito saber si ahí alguna manera de regresarlo a 0000 como estaba antes ? O encontrar la clave que se tecleó


Pues, necesitas encontrar la forma de poder volver a grabar el PIC,
ya que el código tiene protección para la lectura de la EEPROM.
Si no puedes regrabar el PIC, ya no existe forma de regresar el valor original de 0000, ó cambiarlo.

Intenta borrando el PIC con el programa ICProg por medio de ICSP, con éste los vuelvo a recuperar.

Suerte.


----------



## sdel (May 16, 2013)

Subo un proyecto que es simple de modificar y facil de entender, esta hecho en mikroc.


```
unsigned short kp, cnt, eepr, oldstate, inc, clok = 0;

// Keypad module connections
char  keypadPort at PORTD;
// End Keypad module connections

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

void menu()
{
   Lcd_Cmd(_LCD_CLEAR);
   Lcd_Cmd(_LCD_CURSOR_OFF);                 // Cursor off
   Lcd_Out(1, 1, "1: Abrir");
   Lcd_Out(2, 1, "2: Cambiar clave");                 // Write message text on Lcd
   Lcd_Out(3, 1, "     sergio");
   return;
}



void mesjtres()
{
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Out(1, 1, "Ingrese clave...");
     return;
}

void beep()
{
  PORTC.F1 = 1;
  Delay_ms(200);
  PORTC.F1 = 0;
  return;
}
void msjcuatro()
{
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Out(1, 1, "  nueva  clave  ");
     return;
}

void msjok()
{
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Out(2, 1, "    clave ok    ");
     return;
}
void msjclguard()
{
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Out(2, 1, " clave guardada ");
     return;
}
void msjclerr()
{
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Out(2, 1, " clave  erronea ");
     return;
}

char convert(unsigned short kp)
{
  switch (kp) {                   //pasa a ascii la tecla pulsada
      case  1: kp = '1'; break; // 1
      case  2: kp = '2'; break; // 2
      case  3: kp = '3'; break; // 3
      case  4: kp = 'A'; break; // A
      case  5: kp = '4'; break; // 4
      case  6: kp = '5'; break; // 5
      case  7: kp = '6'; break; // 6
      case  8: kp = 'B'; break; // B
      case  9: kp = '7'; break; // 7
      case 10: kp = '8'; break; // 8
      case 11: kp = '9'; break; // 9
      case 12: kp = 'C'; break; // C
      case 13: kp = '*'; break; // *
      case 14: kp = '0'; break; // 0
      case 15: kp = '#'; break; // #
      case 16: kp = 'D'; break; // D
    }
    return kp;
}

void guardaclave()        //lee una clave de 4 digitos desde teclado y la guarda en la eeprom
{
   int i;
   unsigned short c;
   for (i = 0; i < 4; i++){
      do {
         c = Keypad_Key_Click();
         }
      while (!c);
      Lcd_Chr(2,1+ i, '*');
      beep();
      EEPROM_Write(0x80+i, c);     //se podria agregar un pitido en cada pulsacion
   }
}

int claveok()    //devuelve 1 si la clave es ok o 0 si es erronea
{
 unsigned short c, car;
 char cr, chr;
 int i = 0;
 int ok = 1;
 while(i < 4 && ok == 1){
      car = EEPROM_Read(0x80+i);
      do {
          c = Keypad_Key_Click();
         }
      while (!c);
      Lcd_Chr(2,1+ i, '*');
      beep();
      if(car == c){
          ok = 1;
      }else
           {
          ok = 0;
           }
      i++;
 }
 return ok;
}

void main() {
  Keypad_Init();                                // Initialize Keypad
  Lcd_Init();                                   // Initialize Lcd
  TRISC.F0 = 0;
  TRISC.F1 = 0;
  PORTC.F0 = 0;
  PORTC.F1 = 0;
  eepr = EEPROM_Read(0x80);             // lee eeprom para ver si esta vacia
  if (eepr == 255){
     mesjtres();
     guardaclave();
  }
  do
  {    //bucle infinito
    inc = 0;                                     // Reset key code variable
    menu();
    do{
       inc = Keypad_Key_Click();         //en inc el numero de tecla pulsada
      }
    while (!inc);
    beep();
    if (inc == 1){
        mesjtres();
        if ((clok = claveok())== 1){        //si clave es correcta
             msjok();
             PORTC.F0 = 1;
             PORTC.F1 = 1;
             Delay_ms(2000);
             PORTC.F0 = 0;
             PORTC.F1 = 0;
        }else
              {
              msjclerr();
              PORTC.F0 = 0;
              Delay_ms(500);
              }
       }
       else{
       if (inc == 2){
         mesjtres();
         if ((clok = claveok())== 1){
              msjcuatro();
              guardaclave();
              Delay_ms(500);
              msjclguard();
              Delay_ms(500);
         }else
              {
              msjclerr();
              Delay_ms(500);
              }
          }
       }
  } while (1);
}
```


----------



## dussam (Nov 28, 2013)

D@rkbytes dijo:


> Ese programa es muy parecido a este que adjunto, solo que este si funciona.
> Si te fijas al ver los programas notarás que son similares.
> No recuerdo de que pagina lo conseguí, y el programa estaba hecho para un PIC16F877A.
> Recuerdo que el archivo contenía el diseño de simulación muy mal realizado, y lo modifique.
> ...


 
*H*ola q*ue* tal! sabes tu circuito es muy intersant*e* y lo implement*e* (si tienes alguna pagina web o algo asi para ponert*e* c*o*m*o* bibliografia seria excelent*e*, al creador su respectiva gratitud) pero a la h*o*r*a* de grabar el pic y armar t*e*ngo un problema grande con el LCD, el mismo solo m*e* muestra cuadros en la 1ra linea...ya probe d*e* todo...el c*o*ntrast*e* y n*a*d*a*...otro LCD...y n*a*d*a*.....otro pic....n*a*d*a*...alguna idea d*e* q*e* puede ser???


----------



## D@rkbytes (Nov 29, 2013)

dussam dijo:


> ¿ tienes alguna pagina web o algo así para ponerte como bibliografía?sería excelente


Aquí en esta página me pueden contactar: https://www.forosdeelectronica.com/
Perfil: https://www.forosdeelectronica.com/members/d-rkbytes/

En los usuarios que han agregado su página, al hacer click izquierdo sobre su Nick aparece !Visita mi Sitio!



dussam dijo:


> Tengo un problema grande con el LCD, el mismo solo me muestra cuadros en la 1ra linea.
> Ya probé de todo, el contraste y nada, otro LCD y nada, otro pic y nada.
> ¿Alguna idea de que puede ser?


Pueden ser varios motivos, y sin más información de tu proyecto es imposible saber.
Necesitas darnos más datos; tipo de pantalla, algún esquema, código, etc.

Lo que puedes hacer es utilizar el Buscador y encontrarás mucha información para resolver tu problema.

Temas relacionados con cuadros negros en LCD

Suerte.


----------



## dussam (Nov 29, 2013)

D@rkbytes dijo:


> Pueden ser varios motivos, y sin más información de tu proyecto es imposible saber.
> Necesitas darnos más datos; tipo de pantalla, algún esquema, código, etc.



Mil disculpas, ando tan nervioso que olvidé por completo esa parte.
El lcd es uno d*e* pantalla azul 16x2 1602a y el esquema de conexión es el mismo q*ue* adjuntaste en el archivo para el pic 16f873a.
Lo único que modifiqué en el código fue el cambio de pic del 16f873 al 16f876a.
Después todo el código y el esquema no varia en nada. De antemano gracias por responder.


----------

