TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: batman123 en 21 de Septiembre de 2005, 16:15:00
-
QUIERO SABER SI ALGUIEN ME PUEDE SUMISTRA EL CODIGO DE UNA CERRADURA ELECTRONICA QUE GRAVE UNA CLAVE DE 4 DIGITOS EN LA EPROM DEL PIC , TAMBIEN QUE LA CLAVE SE PUEDA CAMBIAR ,
EL PROGRMA MANEJA UN TECLADO MATRIXIAL 4*4
1 LCD DE 16 CARACTERES Y DOS LINEAS.
ESTARE AGRADECIDO POR CUALQUIER AYUDA.
SIN EMBARGO MAS ABAJO ENCONTRARAN EL CODIGO DE MI PROGRAMA TOTALMENTE COMPLETO Y FUNCIONAL
-
Hola:
Que pena pero no quiero molestar ni mucho menos parecer grocero con lo que voy a decir....
Si esperas que te den haciendo las cosas pues creo que te va a tocar esperar sentado, por que mejor no empiezas con algun codigo base y de alli partimos...
y si las cosas no mismo se dan "INTENTANDOLO" pues alli con gusto te paso un codigo...
-
QUE PENA .. TIENES TODA la razon
miren este es el codigo pero quiero reducirlo un poco mas para que me quepa en la memoria de un 16f84A y asi poder hacerle unas mejoras..
bueno este es el codigo
DEFINE LCD_DREG PORTB " Setea el puertos de datos del LCD por el puerto B
DEFINE LCD_DBIT 0 " Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTB " Setea el port LCD Register Select
DEFINE LCD_RSBIT 4 " Setea el bit LCD Register Select
DEFINE LCD_EREG PORTA " Setea el port LCD Enable
DEFINE LCD_EBIT 0 " Setea el bit LCD Enable
DEFINE LCD_BITS 4 " Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 " Setea el numero de lineas en el LCD
a var word " definicion de variables
tecla var word
n1 var byte
n2 var byte
n3 var byte
n4 var byte
eprom1 var byte
n1="1" " asigno valor a las variables
n2="5" " el valor es equivalente en asccII
n3="9"
n4="7"
eprom1="0"
PAUSE 100 " inicio el programa
read 0,eprom1
if eprom1 = 255 then gravar_clave
goto publicidad
gravar_clave
WRITe 0, n1
WRITe 1, n2
WRITe 2, n3
WRITe 3, n4
LCDOUT $FE,1," CLAVE GRAVADA "
PAUSE 1500
GOTO publicidad
publicidad: " CICLO INICAL DEL LCD MUESTRA
pause 500 " MENSAJE DE BIENVENIDA
LCDOUT $FE,1," EDGAR SANTIAGO "
pause 500 " aqui hay que poner una rutina
OPTION_REG=0
TRISB = %11111110 "Activamos Pull-up
IF portb= $7e then goto clave
LCDOUT $FE,$C0," Electronica "
pause 500 " LEE EL TECLADO A VER SI ES "*"
" SI NO ES CONTINUA MOSTRANDO MENSAJE
OPTION_REG=0
TRISB = %11111110 "Activamos Pull-up
if portb=$7e then goto clave
LCDOUT $FE,1," "
goto publicidad
teclado:
TRISB = %11111110
low portb.0
if portb = $EE then uno
if portb = $DE then cuatro
if portb = $BE then ciete
if portb = $7E then asterisco
TRISB = %11111101
low portb.1
if portb = $ED then dos
if portb = $DD then cinco
if portb = $BD then ocho
if portb = $7D then cero
TRISB = %11111011
low portb.2
if portb = $EB then tres
if portb = $DB then seis
if portb = $BB then nueve
if portb = $7B then numeral
goto teclado
asterisco
tecla="*"
return
ciete:
tecla="7"
return
cuatro:
tecla="4"
return
uno:
tecla="1"
return
dos:
tecla="2"
return
cinco:
tecla="5"
return
ocho:
tecla="8"
return
cero:
tecla="0"
return
tres:
tecla="3"
return
seis:
tecla="6"
return
nueve:
tecla="9"
return
numeral:
tecla="#"
return
clave:
LCDOUT $FE,1," Digite su Clave"
pause 1000
gosub teclado
SWAP tecla, n1
LCDOUT $FE,$C5,"X"
pause 500
gosub teclado
SWAP tecla, n2
LCDOUT $FE,$C6,"X"
pause 500
gosub teclado
SWAP tecla, n3
LCDOUT $FE,$C7,"X"
pause 500
gosub teclado
SWAP tecla, n4
LCDOUT $FE,$C8,"X"
pause 500
READ 0,EPROM1
IF eprom1 = n1 then miro_dos
incorrecto:
LCDOUT $FE,1,"Clave Incorrecta"
pause 500
goto publicidad
miro_dos
READ 1, eprom1
IF eprom1 = n2 then miro_tres
goto incorrecto
miro_tres
READ 2, eprom1
IF eprom1 = n3 then miro_cuatro
goto incorrecto
miro_cuatro
READ 3, eprom1
IF eprom1 = n4 then goto menu
goto incorrecto
menu
LCDOUT $FE,1," Selecione "
pause 1000
LCDOUT $FE,1,"1_Abrir Puerta"
pause 300
LCDOUT $FE,$C0,"2_Cambiar Clave"
gosub teclado
IF tecla = "1" THEN goto abrir
if tecla = "2" then goto nueva_clave
"if tecla != "1" and tecla!= "2" then LCDOUT $FE,1,"TECLA INCORRECTA "
LCDOUT $FE,1,"TECLA INCORRECTA "
pause 700
goto menu
abrir:
high porta.3
LCDOUT $FE,1," Bienvenido "
pause 3000
low porta.3
goto publicidad
nueva_clave
LCDOUT $FE,1," Digite su Nueva"
LCDOUT $FE,$C0,"Clave:"
pause 500
gosub teclado
SWAP tecla, n1
LCDOUT $FE,$C7,"X"
pause 500
gosub teclado
SWAP tecla, n2
LCDOUT $FE,$C8,"X"
pause 500
gosub teclado
SWAP tecla, n3
LCDOUT $FE,$C9,"X"
pause 500
gosub teclado
SWAP tecla, n4
LCDOUT $FE,$C9+1,"X"
pause 500
goto gravar_clave
BUENO ESPERO SUGERENCIAS....
-
Hola:
Esta haciendo este programa lo que deveria o tiene algun error...? ocupa mas memoria de la que soporta el micro?
-
no el programa funciona perfectamente,
es que quiero agrgarle otras cositas como por ejemplo clave de 5 digitos y otrso mensajes. pero creo que la rutina para leer el teclado me esta generando mucho codigo es por eso que quiero me den sugerencias de como minimizar este codigo
aclaro el teclado es matricial 4 x 4
agradezco opiniones...:
-
Hola:
Perdon pero te importaria mucho poner el esquema de tu circuito aqui...! Veo que el teclado y el LCD los conectas al puerrto B... y no se como es que no te da problemas ya que para las dos cosas necesitarias como minimo 14 pines ya que estas trabajando a 4 bits el lcd....! y el teclado utiliza 8 pines...! El codigo es totalmente hecho por ti o lo sacaste de algun libro...?
-
Hola,
Que pic utilizaste para hacer las pruebas?.
morfeus
-
Escrito originalmente por morfeus
Hola,
Que pic utilizaste para hacer las pruebas?.
morfeus
utilizo el pic 16f84A pero quiero ver si puedo reducir a un mas el codigo para
agregarle aun mas funcionalidad al proyecto. pues por estos lados se me ha echo imposible conseguirme un pic 16f628 y asi poder jugar con esos 2k de memoria
jajajajajaja....aajajajaja..
-
Escrito originalmente por LordLafebre
Hola:
Perdon pero te importaria mucho poner el esquema de tu circuito aqui...! Veo que el teclado y el LCD los conectas al puerrto B... y no se como es que no te da problemas ya que para las dos cosas necesitarias como minimo 14 pines ya que estas trabajando a 4 bits el lcd....! y el teclado utiliza 8 pines...! El codigo es totalmente hecho por ti o lo sacaste de algun libro...?
hoy no tengo tiempo de subir el esquema porque estoy en un ciber cafe pero tan pronto pueda lo subo el, EL PROYECTO ES TOTALMENTE FUNCIOBNALS SI YA LO COMPILASTE TE PUEDES DAR CUENTA QUE NO TIENE ERRORES Y ES TOTALMENTE HECHO POR MI , SOY TECNICO EN ELECTRONICA, ASI QUE SI ME PUEDES AYUDAR FERFECTO.
ADEMAS COMO TE PUEDES DAR CUENTA ME QUEDAN PUERTOS PARA TRABAJAR
SIN PROBLEMA.
EL TRUCO ES TRABAJAR CON ENABLE DEL LCD PUES CUANDO TU EJECUTAS UNA ORDEN PARA CONTROLAR EL LCD EL PBP LO QUE HACE ES ACTIVARLO Y CUANDO TERMINA DE EJECUTAR EL COMANDO LO DESACTIVA Y PUEDES SEGUIR TRABAJANDO CON LOS MISMOS PUERTOS SIN AFECTAR LAS SEÑALES QUE LE LLEGAN AL LCD.
ESPERO ME ENTIENDAS SUERTE Y PULSO....
ESPERO ME AYUDES A REDUCIR EL CODIGO Y A HACERLO AUN MAS FUNCIONAL PORQUE LO QUIERO CON UNA CLAVE DE 6 NUMEROS PARA QUE SEA INVIOLABLE.
-
Hola batman123,
Pues animate a subir el esquema y entre todos de seguro podemos ayudarte a disminuir el código del programa.
saludos
morfeus
-
Hola:
Bueno si utilizas el enable entonces bien...
Para la rutina del teclado ensaya esta de la pagina de Bruce Reynolds y cuentame como te va...! OK?
Por lo del pic tambien puedes conseguirte un 16F627 ó 16F648....!
http://www.rentron.com/serkey16.htm
-
creo que esa rutina la del link
solo sirve para leer una tecla pero el preblema es para saber cual
toca crear una tabla para comparar el valor que es leido y luejo saber que tecla se oprimio practicamente lo que yo hago.
o me corrigen si me equivoco.
-
Hola batman123,
Creo que es como tu dices, habria que hacer los ensayos.
morfeus
-
Escrito originalmente por morfeus
Hola batman123,
Creo que es como tu dices, habria que hacer los ensayos.
morfeus
BUENO COMO NO VEO SUGERENCIAS ME TOCO HACER EL CODIGO PARA UN 16F628
AHORA EL CODIGO ME QUEDARA UN POCO MAS ROBUSTO Y MAS FUNCIONAL TODAVIA PORQUE ME SOBRAN 5 PUERTOS DE LOS CUALES UTILIZARE..
1. PARA SENSOR DEL RELE
1. PARA EL RELE DE LA CERRADURA
1. PARA ACTIVAR UNA ALARMA CUANDO SE INTRODUSCA 3 VESES LA CONTRASEÑA MAL
Y QUEDAN TODAVIA 2 PUERTOS NO SE QUE HACER CON ELLOS...
-
Hola:
batman123 intentaste con el codigo del link que te puse....?
Con respecto al 16F628 tienes que configurar lo fusibles para que tengas acceso a todos los pines, y si mal no recuerdo uno es solo de entrada y otro es colector abierto.... ya lo hiciste...? sino lo tienes te puedo pasar el codigo para los FUSES...!
-
Escrito originalmente por LordLafebre
Hola:
batman123 intentaste con el codigo del link que te puse....?
Con respecto al 16F628 tienes que configurar lo fusibles para que tengas acceso a todos los pines, y si mal no recuerdo uno es solo de entrada y otro es colector abierto.... ya lo hiciste...? sino lo tienes te puedo pasar el codigo para los FUSES...!
MIRA ME INTERESA EL CODIGO DE LOS FUSIBLES..
NO LO HE INTENTADO TODAVIA PERO YA ESTOY MODIFICANDO EL CODIGO
EN EL SIMULADOR ME FUNCIONA A LA PERFECCION PERO FALTA COMPROBARLO PORQUE NO TENGO A LA MANO EL PIC DEPRONTO LA OTRA SEMANA MORFEUS ME LO ESTA AYUDANDO A CONSEGUIR...
CUALQUIER COSA ME AVISAS
MI CORREO ES edgar_santiagos@hotmail.com enviame los archivos alli
cuando tenga terminado el codigo lo posteo de nuevo
-
Hola,
A ver, yo he trabajado con el pic16f628 y lo de los fusibles no lo he necesitado solo he configurado Power-Uptimer, MCLR Pinf unction este es para habilitar la interrupcion de dicho pin y por ultimo el Brown-out reset.
Para configurarlo como salidas o entradas se hace igual que en 16f84 (solo hay que deshabilitar las entradas A/D del 16f628).
Si hay algo que desconozco por favor me avisan ya que estos detalles es bueno tenerlos en cuenta.
Saludos
morfeus
-
Hola:
batman123 aqui te pongo la configuracion para los fusibles al lado de cada instruccion te detalla que hace cada una:
@ DEVICE pic16f628, INTRC_OSC_NOCLKOUT "Reloj interno solo
@ DEVICE pic16f628, WDT_OFF " Watchdog Timer desconectado
@ DEVICE pic16f628, PWRT_ON " Power-On Timer conectado
@ DEVICE pic16f628, BOD_ON " Brown-Out Detect conectado
@ DEVICE pic16f628, MCLR_OFF " Master Clear Externo desconectado
@ DEVICE pic16f628, LVP_OFF " Low-Voltage Programming desconectado
@ DEVICE pic16f628, CPD_OFF " Data Memory Code Protect desconectado
y como te decia, tendrias que leer el data del micro porque no recuerdo bien cual es el pin que funciona solo como entrada pero creo que es la del MCLR, y la otra que es colector abierto, no recuerdo bien, pero puedes probarlo, yo lo he utilizado para que trabaje con el oscilador interno y sin reset y va bien.... SUERTE...!!!
-
[cita title=Escrito originalmente por LordLafebre]Hola:
batman123 aqui te pongo la configuracion para los fusibles al lado de cada instruccion te detalla que hace cada una:
MUCHAS GRACIAS POR LA CONFIGURACION
EN EL DIA DE HOY ESTARE MEJORANDO EL CODIGO....
YA CASI ESTA LISTO SOLO FALTA PROBAR DIRECTAMENTE EN EL PIC YA QUE SIMULADO ME CORRE A LA PERFECCION...
SUERTE......
-
listo ya he mirado pero el problema es que cuando yo llamo a la rutina del teclado
nesecito que el programa regrese a la pila donde salto y con el codigo de tu teclado solamente envia un dato al LCD Y YA no regresa a ningun lado.
despues sigo con el post me tengo que ir urgente...
-
hola:
pues si quieres que regrese alinea sseguida de donde lo enviaste a la subrrutina que lee el teclado hazlo asi por ejemplo:
ProgramaPrincipal:
-
-
-
GOSUB TECLADO
-
-
goto ProgramaPrincipal
TECLADO:
-
-
"rutina para el teclado"
-
-
return
Eso es lo que entendido que quieres hace...!luego de que termine con la subrrutina teclado regresa a la linea siguiente de donde le enviaste a saltar que seria despues de GOSUB TECLADO...
-
voy a probar lo que tu dices y a ver que pasa pero toca el proximo martes porque
mañana domingo estoy de cumpleaños y me pienzo desordenar un poco con mi esposa y mi familia.
la otra semana te cuento como me fue con el codigo..
TE CUENTO QUE TAMBIEN POSTEARE EL CODIGO PARA EL PIC16F628 QUE ME HA QUEDO SUPER BACANO.
TIENE LAS SIGUIENTES CARACTERISTICAS:
* PARA ENTRAR EN EL PROGRAMA PRESIONAR *
* CLAVE PERSONAL DE 5 DIGITOS INCLUYENDO * # A B C D
PARA UN PROMEDIO DE PROVALIDADES DE 150.000 INVIOLABLE VERDAD:::::::
* SI DIJITAS 3 VESES LA CLAVE MAL SE BLOQUEA EL SISTEMA
* SOLO SE PUEDE DESBLOQUEAR CON UNA CLAVE ESPECIAL PARA EVITAR INTRUSOS
* UNA SALIDA PARA ACTIVAR EL RELE DE LA CERRADURA ELECTRICA
* UNA SALIDA PARA ACTIVAR EL RELE DE ALARMA CUANDO SE BLOQUE EL SISTEMA
* UNA BUENA PUBLICIDAD DEL AUTOR OSEA YO.. Y ESPERO QUE NO LA CAMBIEN JEJEJEJEJE.
* UN MENU PARA SELECIONAR SI QUIERO ABRIR LA PUERTA O CAMBIAR LA CLAVE ACTUAL
* CONFIRMACION PARA CUANDO INTRODUCES LA CLAVE NUEVA PARA EVITAR EQUIVOCACIONES Y LUEGO SE NOS OLVIDE LA CLAVE..
BUENO ESO ES TODO
-
si alguien le interesa este proyecto aqui esta el esquema
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3740693
--------------------------------------------------------------------------------
claro que sin los pulsadores ni las resistencias full-uf en PToA1 y PToA2es que ese esquema es para otro proyecto pero la forma de conectar el teclado y el lcd es el mismo...
espero les sea de gran utilidad y pronto subire el codigo para el pic 16f628..
suerte....................
-
Felicidades...!!!
Que bien que ya lo acabaste y lo hisiste solo...!
Y lo de las resistencias de Pull-up deben ser por el proyecto de morfeus.... verdad...?
-
si lo de las resistencias en el puerto A si son por lo del proyecto de morfeus..
en el 16f628 me quedo una chimba...
mañana o mas tarde lo subo para que lo mires..
-
jaja que suerte justo me preguntaba cuando me pongo hacer el proyectito de la cerradura con clave y aparecio batman , me ahorrastes cerebro batman y bueno me gusto la forma como tratas tu codigo bueno pude llegar a no sobrepasar los 1k de codigdel 84 con el teclado de 4*4 (key calc del proteus ) y con 5 digitos de clave le queria poner seis pero no me daba la memoria del chip ni la mia pero se podria hacer algo con la rutina data creo pues eso lo grava al inicio de el grabado y de repente u contador para llenar la eeprom del pic bueno la idea ya esta puesta aunque espero comprendas mi codigo y creo que si pues simule el que modifique del tuyo y funciona en proteus y deberia de funcionar si lo implemento ya luego te cuento pero te dejo el codigo para que lo mastiques
DEFINE LCD_DREG PORTB " Setea el puertos de datos del LCD por el puerto B
DEFINE LCD_DBIT 0 " Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTA " Setea el port LCD Register Select
DEFINE LCD_RSBIT 1 " Setea el bit LCD Register Select
DEFINE LCD_EREG PORTA " Setea el port LCD Enable
DEFINE LCD_EBIT 0 " Setea el bit LCD Enable
DEFINE LCD_BITS 4 " Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 " Setea el numero de lineas en el LCD
a var word " definicion de variables
tecla var word
n1 var byte
n2 var byte
n3 var byte
n4 var byte
n5 var byte
eprom1 var byte
i var byte
R VAR BYTE
n var byte
j var byte
M var byte
FILA_0 VAR BYTE
FILA_1 VAR BYTE
FILA_2 VAR BYTE
FILA_3 VAR BYTE
n1 = "1" " asigno valor a las variables
n2 = "5" " el valor es equivalente en asccII
n3 = "9"
n4 = "7"
n5 = "/"
eprom1 = "0"
pause 100 " inicio el programa
read 0, eprom1
If eprom1 = 255 Then gravar_clave
GoTo publicidad
gravar_clave:
WRITe 0, n1
WRITe 1, n2
WRITe 2, n3
WRITe 3, n4
write 4, n5
LCDOUT $FE,1," CLAVE GRAVADA "
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
"GOTO publicidad
publicidad: " CICLO INICAL DEL LCD MUESTRA
GoSub tiempo_05 " MENSAJE DE BIENVENIDA
LCDOUT $FE,1," ACCESO à NANDO"
GoSub tiempo_05 " aqui hay que poner una rutina
OPTION_REG = 0
TRISB = %11111110 "Activamos Pull-up
IF portb= $7e then goto clave
LCDOUT $FE,$C0," Electronica "
GoSub tiempo_05 " LEE EL TECLADO A VER SI ES "*"
" SI NO ES CONTINUA MOSTRANDO MENSAJE
OPTION_REG = 0
TRISB = %11111110 "Activamos Pull-up
if portb=$7e then goto clave
LCDOUT $FE,1," "
GoTo publicidad
teclado:
COLUMNA_0:
R = 0
TRISB = %11111110
portb 0# = 0
GoTo PREGUNTA
COLUMNA_1:
R = R + 1
TRISB = %11111101
portb 0.1 = 0
GoTo PREGUNTA
COLUMNA_2:
R = R + 1
TRISB = %11111011
portb 0.2 = 0
GoTo PREGUNTA
COLUMNA_3:
R = R + 1
TRISB = %11110111
portb 0.3 = 0
GoTo PREGUNTA
GoTo teclado
suelta:
if (portb&%11110000)=$f0 then visualiza
GoTo suelta
visualiza:
lookup j, ["741C8520963=/*-+"], tecla
Return
clave:
LCDOUT $FE,1," Digite su Clave"
GoSub tiempo_05
GoSub tiempo_05
GoSub teclado
SWAP tecla, n1
i = 0
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n2
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n3
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n4
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n5
GoSub lcd_sal
GoSub tiempo_05
read 0, eprom1
If eprom1 = n1 Then miro_dos
incorrecto:
LCDOUT $FE,1,"Clave Incorrecta"
GoSub tiempo_05
GoTo publicidad
miro_dos:
read 1, eprom1
If eprom1 = n2 Then miro_tres
GoTo incorrecto
miro_tres:
read 2, eprom1
If eprom1 = n3 Then miro_cuatro
GoTo incorrecto
miro_cuatro:
read 3, eprom1
If eprom1 = n4 Then miro_cinco
GoTo incorrecto
miro_cinco:
read 4, eprom1
If eprom1 = n5 Then menu
menu:
LCDOUT $FE,1," Selecione "
GoSub tiempo_05
GoSub tiempo_05
LCDOUT $FE,1,"1_Abrir Puerta"
GoSub tiempo_05
LCDOUT $FE,$C0,"2_Cambiar Clave"
GoSub teclado
If tecla = "1" Then GoTo abrir
If tecla = "2" Then GoTo nueva_clave
"if tecla != "1" and tecla!= "2" then LCDOUT $FE,1,"TECLA INCORRECTA "
LCDOUT $FE,1,"TECLA INCORRECTA "
GoSub tiempo_05
GoSub tiempo_05
GoTo menu
abrir:
high porta.3
LCDOUT $FE,1," Bienvenido "
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
low porta.3
GoTo publicidad
nueva_clave
LCDOUT $FE,1," Digite su Nueva"
LCDOUT $FE,$C0,"Clave:"
GoSub tiempo_05
i = 2
GoSub teclado
SWAP tecla, n1
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n2
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n3
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n4
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n5
GoSub lcd_sal
GoSub tiempo_05
GoTo gravar_clave
tiempo_05:
pause 500
Return
lcd_sal:
LCDOUT $FE,$C5+i,"X"
i = i + 1
Return
PREGUNTA:
M = 4 * R
FILA_0=($E0 +(portb&%00001111))
FILA_1=($D0 +(portb&%00001111))
FILA_2=($B0 +(portb&%00001111))
FILA_3=($70 +(portb&%00001111))
If portb = FILA_0 Then j = M
M = M + 1
If portb = FILA_1 Then j = M
M = M + 1
If portb = FILA_2 Then j = M
M = M + 1
If portb = FILA_3 Then j = M
if (portb&%11110000)<>$f0 then suelta
If R = 0 Then COLUMNA_1
If R = 1 Then COLUMNA_2
If R = 2 Then COLUMNA_3
GoTo teclado
-
MUY BUEN APORTE ELECTRONANDO
YA LO PROBE Y FUNCIONA A LAS MIL MARAVILLAS ADEMAS
TRATARE DE ENTENDER EL CODIGO PORQUE HAY RUTINAS QUE NO ENTIENDO..PERO TE QUEDO BACANO..
SUERTE.....
-
si bueno fue el sexto intento luego de varios fallidos y te pase solo el codigo pues se que lo entenderas solo aplique algunas nociones de matrices , y mira te recomiendo que mejor te compres un 16f628 y luego me cuentas pues no etratado con ese pic y tiene varias cosillas el oscilador interno la calibracion cosillas asi bueno suerte con el proyecto
-
EN ESTOS DIAS SUBO EL CODIGO PARA UN 16F628 ..
PERO MUY BUEN APORTE ELECTRONANDO
SURTE..
-
Bueno lo prometido es deuda aqui les dejo el link para que descarguen el programa para el pic 16f628.
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3821626
Que incluye varias mejoras..
1. contraseña de 5 numeros o letras.
2. activa rele para la cerradura por el puerto RA.3
3. Activa rele para alarma por el puerto RA.2
4. confirmacion de repetir clave al cambiarla
5. bloqueo del sistema al introducir 3 veses mal la contraseña
6. desbloqueo del sistema presionando a la vez la tecla (7 y A )del teclado matrixial.
cualquier cosa no duden en preguntar..
Suerte.....
-
Hola:
Felicidades, muy buen trabajo...!!!
-
MUCHAS GRACIAS LORD
-
ESTE MENSAJE ES PARA PODER TENER MI FORO EN PRIMERA PAGUINA ..
SUERTE Y FELIZ 2006
-
BUENO QUE NOSTALGIA ME DA VER ESTE POST,.......
PUES LA VIDA ME IMPIDIÓ DEDICARME A LA ELECTRÓNICA, HORA ME DEDICO A OTRAS COSAS Y Y MI TRABAJO ABSORVE TODO MI TIEMPO PERO ESPERO PROGRAMAR DE NUEVO ALGÚN DÍA....
-
[code' Program to create telephone pad tone
' Oscillator must be set to 20MHz
DEVICE = 16F628a
XTAL = 4
ALL_DIGITAL = TRUE
PORTB_PULLUPS = ON ' Enable PORTB pull-ups
LCD_DTPIN = PORTb.4
LCD_RSPIN = PORTa.0
LCD_ENPIN = PORTa.2
LCD_INTERFACE = 4 ' 4-bit Interface
LCD_LINES = 2
LCD_TYPE = 0
' Define program variables
Dim Col as Byte ' Keypad column
Dim Row as Byte ' Keypad row
Dim Key as Byte ' Key value
Dim Tone as Byte ' Tone number
dim XLCD as Byte
dim YLCD As Byte
dim Pitch as byte
dim Clave as Byte
dim Digitos as byte
dim Posicion as byte
dim Leer as byte
' Define program Symbol
Symbol Altavoz = PORTa.1 ' Alias speaker pin
Symbol Rele = porta.3
symbol Led = porta.4
'trisa=%11111111
Delayms 50 ' Estavilizacion LCD
' Comienza el programa ran-up
'********************1234567890123456
high Led
Print at 1,1,"Teclado / Clave "
Print at 2,1,"IBERICA 2000/1.0"
Delayms 2000
low led
cls
Cero: posicion = 0
digitos = 0
Inicio:
'*********************************************************************************
'*** Lee EEprom para conprovar que la memoria
'*** no se a escrito nunca y pide clave nueva
'*********************************************************************************
Leer = eread 0 'LEE EL LA EEPROM LA POSICION CERO
if Leer = $FF then Nueva 'COMPUEBA QUE VALE LA POSICION CERO
goto vieja 'SI VALE FF PIDE CLAVA NUEVA, SI NO VA A VIEJA
Nueva:
high Led
'********************1234567890123456
Print at 1,1,"Leyendo Memoria "
Print at 2,1," Codigo Activa "
Delayms 2000
cls
'********************1234567890123456
print at 1,1," Clave Nueva: "
print at 2,1,"> <"
xlcd=2
ylcd=2
Otra: 'SE GENERA UN BUCLE DE PARA INTRODUCIR 4 DIGITOS
For digitos = 0 to 3
Gosub Getkey
Lookup Tone,["0123456789*0#"],Key'
ewrite Posicion,[key] 'GRABA EN LA EEPROM LAS TECLAS PULSADAS
posicion = posicion +1 'INCREMENTA UNA POSICION EN LA EEPROM
Print at Xlcd,ylcd, Key 'INPRIMA EL LA LCD LA TECLA PULSADA
ylcd = ylcd +1 'INCREMENTA CURSOR A LA DERECHA
Dtmfout Altavoz, [Tone] 'GENERA TONO DE GRABACION
Next 'SALE DEL BUCLE
'****************** 1234567890123456
Print Cls, "CLAVE Grabada " '
print at 2,1,"En Memoria EEPro"
Dtmfout Altavoz, [12]
Delayms 2000
cls
Vieja:
high Led
'****************** 1234567890123456
Print Cls, " Teclea Clave"
print at 2,1,"> <"
xlcd = 2
ylcd = 2
Clave = 0
Digitos = 0
' Oprotunidad = 0
Posicion = 0
Loop:
if ylcd >= 17 then Inicio
Gosub Getkey ' Get a key from the keypad
Leer = eread Posicion
posicion = posicion + 1
Lookup Tone,["0123456789*0#"],Key
Print at Xlcd,ylcd,Key
if Leer = Key then Clave = Clave + 1
ylcd = ylcd +1
Dtmfout Altavoz, [Tone]
if ylcd = 6 then Compara
Goto Loop ' Do it forever
Compara:
if Clave = 4 Then Abre
Cierra:
'****************** 1234567890123456
print cls , "Acceso Denegado"
Dtmfout Altavoz, [3]
Delayms 2000
goto vieja
Abre: high Rele
print Cls , "Acceso Permitido"
For Pitch = 0 to 120
Sound Altavoz,[Pitch,1]
Next
Delayms 2000
low Rele
goto vieja
' Subroutine to get a key from keypad
Getkey:
Delayms 50 ' Debounce
Getkeyu:
' Wait for all keys up
PORTB = 0 ' All output pins low
TRISB = $f0 ' Bottom 4 pins out, top 4 pins in
If (PORTB >> 4) <> $0F Then Getkeyu ' If any keys down, loop
Delayms 50 ' Debounce
Getkeyp:
' Wait for keypress
For Col = 0 To 3 ' 4 columns in keypad
PORTB = 0 ' All output pins low
TRISB = (Dcd Col) ^ $FF ' Set one column pin to output
Row = PORTB >> 4 ' Read row
If Row <> $0F Then Gotkey ' If any keydown, exit
Next
Goto Getkeyp ' No keys down, go look again
' Change row and column to key number 0 - 15
Gotkey:
Key = (Col * 3) + (Ncd (Row ^ $0F)) -1
'Key = (Col * 3) + (Ncd (Row ^ $0F))
' Translate key to telephone keypad tone
' 10 = *
' 11 = #
' 12 = A
' 13 = B
' 14 = C
' 15 = D
Lookup Key,[1,2,3,4,5,6,7,8,9,10,11,12],Tone
Return ' Subroutine over
End]
-
muy bien
con ganas de regresar