" nos liamos con el comando DIG , pero esto seria una forma de hacerlo
" no dispongo de ningun teclado para provar
Codigo:
MyKey var word " tu clave
BufferKey var word " clave entrada por el teclado
Key var byte " tecla pulsada
Intentos var byte
Digitos var byte
Temp var word
"*********************************************************
Intenta:
for Intentos = 1 to 3
BufferKey = 0
Temp = 1000
for Digitos = 1 to 4 " buscas 4 digitos
gosub scan_key " espera tecla pulsada
if Key = 10 then Intenta "Tecla cancelar ejemplo "*" empieza de nuebo
BufferKey = BufferKey + (Key*Temp)
Temp = Temp / 10
next Digitos " tienes los 4 digitos en BufferKey
if BufferKey = MyKey then goto Bingo "Ok
next Intentos
gosub Error " error despues de 3 intentos
goto Intenta " otra vez
"*********************************************************
Bingo:
"bla
"bla
goto Intenta
Scan_Key:
" bla
" bla
" si emites un pitido al pulsar la tecla quedara + profesional 
" tecla "0" Key=0 etc.
return
Error:
"beep
"bla
"bla
return
la eeprom interna es lo mejor , mira :
Codigo:
Al_resetear:
"calves por de fecto al reprogramar el pic
DATA @0, $30,$39 "12345 clave contra electrica
DATA @2, $D4,$31 "54321 clave de panico
clave_contra var word
clave_panico var word
gosub Lee_Claves
Lee_Claves:
READ 0,clave_contra.highbyte
READ 1,clave_contra.lowbyte
READ 2,clave_panico.highbyte
READ 3,clave_panico.lowbyte
return
Guarda_Claves:
WRITE 0,clave_contra.highbyte
WRITE 1,clave_contra.lowbyte
WRITE 2,clave_panico.highbyte
WRITE 3,clave_panico.lowbyte
return
haver que puedes hacer con esto , ahora se complica un poco mas , pero si lo haces con pequeñas subrutinas veras kes muy facil.
aHora no tengo tiempo pero ya hare un ejemplo para que lo prueves .
Y ya veo que te manejas con el basic ,Ok solo es cuestion de practicar ahora .
Tiene funciones un poco liadas y sobre dimensionadas , pero si lo alternas con asembler es un cohete.
saluDos ..
Codigo:
"****************** inicio *************************************
gosub Lee_Claves " lee las claves guardadas en la eeprom
" recuerda que le has puesto 5 digitos en la clave
" y el maximo valor de la clave no puede ser mayor de 65535
"
intenta: "programa principal
gosub Borra_buffer
gosub scan_key " Haver que tecla pulsas ?
if Key = 11 then "(#) MODIFICAR clave
gosub Cambia_claves
else
if Key < 10 then "se ha pulsado 0..9 -> ya tienes un digito
gosub Entra_clave4 "a buscar el resto de digitos
if key <> 10 then continua "se ha cancelado ??
endif
endif
goto intenta " si pulsas "*" no hace nada
continua:
" case bla , bla
goto intenta
"*****************************************************************
Entra_clave5: " entrar 5 digitos por teclado
gosub Borra_buffer
gosub scan_key "espera el primer digito
if key=10 then return "tecla(*) cancelar
Entra_clave4: "resto de digitos
bufferkey=bufferkey + (key*temp) "ya se ha leido un digito
temp=temp/10
for digitos = 1 to 4 "buffer espera los 4 digitos restantes del teclado
gosub scan_key "subrutina que optiene el valor de la tecla pulsada
if key=10 then return "tecla(*) cancelar
bufferkey=bufferkey + (key*temp)
temp=temp/10
next digitos
return "tienes los 5 digitos en el buffer
Cambia_claves:
Clave_Actualizar var byte
gosub scan_key " que clave cambias ??? 1 , 2
if key = 10 then return " cancelado
if key < 3 then " teclas 1 o 2
Clave_Actualizar = Key "guardas key
gosub Entra_clave5 "ahora se ha de entrar la clave actual
if key=10 then return "cancelado
Select case Clave_Actualizar
case 1 "** clave contra electrica **
if bufferkey=clave_contra then "premio ¡¡ puedes continuar
gosub Entra_clave5 " aqui se ha de entrar la nueva clave
if key=10 then return "cancelado
clave_contra=bufferkey "cambiada
else
goto Cambia_claves "beep clave incorrecta , intenta otra vez ?
endif
case 2 "** clave de panico **
"bla
"bla
"bla
End Select
gosub Guarda_Claves "la guardas bien guardada
return "ok
endif
"gosub beep has pulsado una obcion no permitida solo 1 , 2
goto Cambia_claves
Borra_buffer:
bufferkey=0
temp=10000
return
¿ funcionará ? 
y si tienes cualquier duda , no dudes en decirlo .