lo que puedes hacer es progranar tus 4 variables con los digitos correspondientes y despues comprobar de 1 en 1 para ver si coinciden con los digitos guardados, y la podrias programar en la eeprom del pic y cada que inicia el pic leer esa clave asi nunca se borrara y la podrias modificar a tu antojo
saludos
Gracias por el consejo.....Ya vi una manera de almacenar un digito de 4 numeros....Lo que hace mi codigo es poner un digito de 4 numeros en el teclado y si es el correcto poner un mensaje en el lcd de clave correcta.....Para todo este proceso he utilizado el comando delay....pero cuando utilizo esto el pic se me queda estatico...Pero ahora quiero realizar otras funciones y este comando no es muy practico....por esto utilice el TMR0 PARA CREAR CONTADORES....Pero los contadores que declaro siempre se me quedan en cero y no me aumentan ...porfavor si alguien me puede ayudar con esto....aqui les pongo el codigo en mikrobasic...Y el contador que declaro es cnt...Pero como les dije se queda en cero y no aumenta.....
program Teclado16f874a
''------Declaracion de variables---------
'------Variables de teclado y lcd--------
dim cnt as word
dim b as byte
dim kg as byte
dim a as byte
dim ky,kz,kt as byte
dim kp as byte
dim curX as byte
dim curY as byte
dim keypadPORT as byte at PORTD
dim text as string [16]
dim intro as string [16]
dim falla as string [16]
dim Listo as string [16]
dim desarmado as string [16]
dim activado as byte
'-------Variables de sistema de seguridad----
sub procedure interrupt 'cuando una interrupcion es generada
cnt = cnt+1
TMR0 = 96 ' Timer TMR0 con 96 -> 100 eq 0.5seg
INTCON = 0x20 ' Bit T0IE es seteado, bit T0IF es limpiado
end sub
dim LCD_RS as sbit at RC4_bit ' Conexiones del módulo Lcd
LCD_EN as sbit at RC5_bit
LCD_D4 as sbit at RC0_bit
LCD_D5 as sbit at RC1_bit
LCD_D6 as sbit at RC2_bit
LCD_D7 as sbit at RC3_bit
LCD_RS_Direction as sbit at TRISC4_bit
LCD_EN_Direction as sbit at TRISC5_bit
LCD_D4_Direction as sbit at TRISC0_bit
LCD_D5_Direction as sbit at TRISC1_bit
LCD_D6_Direction as sbit at TRISC2_bit
LCD_D7_Direction as sbit at TRISC3_bit ' Final de conexiones del módulo LCD
main:
ADCON1 = 0x06 ' Configurar pines analógicos como digitales ed E/S
TRISD = 1
PORTD = 0x00
TRISC = 0
PORTC = 0x00
TRISA = %11111011 'Configuracion in/out '%1 entrada
TRISB = %00000000
PORTB = 0x00
PORTA = 0x00
OPTION_REG = 0x84 ' preescalador se asigna a tmr0
TMR0 = 96 ' Timer T0 cuenta de 96 a 255
INTCON = 0xA0
Keypad_Init()
Lcd_Init()
Lcd_Cmd(_LCD_CLEAR) ' Borrar el visualizador
intcon = 1
text = "Clave Correcta"
intro = "Introduzca clave"
falla = "clave incorrecta"
listo = "ARMADO"
desarmado = "DESARMADO"
'----Inicializando variables------
'-----Variables de teclado y lcd-----
curX=1 ' Memorizar de la posición del cursor en el visualizador LCD 2x16
curY=1
kz = 0
ky = 0
kt = 0
a = 0
b = 0
cnt=0
'------Variables de sistema de seguridad-------
while true ' Esperar que alguna tecla se presione y suelte
kp = 0
while kp = 0
kp = Keypad_Key_Click()
Delay_ms(10)
wend
select case kp ' Preparar el valor comoo salida
case 1 kp = "1"
case 2 kp = "2"
case 3 kp = "3"
'case 4 kp = "A"
case 5 kp = "4"
case 6 kp = "5"
case 7 kp = "6"
'case 8 kp = "B"
case 9 kp = "7"
case 10 kp = "8"
case 11 kp = "9"
'case 12 kp = "C"
case 13 kp = "*"
case 14 kp = "0"
case 15 kp = "#"
'case 16 kp = "D"
end select
if (curX=1) and (kp = "*" ) then
Lcd_Cmd(_LCD_CLEAR)
delay_ms(100)
Lcd_Out(1,1,intro)
Lcd_Cmd(_LCD_SECOND_ROW)
curX=2 curY=1
end if
if (curX=1) and (kp <> "*" ) then
Lcd_Cmd(_LCD_CLEAR)
curX=1 curY=1
end if
if (a = 0) then 'and (portb.1=0)and (porta.2=0) then
if (curX=2) and (kp <> "*") then
Lcd_Chr_CP(kp)
if (kp = "1") and (kz =0) then
kz = 1 'Lcd_Chr_CP(kp)
end if
if (kp = "2") and (kz = 1 ) then
ky = 1 'Lcd_Chr_CP(kp)
end if
if (kp = "3") and ( kz =1 ) and ( ky = 1) then
kg =1 ' Lcd_Chr_CP(kp)
end if
if (kp = "4") and ( kz=1 ) and ( ky =1 ) and ( kg=1 ) then
b = 1
end if
if b=1 then
kz=0 ky=0 kg=0 b= 0 activado = 1 cnt=0
Lcd_Cmd(_LCD_CLEAR)
delay_ms(100)
Lcd_Out(1,1,text)
Lcd_Out(2,1,listo)
'Lcd_Cmd(_LCD_CURSOR_OFF)
delay_ms(3000)
Lcd_Cmd(_LCD_CLEAR)
Lcd_Cmd(_LCD_FIRST_ROW)
curX=1 curY=1 a =1
else
if curY>4 then
kz=0 ky=0 kg=0
Lcd_Cmd(_LCD_CLEAR)
delay_ms(100)
Lcd_Out(1,1,falla)
delay_ms(3000)
Lcd_Cmd(_LCD_CLEAR)
Lcd_Cmd(_LCD_FIRST_ROW)
curX=1 curY=1 a=0
end if
end if
end if
end if
if a = 1 then
if (curX=2) and (kp <> "*") then
Lcd_Chr_CP(kp)
if (kp = "1") and (kz =0) then
kz = 1 'Lcd_Chr_CP(kp)
end if
if (kp = "2") and (kz = 1 ) then
ky = 1 'Lcd_Chr_CP(kp)
end if
if (kp = "3") and ( kz =1 ) and ( ky = 1) then
kg =1 ' Lcd_Chr_CP(kp)
end if
if (kp = "4") and ( kz=1 ) and ( ky =1 ) and ( kg=1 ) then
b = 1
end if
if b=1 then
kz=0 ky=0 kg=0 b= 0
Lcd_Cmd(_LCD_CLEAR)
delay_ms(100)
Lcd_Out(1,1,text)
Lcd_Out(2,1,desarmado)
'Lcd_Cmd(_LCD_CURSOR_OFF)
delay_ms(3000)
Lcd_Cmd(_LCD_CLEAR)
Lcd_Cmd(_LCD_FIRST_ROW)
curX=1 curY=1 a = 0
else
if curY>4 then
kz=0 ky=0 kg=0
Lcd_Cmd(_LCD_CLEAR)
delay_ms(100)
Lcd_Out(1,1,falla)
delay_ms(3000)
Lcd_Cmd(_LCD_CLEAR)
Lcd_Cmd(_LCD_FIRST_ROW)
curX=1 curY=1 a = 1
end if
end if
end if
end if
Inc(cury) ' me obedece segun donde ponga a cury
if activado=1 then
while 1
if cnt <100 then
portb.0=1 activado=0
else
portb.0=0
end if
wend
end if
wend
end. ' Final de programa