View
1.528
Download
2
Category
Preview:
DESCRIPTION
Citation preview
INTRODUCCION
El proyecto a desarrollar es una cerradura electrónica, ya que abarca el concepto sobre la seguridad de las personas en su hogar, empresas o negocios, etc., así como la evolución de los circuitos digitales, donde esta gama de proyectos son utilizados con mayor facilidad y con una gran calidad de equipo, los circuitos cada día son más pequeños y fáciles de llevar, hemos visto que la tecnología a superado muchas barreras hoy en día como es el caso de los celulares que utilizan microchips para mejorar las herramientas necesarias, en este proyecto deseo establecer que podemos utilizar y realizar circuitos con una gran expectativa y uso, con la mejor calidad que podemos desempeñar.
Otro aspecto importante a considerar es que el proyecto debe ser un problema de aplicación real. Con este sistema se pretende dar una solución al problema de las puertas de seguridad que son utilizadas en la mayoría de las empresas, como hoteles, restaurantes, hasta incluso en el hogar, ya que hoy en día dichos sistemas son muy utilizados.
Este proyecto está pensado para aquellas empresas, locales, tiendas, el hogar, etc., que cuentan con diversas puertas de acceso o que simplemente desean tener seguridad y proteger su beneficio, donde se lleva un control del ingreso y egreso de las personas a través de las mismas.
A continuación desglosaremos las diferentes partes del proyecto, comenzando por los objetivos, la definición de cada componente así como los esquemas, algunas especificaciones de los componentes, detallare cada aplicación que tiene el proyecto, así como la comprensión y el desarrollo del programa para comprender como opera este circuito, observaremos y ensamblaremos la estructura final del diagrama establecido por todos los componentes y por último se demostraran con imágenes como operara el circuito para comprender mejor el proyecto.
OBJETIVOS DEL PROYECTO
* El objetivo es Diseñar una cerradura electrónica destinada para el uso en las empresas, tiendas, hogar, etc., estableciendo una contraseña para que solamente tengan acceso las personas que estén autorizadas y para su mejor seguridad.
* La puerta puede tener dos teclados, una para ingreso y otro para el egreso, o simplemente puede tener un teclado para el ingreso y del otro lado que sea manual para el egreso.
* Cada persona autorizada tiene un número de usuario y un número de clave, o simplemente un número de claves esto es opcional.
* En las empresas y negocios, se usaría una PC conectada al sistema que se encargaría de controlar el ingreso de los trabajadores o usuarios para utilizarla también como un registro de la hora de entrada y salida de cada persona.
* Una persona o usuario puede cambiar su clave desde el momento que lo decida, para mayor seguridad o simplemente para comprobar que el sistema está funcionando adecuadamente todos los días.
* Cuando la puerta este abierta o la quieran abrir pero que no cuenten con la contraseña sin haber sido autorizados, se activara automáticamente una alarma para establecer que la persona no tiene acceso, ya que el circuito solo permitirá el acceso a las personas autorizadas.
* Este sistema esta diseñado para que solamente ingresen las personas autorizadas, en el caso de que la persona se equivoque al ingresar la contraseña, tendrá 3 intentos para ingresar la contraseña de lo contrario se activara la alarma y se bloqueara la puerta durante un tiempo determinado dando aviso a las estaciones de policía que hay un problema ya sea en la empresa, negocio o en el hogar.
DESARROLLO DEL PROYECTO.
Con este circuito puedes poner una clave de acceso para entrar en una habitación o para abrir un armario, caja... etc. y una alarma que suena cuando alguien introduce la clave mal tres veces.
La clave se introduce mediante un teclado de 16 teclas y se visualiza el estado en una pantalla de cristal líquido (LCD) de 16 caracteres-2 líneas. El circuito acciona un relé el cual acciona el dispositivo de apertura de la puerta, que puede ser, por ejemplo, una cantonera como la que hay en las puertas de los portales y que accionamos desde nuestra casa pulsando un botón.
DIAGRAMA DE LA CERRADURA ELECTRONICA
ESQUEMAS ELECTRÓNICOS.
Fuente de alimentación: + 5v.
PIC 16F84.
220
v.
Transformado
r
6v./300 mA.
1000
uF/25 v..
Puente
rectificador
40v /1A
7805
+5 v..
1K + led rojo.
MCLR
RA0
RA2
RA3
0v.
OCS1
OCS2
RA5
RA1
RA4
RC0
RC1
RC2
RC3
RB7
RB4
RB5
RB6
RB3
RC7
0v.
+5v
RB0/INT
RB1
RB2
RC4
RC5
RC6
1
8
19
2
0
LCD 2 x 16.
LCD 2 x 16. Conector macho de circuito impreso para cable plano.
1
10
0
100
nF
1
K
471N4148
+5v.
7 8
BUZ
ZER
9 1
0
15
pF
4 MH
z15
pF
1
9
2
0
+5v.
2
8
2
7
2
6
2
5
2
4
2
3
2
1
2
2
RB7 RB0
4
REL
E
RA2 RA5
RB7
RB5
RB3
RB1
5 v.
RB6
RB2
RB4
5 v.
10 K
114
RB7
RB6
RB5
RB4
RB3 RB
2RB1
5 v.
5 v.10 K
Teclado matricial 4 x 4.
Conexiones de tira recta de pines.
RB1RB7 RB0 RB4RB6 RB2RB5
2,2K 2,2K
1
4
7
<
2
5
8
0
3
6
9
>
025Fila del 8
C1= columna1 C2 C2
C2
C1 C3
Fila del 8 5 C1 2 C3 0 C2
2,2K
Chicharra.
Relé.
+5v
.
10 K
10 K
BC547
CHICHARRA
+5V.
BUZZER
+5v
.
10 K
10 K
BC547RELE
RELE +5V.
1N4007
Teclado matricial hexadecimalUn teclado de este tipo consta de 16 teclas (matriz 4 X 4). Por cada fila y cada columna de la matriz hay un "cable" que pasa por detras de las teclas, las cuales estan colocadas en las intersecciones entre filas y columnas.
Así pues, la columna 1 (COL1) es un "cable" que pasa por debajo del 1, del 4, del 7 y del * ; la fila 1 (FIL1) pasa debajo de la A, 3, 2 y 1.Filas y columnas no están conectadas entre si.
Cuando se pulsa una tecla se conecta la columna y la fila que pasa por debajo de dicha tecla. Por ejemplo, si se pulsa el 1 se conecta la COL1 con FIL1; si se pulsa el 8 se conecta la COL2 con FIL3, y asi sucesivamente con el resto de las teclas.
Esta forma estratégica de colocar todas las teclas y conexiones permite manejar 16 pulsadores con solo llevar 8 cables. Si en lugar de esto usaramos 16 pulsadores tendríamos 32 cables, sin necesidad de pensar mucho se nos podría ocurrir ponerlos todos con un terminal común, con lo que tendríamos 17 cables, La ventaja de usar la configuración matricial es clara.
El inconveniente que tiene es que para saber que tecla estas pulsando hace falta un microcontrolador (un pic por ej). Para poder ir dando distintos valores a las columnas y saber, dependiendo de los valores que se reflejen en las filas, la tecla pulsada. A un microcontrolador no le cuesta nada hacer esto.
Pantalla de cristal líquido LCDSe trata de un visualizador alfanumérico, es decir, solo se pueden ver números y letras y algún otro carácter.
Un LCD de este tipo se define por el número de lineas que es capaz de mostrar a la vez y el número de caracteres por líneas. Un LCD de 8 X 1 es un LCD de una línea y 8 caracteres. Los mas comunes son de 8, 16, 20, 24 y 40 caracteres y de 1, 2 y 4 líneas.
El propio LCD lleva ya un microcontrolador (HD44780) incorporado que es el que se encarga de mostrar los caracteres en la pantalla. Pero hace falta otro microcontrolador (un pic por ej) para que dialogue con el HD44780 y le diga que es lo que tiene que escribir. Para ello el LCD usa 11 líneas: 3 de control y 8 de datos. Aunque es posible también usar solamente 4 para los datos.
Cuando compramos un LCD de este tipo suele venir un anexo impreso que nos indica que es cada pin, por donde se alimenta y alguna información mas de vital importancia a la hora de implementar el circuito.
Fuente de alimentación continua.Una fuente de alimentación es un dispositivo o subsistema que convierte la corriente alterna de la red de distribución de la energía eléctrica en otro tipo de corriente eléctrica adecuado para el uso que se le vaya a dar.
Usualmente la entrada es una tensión alterna proveniente de la red eléctrica comercial y la salida es una tensión continua con bajo nivel de rizado. Constan de tres o cuatro etapas:* Sección de entrada: compuesta principalmente por un rectificador, también tiene elementos de protección como fusibles, varistores, etc. * Regulación: su misión es mantener la salida en los valores prefijados. * Salida: su misión es filtrar, controlar, limitar, proteger y adaptar la fuente a la carga a la que esté conectada.
Este tipo de fuentes puede ser tanto lineales como conmutadas.Las fuentes lineales siguen el esquema: transformador, rectificador, filtro, regulación y salida. En primer lugar el transformador adapta los niveles de tensión y proporciona aislamiento galvánico. El circuito que convierte la corriente alterna en continua se llama rectificador, después suelen llevar un circuito que disminuye el rizado como un filtro de condensador. La regulación se consigue con un componente disipativo regulable. La salida puede ser simplemente un condensador.Las fuentes conmutadas tienen por esquema: rectificador, conmutador, transformador, otro rectificador y salida. La regulación se obtiene con el conmutador, normalmente un circuito PWM (Pulse Width Modulation) que cambia el ciclo de trabajo. Aquí las funciones del transformador son las mismas que para fuentes lineales pero su posición es diferente. El segundo rectificador convierte la señal alterna pulsante que llega del transformador en un valor continuo. La salida puede ser también un filtro de condensador o uno del tipo LC.Las ventajas de las fuentes lineales son una mejor regulación, velocidad y mejores características EMC. Por otra parte las conmutadas obtienen un mejor rendimiento, menor coste y tamaño.
Relevador
También conocido como relé, es un dispositivo que controla el estado de un interruptor mediante una entrada eléctrica. En su interior, posee comúnmente una bobina que al energizarse -por Ley de Faraday- induce una fuerza magnética que cambia el estado del interruptor. Existen relevadores con interruptores normalmente (es decir sin flujo eléctrico) abiertos y normalmente cerrados. Además de esa característica también existen relevadores con múltiples entradas y múltiples interruptores. A continuación se muestran los que se manejan en VERIS:
SPST (Single Pole Single Throw, Polo Sencillo Interruptor Sencillo).- Consiste en una sola entrada de corriente y un sólo interruptor. El interruptor queda abierto o cerrado, según sean las condiciones dadas.
Arquitectura interna del modelo Victory 101/102/103
SPDT (Single Pole Double Throw, Polo Sencillo Interruptor Doble).- Consiste en una sola entrada de corriente y en este caso el interruptor doble consiste un interruptor que se cierra mientras que otro se abre, o como un cambio de trayectoria del circuito partiendo de una entrada común
Arquitectura interna del modelo Victory 100
DPST (Double Pole Single Throw, Polo Doble Interruptor Sencillo).- En esta configuración se tienen 2 entradas con una tierra común que pueden controlar de distintas maneras 2 interruptores simples independientes.
Arquitectura interna del modelo Victory 321/421
DPST (Double Pole Double Throw, Polo Doble Interruptor Doble).- En esta configuración se tienen 2 entradas con una tierra común que pueden controlar de distintas maneras 2 interruptores dobles independientes.
Arquitectura interna del modelo Victory 300
EL FUNCIONAMIENTO DEL CIRCUITO ES EL SIGUIENTE:
PARA ENTRAR:
1. En la pantalla del LCD se muestra el mensaje "INTRODUZCA CLAVE" entonces introduces la clave de acceso, que inicialmente será 0000 y pulsas la A para que se abra la puerta.
2. Cuando el código introducido no es el correcto se muestra el mensaje "CLAVE INCORRECTA" y la puerta no se abre.
3. Cuando se acumulan tres fallos al introducir la clave suena una sirena por un altavoz durante unos 15 segundos, después se puede volver a probar.
PARA CAMBIAR LA CLAVE:
1. Pulsar la tecla C de cambio de clave, entonces aparece durante unos instantes el mensaje "CAMBIO DE CLAVE" 2. Después te pide la clave que tenias hasta ese momento (inicialmente la 0000) con el mensaje "CLAVE ANTIGUA".
Tecleas la clave y pulsas A
3. Si la clave es correcta te pide la "NUEVA CLAVE". Tecleas la nueva clave y pulsas A.
4. A continuación te pide que repitas la clave para verificarla con el mensaje "VERIFIQUE CLAVE". Tecleas de nuevo la misma clave y pulsas A. Si te equivocas te avisa y vuelves a introducir la nueva clave
5. Si la verificación es correcta se cambia la clave y se muestra el mensaje "CLAVE CAMBIADA" durante unos segundos.
LA CLAVE DE ACCESO
1. Inicialmente es la 0000 2. La calve se almacena en la memoria EEPROM de datos del PIC, por lo que, cuando se desconecte la alimentación del
circuito se conserva la clave
3. Consta de 4 códigos que pueden ser: números del 0 al 9, asteriscos (*), y almohadillas (#). A diferencia de los códigos tradicionales que solo usan los números. Esto proporciona 20736 combinaciones posibles frente a las 10000 que se consiguen solo con números, lo que se traduce en mayor seguridad.
FOTOS.
F1. F2.
F3. F4.
F5. F6.
PROGRAMA.El programa empezará pidiendo la clave de acceso con la siguiente pantalla:Una vez introducida la combinación 1579 con el teclado, se dará el visto bueno con la siguiente pantalla:
Se activará el relé asociado al electroimán o a otro mecanismo electromecánico que nos abrirá la puerta.Si la combinación no es la adecuada, nos aparecerá otra pantalla informándonos que no es la clave de acceso.
Al cabo de unos segundos aparecerá la primera pantalla pidiéndonos la clave de acceso. El programador IC-PROG cargado con el programa cerradurra.hex , los datos 31h, 35h,37h y 39h en la zona eeprom y parámetros de programación: oscilador, fuses, etc.
C O D I G O A C C E S O ?
( * * * * )
A C C E S O
OK ! OK ! OK !
A C C E S O
N O ! N O ! N O !
Programa.
;--------------------------------------------------------------------------------------------------;Proyecto CERRADURA.;--------------------------------------------------------------------------------------------------;IMPORTANTE GRABAR EN EEPROM LOS DATOS SIGUIENTES:;POR EJEMPLO, CLAVE = 1579; EN ASCII = 31h-35h-37h,39h;fah = 31h;fbh = 35h;fch = 37h;fdh = 39h;para CLAVE de ACCESO.;---------------------------------------------------------;OSCILLATOR = XTAL/4 MHz.;CODE PROTECT = CP OFF;FUSES:
;WDT = NO;PWRT = SI ;BODEN = SI
;LVP = NO;CPD = NO;WRT = SI
;DEBURGGER = NO;----------------------------------------------------- LIST p=16f84 INCLUDE <p16f84.inc>
pagina0 macro bcf PCLATH,4 bcf PCLATH,3 endm pagina1 macro bcf PCLATH,4 bsf PCLATH,3 endm pagina2 macro bsf PCLATH,4 bcf PCLATH,3 endm pagina3 macro bsf PCLATH,4 bsf PCLATH,3 endm;--------------------------------------------
ORG 00h goto inicio
ORG 04h goto int
int nop
retfie
ORG 10h;--------------------------;----------------------------; I N I C I O;----------------------------
inicio
;Configuraciones de hard-soft.
;Configurar PA0-5.
call banco1 bcf TRISA,2 bcf TRISA,5 call banco0
bcf PORTA,2; off rele bcf PORTA,5; off buzzer
;Configurar PB1-7 salidas. pagina3 call pbconfig
;Configuración inicial LCD. call lconfigI
;Configuración de trabajo LCD.
call lconfigW call lcdcdg; CODIGO pagina0
;Activar/desactivar buzzer call bz1 call sg1 call bz1
;------------------------;---------------;---------------;PROGRAMA;---------------;------------------------progra pagina1 call clave; CLAVE DE ACCESO pagina0
call banco0 movlw 0ffh; clave buena bcf STATUS,Z xorwf 2fh,0 btfss STATUS,Z goto cros goto crosscros; clave mala call sg1 call sg1 call bz300 call sg1 call sg1 call bz300 call sg1 call sg1 call bz300 goto progracross
bsf PORTA,2; on relé
fin goto fin
;------------------------;BUZZER;------------------------bz100 bsf PORTA,5 call msg100 bcf PORTA,5 return
bz300 bsf PORTA,5 call msg300
bcf PORTA,5 return
bz1 bsf PORTA,5 call sg1 bcf PORTA,5 return
;----------------------------------;SUBRUTINAS DE CAMBIO DE BANCOS.;----------------------------------banco0 bcf STATUS,IRP bcf STATUS,RP1 bcf STATUS,RP0 returnbanco1 bcf STATUS,IRP bcf STATUS,RP1 bsf STATUS,RP0 returnbanco2 bsf STATUS,IRP bsf STATUS,RP1 bcf STATUS,RP0 returnbanco3 bsf STATUS,IRP bsf STATUS,RP1 bsf STATUS,RP0 return
;------------------------------------;Subrutinas de retardos.;-----------------------------------;0c1h=193 goto= 2 useg ;decfsz= 1 useg o 2 useg si el PC es modificicado o;la condición es verdadera;(decfsz= 1 useg) + (goto= 2 useg)= 3 useg.; 3 x 193 = 579; 579 x 579 = 335241 useg.; 335241 x 3 = 1005723 useg. sg1 call banco0 movlw 0c1h movwf 30h movwf 31h movlw 03h movwf 32hsalto1 decfsz 30h,1 goto salto1 goto recarga1salto2 decfsz 31h,1 goto salto1 goto recarga2
salto3 decfsz 32h,1 goto salto1 returnrecarga1 movlw 0c1h movwf 30h goto salto2recarga2 movlw 0c1h movwf 31h goto salto3
;----------------------;Retardo de 300 mseg.;----------------------msg300 call banco0 movlw 0c1h movwf 30h movwf 31h movlw 01h movwf 32hsato1 decfsz 30h,1 goto sato1 goto recga1sato2 decfsz 31h,1 goto sato1 goto recga2sato3 decfsz 32h,1 goto sato1 returnrecga1 movlw 0c1h movwf 30h goto salto2recga2 movlw 0c1h movwf 31h goto salto3 ;---------------------;Retardo de 100 mseg.;---------------------msg100 call banco0 movlw 0ffh movwf 30h movlw 96h movwf 31hsalto4a decfsz 30h,1 goto salto4a decfsz 31h,1 goto salto4areturn;---------------------;Retardo de 20 mseg.;---------------------msg20
call banco0 movlw 0ffh movwf 30h movlw 1ah movwf 31hsalto4 decfsz 30h,1 goto salto4 decfsz 31h,1 goto salto4return;---------------------;Retardo de 6 mseg.;---------------------msg6 call banco0 movlw 0ffh movwf 30h movlw 08h movwf 31hsalto41 decfsz 30h,1 goto salto41 decfsz 31h,1 goto salto41return;---------------------;Retardo de 2 mseg.;---------------------msg2 call banco0 movlw 0ffh movwf 30h movlw 03h movwf 31hsalto5 decfsz 30h,1 goto salto5 decfsz 31h,1 goto salto5 return;---------------------;Retardo de 45 useg.;---------------------usg45 call banco0 movlw 0fh movwf 30h salto6 decfsz 30h,1 goto salto6 return;-------------------------;Retardo de 150 useg.;-------------------------usg150 call banco0 movlw 32h movwf 30h salto61 decfsz 30h,1 goto salto61
return
;--------------------------------;---- PAGINA 1 ------------------;--------------------------------ORG 800h
;--------------------------------;Clave de acceso y cambio de la;misma.;--------------------------------clave pagina3 call lcdcdg; CODIGO pagina1 call sg1sg; retardo 1 seg. call sg1sg call bztresc; buzzer;-------------------------- call tclcdg0; intro nº1 call tclcdg1; intro nº2 call tclcdg2; intro nº3 call tclcdg3; intro nº4
call leerfad; leo la combinación grabada
call comparar; comparo lo introducido y lo grabado
movlw 0ffh call banc0 bcf STATUS,Z xorwf 2fh,0 btfss STATUS,Z goto noaceso
pagina3 call lcdaceso; acceso admitido pagina1 return
noaceso pagina3 call lcdnoacc; acceso denegado pagina1 return
;-----------------------------------------;Comparar datos del teclado;con datos de la EEPROM ;para comprobar código.;-----------------------------------------comparar call banc0 movf 66h,0 call banc1 bcf STATUS,Z xorwf 0eah,0; comparo 66h con eah. btfss STATUS,Z
goto malcompa
call banc0 movf 67h,0 call banc1 bcf STATUS,Z xorwf 0ebh,0; comparo 67h con ebh. btfss STATUS,Z goto malcompa
call banc0 movf 68h,0 call banc1 bcf STATUS,Z xorwf 0ech,0; comparo 68h con ech. btfss STATUS,Z goto malcompa
call banc0 movf 69h,0 call banc1 bcf STATUS,Z xorwf 0edh,0; comparo 69h con edh. btfss STATUS,Z goto malcompa
call banc0 movlw 0ffh; cifra correcta. movwf 2fh returnmalcompa call banc0 movlw 00h; cifra incorrecta. movwf 2fh return
;----------------------------------------;Leer datos de la EEPROM.;---------------------------------------leerfad call leerfa call leerfb call leerfc call leerfd returnleerfa movlw 0fah call leercdg call banc1 movwf 0eah; leo fah de la eeprom y lo guardo en eah. call banc0 returnleerfb movlw 0fbh call leercdg call banc1 movwf 0ebh; leo fbh de la eeprom y lo guardo
en ebh. call banc0 returnleerfc movlw 0fch call leercdg call banc1 movwf 0ech; leo fch de la eeprom y lo guardo en ech. call banc0 returnleerfd movlw 0fdh call leercdg call banc1 movwf 0edh; leo fdh de la eeprom y lo guardo en edh. call banc0 return
leercdg call banc2 movwf EEADR call banc3 bcf EECON1,EEPGD bsf EECON1,RD call banc2 movf EEDATA,0 call banc0 return
;------------------------------------------------;Teclado para código de acceso.;------------------------------------------------tclcdg0 pagina2 call teclado pagina1 movf 2dh,0 movwf 66h; guardo nº1 en 66h return
tclcdg1 pagina2 call teclado pagina1 movf 2dh,0 movwf 67h; guardo nº2 en 67h return
tclcdg2 pagina2 call teclado pagina1 movf 2dh,0 movwf 68h; guardo nº3 en 68h return
tclcdg3
pagina2 call teclado pagina1 movf 2dh,0 movwf 69h; guardo nº4 en 69h return
;------------------------------------;Subrutinas del BUZZER;-----------------------------------bzcien bsf PORTA,5 call msgcien bcf PORTA,5 return
bztresc bsf PORTA,5 call msgtresc bcf PORTA,5 returnbzseg bsf PORTA,5 call sg1sg bcf PORTA,5 return;----------------------------------;SUBRUTINAS DE CAMBIO DE BANCOS.;----------------------------------banc0 bcf STATUS,IRP bcf STATUS,RP1 bcf STATUS,RP0 returnbanc1 bcf STATUS,IRP bcf STATUS,RP1 bsf STATUS,RP0 returnbanc2 bsf STATUS,IRP bsf STATUS,RP1 bcf STATUS,RP0 returnbanc3 bsf STATUS,IRP bsf STATUS,RP1 bsf STATUS,RP0 return;------------------------------------;Subrutinas de retardos.;------------------------------------;0c1h=193 goto= 2 useg ;decfsz= 1 useg o 2 useg si el PC es modificado o;la condición es verdadera;(decfsz= 1 useg) + (goto= 2 useg)= 3 useg.; 3 x 193 = 579; 579 x 579 = 335241 useg.; 335241 x 3 = 1005723 useg.
sg1sg call banc0 movlw 0c1h movwf 30h movwf 31h movlw 03h movwf 32hsalto1x decfsz 30h,1 goto salto1x goto recarga1xsalto2x decfsz 31h,1 goto salto1x goto recarga2xsalto3x decfsz 32h,1 goto salto1x returnrecarga1x movlw 0c1h movwf 30h goto salto2xrecarga2x movlw 0c1h movwf 31h goto salto3x
;----------------------------------;Retardo de 300 mseg.;-----------------------------------msgtresc call banc0 movlw 0c1h movwf 30h movwf 31h movlw 01h movwf 32hsato1x decfsz 30h,1 goto sato1x goto recga1xsato2x decfsz 31h,1 goto sato1x goto recga2xsato3x decfsz 32h,1 goto sato1x returnrecga1x movlw 0c1h movwf 30h goto salto2xrecga2x movlw 0c1h movwf 31h goto salto3x ;----------------------------------;Retardo de 100 mseg.;----------------------------------
msgcien call banc0 movlw 0ffh movwf 30h movlw 96h movwf 31hsalto4ax decfsz 30h,1 goto salto4ax decfsz 31h,1 goto salto4axreturn
;------------------------------;------ PAGINA 2 --------------;------------------------------ ORG 1000h
;--------------------------;--------------------------; TECLADO;------------------;------------------teclado call conftcl;---------tedoc3 bcf PORTB,2 bsf PORTB,0 nop nop btfsc PORTB,4 goto fintcl3 btfsc PORTB,5 goto fintcl3 btfsc PORTB,6 goto fintcl3 btfsc PORTB,7 goto fintcl3 goto tedoc2
fintcl3 movf PORTB,0 movwf 2ah andlw 07h addlw 30h movwf 2bh; unidades
movf 2ah,0 movwf 2ch swapf 2ch,0 andlw 0fh addlw 30h movwf 2ch; decenas
andlw 0fh call numero3 movwf 2dh
call pbI3Otlc
call bz100a return
numero3 addwf PCL,1 retlw 3fh retlw 3eh retlw 39h retlw 3fh retlw 36h retlw 3fh retlw 3fh retlw 3fh retlw 33h retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh;---------tedoc2 bcf PORTB,0 bsf PORTB,1 nop nop btfsc PORTB,4 goto fintcl2 btfsc PORTB,5 goto fintcl2 btfsc PORTB,6 goto fintcl2 btfsc PORTB,7 goto fintcl2 goto tedoc1
fintcl2 movf PORTB,0 movwf 2ah andlw 07h addlw 30h movwf 2bh; unidades
movf 2ah,0 movwf 2ch swapf 2ch,0 andlw 0fh addlw 30h movwf 2ch; decenas
andlw 0fh call numero2 movwf 2dh
call pbI3Otlc
call bz100a return
numero2
addwf PCL,1 retlw 3fh retlw 30h retlw 38h retlw 3fh retlw 35h retlw 3fh retlw 3fh retlw 3fh retlw 32h retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh;---------tedoc1 bcf PORTB,1 bsf PORTB,2 nop nop btfsc PORTB,4 goto fintcl1 btfsc PORTB,5 goto fintcl1 btfsc PORTB,6 goto fintcl1 btfsc PORTB,7 goto fintcl1
goto tedoc3
fintcl1 movf PORTB,0 movwf 2ah andlw 07h addlw 30h movwf 2bh; unidades
movf 2ah,0 movwf 2ch swapf 2ch,0 andlw 0fh addlw 30h movwf 2ch; decenas
andlw 0fh call numero1 movwf 2dh
call pbI3Otlc
call bz100a return numero1 addwf PCL,1 retlw 3fh retlw 3ch retlw 37h retlw 3fh
retlw 34h retlw 3fh retlw 3fh retlw 3fh retlw 31h retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh
;-------------------------------------------------;Configurar Pb para teclado.;-------------------------------------------------conftcl call banco1a bsf OPTION_REG,NOT_RBPU movlw 0f0h movwf TRISB call banco0a bcf PORTB,0 bcf PORTB,1 bcf PORTB,2 bcf PORTB,3 return
;---------------------------------------------------------;Puerto B 7,6,5,4 y 2,1,0 = entradas y ;la 3 se queda como salida a cero para;inhabilitar la LCD.;---------------------------------------------------------pbI3Otlc call banco1a movlw 0f7h movwf TRISB call banco0a return
;-----------------------;Buzzer;-----------------------bz100a bsf PORTA,5 call msg100a bcf PORTA,5 return
;---------------------;Retardo de 100 mseg.;---------------------msg100a call banco0a movlw 0ffh movwf 30h movlw 96h movwf 31hsato4a decfsz 30h,1 goto sato4a decfsz 31h,1
goto sato4a return
;----------------------------------;SUBRUTINAS DE CAMBIO DE BANCOS.;----------------------------------banco0a bcf STATUS,IRP bcf STATUS,RP1 bcf STATUS,RP0 returnbanco1a bcf STATUS,IRP bcf STATUS,RP1 bsf STATUS,RP0 returnbanco2a bsf STATUS,IRP bsf STATUS,RP1 bcf STATUS,RP0 returnbanco3a bsf STATUS,IRP bsf STATUS,RP1 bsf STATUS,RP0return
;------------------------------------;----- PAGINA 3 ---------------------;------------------------------------ ORG 1800h;-------------------------------;Subrutinas de la pantalla LCD.;-------------------------------
;----------------------------;Subrutina de configuración;del puerto B(1-7 bit).;----------------------------pbconfig call pbcontrol call pbbusO return
;-------------------------------------;Subrutina de configuración inicial;de la pantalla lCD.;-------------------------------------lconfigI call mseg20 call l8xx call mseg6 call l8xx call useg150 call l8xx call l4xx call l427 call ldisplay0xx call lclear call lmode10
return;----------------------------------;Subrutina de configuración de la;LCD para comenzar a trabajar.;----------------------------------lconfigW call ldisplay10x call lcursorder return;---------------------------------------;Puerto B 0= entrada, 1,2 y 3 = salidas;y las pongo a cero.;---------------------------------------pbcontrol call banco11 bsf TRISB,0 bcf TRISB,1 bcf TRISB,2 bcf TRISB,3 call banco00 bcf PORTB,1 bcf PORTB,2 bcf PORTB,3 return;------------------------------;Puerto B 4,5,6 y 7 = salidas;y las pongo a cero.;------------------------------pbbusO call banco11 bcf TRISB,4 bcf TRISB,5 bcf TRISB,6 bcf TRISB,7 call banco00 bcf PORTB,4 bcf PORTB,5 bcf PORTB,6 bcf PORTB,7 return
;------------------------------;Puerto B 4,5,6 y 7 = entradas.;------------------------------pbbusI call banco11 bsf TRISB,4 bsf TRISB,5 bsf TRISB,6 bsf TRISB,7 call banco00 return
;--------------------------------------;Puerto B 7,6,5,4 y 2,1,0 = entradas y ;la 3 se queda como salida a cero para;inhabilitar la LCD.;--------------------------------------pbI3O call banco11 bsf TRISB,0 bsf TRISB,1
bsf TRISB,2 bsf TRISB,4 bsf TRISB,5 bsf TRISB,6 bsf TRISB,7 call banco00 return
;--------------------------------;Pulso de habilitación del LCD.;--------------------------------lE1 nop bcf PORTB,3 nop bsf PORTB,3 returnlE2 nop bcf PORTB,3 nop return;------------;Leer dato.;------------lrd bsf PORTB,1 bsf PORTB,2 call lE1 return;---------------;Escribir dato. ;---------------lwd bsf PORTB,1 bcf PORTB,2 call lE1 return;----------------------------------;Leer instrucción: la bandera BF ;y el contador de direcciones. ;----------------------------------lri bcf PORTB,1 bsf PORTB,2 call lE1 return;-----------------------;Escribir instrucción.;-----------------------lwi bcf PORTB,1 bcf PORTB,2 call lE1 return;-------------------------;Escribir instrucciones.;-------------------------;De 20h a port B HIGH. ;;---------------------------------------;Escribir 20h HIGH en el puerto B HIGH.
;---------------------------------------w20HpbH btfsc 20h,4 goto sal1 bcf PORTB,4sal11 btfsc 20h,5 goto sal2 bcf PORTB,5sal22 btfsc 20h,6 goto sal3 bcf PORTB,6sal33 btfsc 20h,7 goto sal4 bcf PORTB,7sal44 returnsal1 bsf PORTB,4 goto sal11sal2 bsf PORTB,5 goto sal22sal3 bsf PORTB,6 goto sal33sal4 bsf PORTB,7 goto sal44
;--------------------------------------;Escribir 20h LOW en el puerto B HIGH.;--------------------------------------w20LpbH btfsc 20h,0 goto salt1 bcf PORTB,4salt11 btfsc 20h,1 goto salt2 bcf PORTB,5salt22 btfsc 20h,2 goto salt3 bcf PORTB,6salt33 btfsc 20h,3 goto salt4 bcf PORTB,7salt44 returnsalt1 bsf PORTB,4 goto salt11salt2 bsf PORTB,5 goto salt22salt3 bsf PORTB,6 goto salt33
salt4 bsf PORTB,7 goto salt44;-----------------------------------------;Escribir instrucción de "No operación".;-----------------------------------------lnop movlw 00h call winst returnwinst movwf 20h call lwi call w20HpbH call lE2 call useg45
call lwi call w20LpbH call lE2 call useg45 return;-------------------------------------------;Escribir inst. de limpiar display y;poner a cero el contador de direcciones.;-------------------------------------------lclear movlw 01h call winstt returnwinstt movwf 20h call lwi call w20HpbH call lE2 call mseg2
call lwi call w20LpbH call lE2 call mseg2 return;----------------------------------;Escribir inst. de cursor a casa.;----------------------------------lhome movlw 02h call winstt return;------------------------------------;Escribir inst. de modo de entrada.;------------------------------------;------------------------------------------------------;El cursor se mueve en dirección incremental (I/D= 1);y el display se desplaza automáticamente (S= 1).;------------------------------------------------------lmode11
movlw 07h call winst return;----------------------------------------------------
;El cursor se mueve incremental (I/D= 1);y el display no se desplaza automáticamente (S= 0).;----------------------------------------------------lmode10 movlw 06h call winst return
;----------------------------------------------;El cursor se mueve decrementalmente (I/D= 0);y el display se desplaza autom. (S= 1).;----------------------------------------------lmode01 movlw 05h call winst return;-----------------------------------------------;El cursor se desplaza decrementalmente (I/D=0);y el display no desplaza autom. (S=0).;-----------------------------------------------lmode00 movlw 04h call winst return;-----------------------------------------;Escribir inst. del control del display.;-----------------------------------------;-------------------------------------------------------------;Display on, D= 1; Cursor on, C= 1; Cursor parpadeante, B=1.;-------------------------------------------------------------ldisplay111 movlw 0fh call winst return;----------------------------------------------------------------;Display on, D= 1; Cursor on, C= 1; Cursor no parpadeante, B=0.;----------------------------------------------------------------ldisplay110 movlw 0eh call winst return;-----------------------------------------;Display on, D= 1; Cursor off, C= 0; B= x.;-----------------------------------------ldisplay10x movlw 0ch call winst return;--------------------------------;Display off, D= 0; C= x; B= x.;--------------------------------ldisplay0xx movlw 08h call winst return;------------------------------------------;Desplazar display o mover cursor (S/C) y ;especificar dirección (R/L).;------------------------------------------
;------------------------------------------;Desplazar display y no cursor (S/C=1) a;la derecha (R/L=1).;------------------------------------------ldisplayder movlw 1ch call winst return;-----------------------------------------;Desplazar display y no cursor (S/C=1) a;la izquierda (R/L=0).;-----------------------------------------ldisplayizq movlw 18h call winst return;------------------------------------;Mover cursor y no dispaly (S/C=0) a ;la derecha (R/L=1).;------------------------------------lcursorder movlw 14h call winst return;------------------------------------;Mover cursor y no dispaly (S/C=0) a ;la izquierda (R/L=0).;------------------------------------lcursorizq movlw 10h call winst return;---------------------------------------------------;Función Set.;Configurar la pantalla: bus de 4 o 8 bits (DL),;1 o 2 líneas (N) y nº de puntos (5x10 o 5x7) (F).;---------------------------------------------------l8xx call lwi movlw 30h movwf 20h call w20HpbH call lE2 call useg45 returnl817 movlw 30h call winst returnl827 movlw 38h call winst returnl8110 movlw 34h call winst returnl8210 movlw 3ch call winst return
l4xx call lwi movlw 20h movwf 20h call w20HpbH call lE2 call useg45 returnl417 movlw 20h call winst returnl427 movlw 28h call winst returnl4110 movlw 24h call winst returnl4210 movlw 2ch call winst return
;------------------------------------------;Subrutina para colocar datos seguidos;------------------------------------------wdato movwf 20h ºcall lwd call w20HpbH call lE2 call useg45
call lwd call w20LpbH call lE2 call useg45 return;------------------------------------------;Subrutina para colocar datos en cualquier;posición de la pantalla: DDRAM address.;------------------------------------------
wdir addlw 80h movwf 20h call lwi call w20HpbH call lE2 call useg45
call lwi call w20LpbH call lE2 call useg45 return
;------------------------;Retardos para la LCD.;------------------------
;---------------------;Retardo de 1 seg.;---------------------
seg1 call banco0 movlw 0c1h movwf 30h movwf 31h movlw 03h movwf 32hsaltoa decfsz 30h,1 goto saltoa goto recargaasaltob decfsz 31h,1 goto saltoa goto recargabsaltoc decfsz 32h,1 goto saltoa returnrecargaa movlw 0c1h movwf 30h goto saltobrecargab movlw 0c1h movwf 31h goto saltoc
;---------------------;Retardo de 2 mseg.;---------------------mseg2 call banco00 movlw 0ffh movwf 30h movlw 03h movwf 31hsalto5s decfsz 30h,1 goto salto5s decfsz 31h,1 goto salto5s return
;---------------------;Retardo de 6 mseg.;---------------------mseg6 call banco00 movlw 0ffh movwf 30h movlw 08h movwf 31hsalto41s decfsz 30h,1 goto salto41s
decfsz 31h,1 goto salto41sreturn
;---------------------;Retardo de 20 mseg.;---------------------mseg20 call banco00 movlw 0ffh movwf 30h movlw 1ah movwf 31hsalto4s decfsz 30h,1 goto salto4s decfsz 31h,1 goto salto4s return
;---------------------;Retardo de 45 useg.;---------------------useg45 call banco00 movlw 0fh movwf 30h salto6s decfsz 30h,1 goto salto6s return
;-------------------------;Retardo de 150 useg.;-------------------------useg150 call banco00 movlw 32h movwf 30h salto61s decfsz 30h,1 goto salto61s return
;----------------------------------;SUBRUTINAS DE CAMBIO DE BANCOS.;----------------------------------banco00 bcf STATUS,IRP bcf STATUS,RP1 bcf STATUS,RP0 returnbanco11 bcf STATUS,IRP bcf STATUS,RP1 bsf STATUS,RP0 returnbanco22 bsf STATUS,IRP bsf STATUS,RP1
bcf STATUS,RP0 returnbanco33 bsf STATUS,IRP bsf STATUS,RP1 bsf STATUS,RP0 return
;---------------------------------;_ C O D I G O _ A C C E S O _ ?;_ _ _ _ _ / * * * * / _ _ _ _ _lcdcdg call pbconfig call lclear call lhome
movlw 20h; call wdato movlw 43h; C call wdato movlw 4fh; O call wdato movlw 44h; D call wdato movlw 49h; I call wdato movlw 47h; G call wdato movlw 4fh; 0 call wdato movlw 20h; call wdato movlw 41h; A call wdato movlw 43h; C call wdato movlw 43h; C call wdato movlw 45h; E call wdato movlw 53h; S call wdato movlw 4fh; 0 call wdato movlw 20h call wdato movlw 3fh; ? call wdato
movlw 45h call wdir
movlw 0a2h; / call wdato movlw 2ah; * call wdato movlw 2ah; * call wdato movlw 2ah; * call wdato movlw 2ah; *
call wdato movlw 0a3h; / call wdato call pbI3O return
;-----------------------------------;_ _ _ _ A C C E S O _ _ _ _ _ _;_ _ O K ! _ O K ! _ O K ! _ _ _
lcdaceso
call pbconfig call lclear call lhome
movlw 04h call wdir
movlw 41h; A call wdato movlw 43h; C call wdato movlw 43h; C call wdato movlw 45h; E call wdato movlw 53h; S call wdato movlw 4fh; 0 call wdato
movlw 42h call wdir
movlw 4fh; O call wdato movlw 4bh; K call wdato movlw 21h; ! call wdato movlw 20h call wdato movlw 4fh; O call wdato movlw 4bh; K call wdato movlw 21h; ! call wdato movlw 20h call wdato movlw 4fh; O call wdato movlw 4bh; K call wdato movlw 21h; ! call wdato movlw 20h call wdato call pbI3O return
;---------------------------------;_ _ _ _ A C C E S O _ _ _ _ _ _;_ _ N O ! _ N O ! _ N O ! _ _ _
lcdnoacc call pbconfig call lclear call lhome
movlw 04h call wdir
movlw 41h; A call wdato movlw 43h; C call wdato movlw 43h; C call wdato movlw 45h; E call wdato movlw 53h; S call wdato movlw 4fh; 0 call wdato
movlw 42h call wdir
movlw 4eh; N call wdato movlw 4fh; O call wdato movlw 21h; ! call wdato movlw 20h call wdato movlw 4eh; N call wdato movlw 4fh; O call wdato movlw 21h; ! call wdato movlw 20h call wdato movlw 4eh; N call wdato movlw 4Fh; O call wdato movlw 21h; ! call wdato movlw 20h call wdato call pbI3O return
END
Recommended