Documente Academic
Documente Profesional
Documente Cultură
DEL PIC18F4550
Presentado por:
BAUTISTA ALMANZA ANDRS FELIPE
Cdigo. 1070610122
BLANCO CAICEDO EDISON DAVID
Cdigo. 96022312925
VELANDIA GMEZ PAULA ANDREA
Cdigo. 95052704210
GRUPO A1B
Docente a cargo:
PULIDO CASALLAS OSCAR ANDRS
Ingeniero Electrnico
CONTENIDO
RESUMEN................................................................................................................................
ABSTRACT..............................................................................................................................
INTRODUCCIN....................................................................................................................
OBJETIVOS.............................................................................................................................
JUSTIFICACIN.....................................................................................................................
1.
MARCO TERICO........................................................................................................
1.1 TEORAS GENRICAS EXPLICATIVAS..................................................................
1.2 TEORAS GENRICAS DEL PROYECTO ......4
2. INGENIERIA Y PUESTA EN MARCHA DEL PROYECTO.........................................
2.1 ANLISIS...........................................................................................................................
2.2 DISEO ..............................................................................................................................
2.3 RESULTADOS.9
3. CONCLUSIONES................................................................................................................
4. SUGERENCIAS Y RECOMENDACIONES.....................................................................
BIBLIOGRAFIA....................................................................................................................
Anexos......................................................................................................................................
LISTA DE FIGURAS
Figura 1. Cdigo de programacin en lenguaje de alto nivel y lenguaje ensamblador.....3
Figura 2. Ambiente de programacin del MPLAB X IDE................................................4
Figura 3. Pines del microcontrolador PIC18F4550. .........................................................4
Figura 4. Instrucciones de comandos para lenguaje ensamblador. ...................................6
Figura 5. Simulacin en Proteus 8 del circuito diseado .................................................8
Figura 6. Conexin para bombillo de 110 Vac. ................................................................8
Figura 7. Diagrama de flujo para cdigo de sistema de iluminacin. ............................10
LISTA DE TABLAS
YTabla 1. Secuencia de encendido de leds........................................................................7
Tabla 2. Configuracin de pines para PIC18F4550...........................................................7
LISTA DE ANEXOS
RESUMEN
El presente informe corresponde a la recreacin de un mecanismo propio de un cajero
electrnico con opciones de retiro, consulta de saldo y cambio de clave; como instrumento de
impresin de datos se utiliz una pantalla LCD y un teclado matricial 3x4 para interaccin con el
usuario. Se implement un buzzer que conforma el sistema de alarma de bloqueo y un diodo
LED de funcionamiento a 1Hz. Como microcontrolador se utiliz un PIC18F4550 programado
en lenguaje XC8 mediante el entorno MPLAB X de Microchip.
ABSTRACT
This report corresponds to the recreation of an ATMs mechanism with options such as cashout,
amount check and password change; as printing instrument an LCD screen and a 3x4 matrix
keyboard for user interaction was used. The system lock was showed by a buzzer and a LED
operating at 1Hz was implemented showing the correct operation of the system. As
microcontroller a PIC18F4550 was used programmed into XC8 language by MPLAB X
environment.
INTRODUCCIN
Para profundizar ms en el uso de microcontroladores, en este caso PIC18F4550 se implement
un circuito para que recree el funcionamiento de un cajero electrnico. Dicho PIC se program
con un cdigo que muestree correctamente los impulsos proporcionados por el teclado matricial
y se adiciono una librera para el control del display LCD mediante instrucciones genricas; esta
librera es la personalizacin de una perteneciente a la lista de perifricos. Cuando se realizan
tres intentos incorrectos de ingreso de clave el sistema se bloquea. Cada vez que se realiza un
cambio de clave exitosamente la nueva clave se almacena en memoria no voltil (EEPROM)
para su posterior uso en caso de prdida de poder. Por lo tanto es de vital importancia conocer
sobre configuracin de entradas y salidas tanto en la programacin como en la realizacin
electrnica.
OBJETIVOS
OBJETIVO GENERAL
Implementar un sistema de cajero electrnico basado en el PIC18F4550, haciendo uso de un
teclado matricial, sistema de sonido de alarma y un display de cristal lquido LCD.
OBJETIVOS ESPECFICOS
Realizar
JUSTIFICACIN
Los cajeros automticos son mquinas expendedoras de dinero que se activan mediante una
tarjeta y una clave secreta personal, con las cuales se puede identificar el usuario. Ests mquinas
suelen realizar operaciones como extraccin de dinero, obtencin o cambio de contraseas,
consulta de saldo disponible, pago de servicios y muchas otras ms dependiendo de las
prestaciones que ofrecen los bancos. La implantacin de estos mecanismos son de gran
importancia para los bancos ya que el personal que trabaja en los bancos no tiene que estar
atendiendo a los clientes para ofrecer servicios bsicos, lo que representa una herramienta de
ahorro de tiempo y dinero para el banco y para los clientes. Los cajeros funcionan a partir con
unos mecanismos de seguridad que permiten realizar operaciones solo a quien disponga de esta
tarjeta, y esto es posible por un sistema de automatizacin y control de la informacin adquirida
que permita reducir las posibles fallas operacionales y se tenga un mayor control y rendimiento
en las prestaciones de estos cajeros.
Es aqu donde los sistemas digitales proveen una solucin de complejidad moderada, que suple
las necesidades en el mecanismo de funcionamiento de cajero automtico a partir de la
programacin de un PIC en lenguaje C, permitiendo la ejecucin de las funciones de un cajero,
donde el usuario selecciona la opcin que necesita a partir de un teclado matricial, dependiendo
de la opcin que se utilice el microcontrolador guarda la informacin que se modifique y puede
ser visualizada por el usuario a travs de una LCD que va directamente controlada al
microcontrolador con un margen de error bajo, adems de contribuir en la precisin y un grado
de exactitud mayor en el control y manejo de la informacin que realiza el usuario.
1. MARCO TERICO
1.1.
1.2.
Figura 3. Descripcin de los pines de conexin de una LCD. Tomada de (Surez Marcelo,
2015)
1. Seales de alimentacin
Son tres seales correspondientes a los pines 1, 2 y 3.
2. Seales de control
Estas seales estn en los pines 4, 5 y 6.
El pin 4 (RS) sirve para seleccionar el registro de datos (DR) cuando este tiene un valor
lgico de 1, o de instrucciones (IR) cuando asume un valor de 0.
El pin 5 (R/W) permite seleccionar la lectura o escritura en la LCD, tanto datos como
instrucciones. Cuando esta salida posee un valor lgico de 1 se selecciona lectura, o si
tiene un valor de 0 se selecciona escritura.
El pin 6 (E) permite habilitar o deshabilitar la LCD. Cuando este toma un valor lgico de
1 el enable est habilitado, o por el contrario si toma un valor de cero el enable estar
deshabilitado.
3. Seales de datos
Los pines del 7 al 14 forman un bus de datos bidireccional de 8 bits, (D7 a D0). Por
medio de estos pines se enva y se recibe informacin (si la LCD no est ocupada se
puede leer la informacin del estado del cursor).
La LCD tambin puede ser gobernada por un bus de datos de 4 hilos que se conectan a
los 4 bits ms significativos (D7, D6, D5 y D4).
Figura 4. Ubicacin de los pines de conexin de una LCD. Tomada de (Surez Marcelo,
2015)
Como mostrar un carcter en una LCD
Para escribir un carcter en una posicin determinada, es necesario mandar al registro de
instrucciones la direccin de la celda (instruccin set DDRAM address) y posteriormente
enviar el carcter al registro de datos (write data to CG or DDRAM).
Iniciacin de la LCD
Las LCDs necesitan ser inicializarlas tras ser alimentadas. El proceso de inicializacin es
necesario, si no se respetan los pasos y los tiempos que indica el fabricante, esta no puede ser
puesta en marcha.
1. Inicializacin mediante el Reset interno
El microcontrolador lleva incorporado un circuito para reset automtico tras la alimentacin
del mdulo, si no se cumplen los requisitos de tiempos especificados el modulo no se resetea
y se deber hacer mediante instrucciones.
Figura 7. Conexin del teclado matricial al PORTB del PIC 18F4550. Tomada de (Terven
Salinas, 2012)
Las filas del teclado se conectan a las lneas de la parte baja del PORTB configuradas como
salida y las columnas se conectan a las lneas de la parte alta del PORTB configuradas como
entrada. Estas lneas deben tener resistencias de pull-up, las cuales se encuentran presentes en
todos los pines del PORTB y que pueden ser activadas por software.
Para detectar que tecla se pulsa, se aplica a una fila un nivel bajo y a las otras filas un nivel alto.
Si se presiona una tecla en la fila por la que se aplica el nivel bajo, aparecer en la columna
correspondiente con la que ha hecho contacto.
En la figura 8 se pulsa la tecla 3, de tal forma que cuando el microcontrolador explora la fila
F1, este cero aparece en la columna C3 y es ledo por el pin RB6.
De acuerdo a esto, se hace uso de la librera lcd.h para ejecutar comandos de la LCD que se
incluyen en sta. En el caso del teclado, no se hace necesario el uso de una librera ya que las
funciones para ste son declaradas en el cdigo principal.
Adicional a lo anterior, se ejecuta tambin la librera para el uso de la eeprom, con el fin de poder
guardar los valores de la clave establecida y que sta misma se conserve en el PIC.
De esta manera, para obtener el sistema de cajero electrnico, se hace uso de LCD para
visualizar las distintas opciones que se ofrecen, tales como, solicitud de clave, men de inicio,
consulta de saldo, retiro de saldo y el cambio de la clave; cada opcin se selecciona de acuerdo a
lo que se indique en la LCD y por medio del teclado matricial de tal forma que se muestran en la
LCD las siguientes opciones:
VISUALIZACIN
Digite su clave
Men inicial
R(1) CS(2) CC(3) S(*)
Retirar saldo
1(1) 2(2) 5(3) 10(4)
Consultar saldo.
Cambiar clave
DESCRIPCIN
Este mensaje aparecer siempre que se quiere acceder al men
inicial. sta opcin slo tiene tres intentos de fallo, por lo cual,
despus de haber fallado tres veces en la clave, se activar el
sistema de alarma y su salida ser un Buzzer
En el men inicial se presentan distintas opciones abreviadas
para la optimizacin del espacio en la LCD. R, significa el
retiro del saldo, CS es la opcin de consultar saldo, el cual,
inicialmente ser de 200, CC indica el cambio de clave y S
indica una opcin para salir, es decir, volver a solicitar clave.
En este men, se indican los valores posibles de retiro con su
opcin de digitacin en el teclado. Adems, no se podr hacer
retiro cuando se haya excedido el saldo inicial.
Aqu, se visualiza el valor de saldo actual.
Se hace la solicitud de la clave nueva y dicha clave se
almacenar en la EEPROM, para que sea conservada an si se
desconecta el sistema de alimentacin.
De esta manera, se designan los siguientes puertos del PIC18F4550 para la implementacin del
sistema:
PUERTO
RD2
RD3
RD4-RD7
RA4
RA5
RB0-RB6
FUNCIN
Salida. RS de la LCD
Salida. EN de la LCD
Salida. Pines de funcionamiento de la LCD
Salida. Led de visualizacin de frecuencia
Salida. Sistema de alarma Buzzer
Entrada. Pines de teclado matricial 4x3
4
5
6
D0
D1
D2
D3
D4
D5
D6
D7
VSS
VDD
VEE
1
2
3
LED FRECUENCIA
7
8
9
10
11
12
13
14
BUZZER
RS
RW
E
330
R4
BUZ1
LED-BIBY
U1
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40
18
RA0/AN0
RC0/T1OSO/T1CKI
RA1/AN1
RC1/T1OSI/CCP2/UOE
RA2/AN2/VREF-/CVREF
RC2/CCP1/P1A
RA3/AN3/VREF+
RC4/D-/VM
RA4/T0CKI/C1OUT/RCV
RC5/D+/VP
RA5/AN4/SS/LVDIN/C2OUT
RC6/TX/CK
RA6/OSC2/CLKO
RC7/RX/DT/SDO
OSC1/CLKI
RB0/AN12/INT0/FLT0/SDI/SDA
RB1/AN10/INT1/SCK/SCL
RB2/AN8/INT2/VMO
RB3/AN9/CCP2/VPO
RB4/AN11/KBI0/CSSPP
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD
VUSB
PIC18F4550
RD0/SPP0
RD1/SPP1
RD2/SPP2
RD3/SPP3
RD4/SPP4
RD5/SPP5/P1B
RD6/SPP6/P1C
RD7/SPP7/P1D
RE0/AN5/CK1SPP
RE1/AN6/CK2SPP
RE2/AN7/OESPP
RE3/MCLR/VPP
15
16
17
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
1
R1
10k
R2 R3
1k
1k
Figura 9. Diseo del montaje para la implementacin del sistema de cajero electrnico
Adems de esto, se realiza un diseo de PCB base para el montaje del micrcocontrolador, en el
cual se puede aadir el teclado matricial, la LCD y lo dems componentes usados en la prctica.
Figura 9. Diseo del montaje para la implementacin del sistema de cajero electrnico
2.3 Resultados
Al implementar el diseo realizado, se obtiene efectivamente el sistema del control de motor
realizando los giros segn la secuencia escogida y planeada. Sin embargo, la recepcin de la
peticin de velocidad, ya sea subir o bajar por parte de los pulsadores tomaba ms tiempo que la
recepcin de los dems estmulos por lo que era necesario esperar a que el microcontrolador
leyera el respectivo pin para que realizara el proceso deseado. La diferencia de ngulos entre la
real y la esperada era mnima y corresponda al factor de error proporcionado por el motor y el
nmero de ngulo mnimo posible recorrer.
3. CONCLUSIONES
Es muy importante tener en cuenta cuales son los procesos a llevar a cabo en la
implementacin del sistema de control del motor paso a paso, ya que de esa forma se
puede realizar un diagrama de flujo ordenado y fcil de entender, donde se pueden
identificar las condiciones de los procesos y hacia dnde van cada una.
El lenguaje de programacin XC8 tiene la ventaja de que puede soportar cualquier tipo de
PIC, pues el C18 que se usaba anteriormente, slo soportaba los de la familia 18.
Adems, gracias al compilador MPLAB X IDE, se puede construir el cdigo de una
forma ms sencilla y entendible, sin estar agregando libreras del PIC escogido como los
propios Delays, hacindolos sencillos de interpretar.
La energizacin del PIC18F4550 debe ser muy cuidadosa, ya que al tener tanto pines, en
el momento de contarlos pueden haber errores e invertir dichas conexiones llevando a un
dao irreversible en el PIC. Adems de esto, el PICKit3 tiene varios tamaos para poner
el PIC18F4550 y un orden determinado; esto tambin puede ser perjudicial para el
microcontrolador si no se tiene en cuenta al momento de hacer la transferencia del cdigo
al PIC.
El tiempo determinado o la frecuencia de muestreo para la lectura de los pulsadores
depende de cmo se haya realizado, ya que en este caso, es bastante demorada mientras
realiza el ciclo debido a la cantidad de lneas del cdigo y por esta razn se deba
mantener presionado el pulsador hasta que se leyera el valor en el pin del
microcontrolador.
4. SUGERENCIAS Y RECOMENDACIONES
Para el ingreso del monto a retirar en la opcin de Retiro resulta ms prctico desplegar un men
con diferentes opciones de cantidad a retirar, esto limita considerablemente la versatilidad de
dicha opcin pero facilita la conversin del dato ingresado para su operacin con el saldo de la
mquina. En los pines de entrada al microcontrolador desde el teclado matricial es necesario
garantizar niveles estables de tensin para lo cual se recomienda un puenteo hacia tierra con
resistencias. En cuanto al diodo LED con frecuencia de 1Hz se sugiere el uso del mdulo Timer
del microcontrolador en lugar de retardos, para no afectar el funcionamiento del cajero y su
configuracin de tiempos.
BIBLIOGRAFA.
ELECTRONILAB. (s.f.). Teclado Matricial de Membrana 44 16 dgitos. Obtenido de
http://electronilab.co/tienda/teclado-matricial-de-membrana-4x4-16-digitos/
Surez Marcelo, J. I. (06 de 10 de 2015). Cmo gobernar un display LCD alfanumrico basado
en el controlador HD44780. Obtenido de
http://eii.unex.es/profesores/jisuarez/descargas/ip/lcd_alfa.pdf
Terven Salinas, J. R. (2012). Interrupciones. Obtenido de
http://www.tervenet.com/itmaz/micros2012/05%20Teclado%20Matricial.pdf
// CONFIG6L
#pragma config WRT0 = OFF
// Write Protection bit (Block
0 (000800-001FFFh) is not write-protected)
#pragma config WRT1 = OFF
// Write Protection bit (Block
1 (002000-003FFFh) is not write-protected)
#pragma config WRT2 = OFF
// Write Protection bit (Block
2 (004000-005FFFh) is not write-protected)
#pragma config WRT3 = OFF
// Write Protection bit (Block
3 (006000-007FFFh) is not write-protected)
salida='2';
__delay_ms(150);
while(PORTBbits.RB5==1){}
t=0;
}
if(PORTBbits.RB6==1){
salida='3';
__delay_ms(150);
while(PORTBbits.RB6==1){}
t=0;
}
LATB=0b00000010;
if(PORTBbits.RB4==1){
salida='4';
__delay_ms(150);
while(PORTBbits.RB4==1){}
t=0;
}
if(PORTBbits.RB5==1){
salida='5';
__delay_ms(150);
while(PORTBbits.RB5==1){}
t=0;
}
if(PORTBbits.RB6==1){
salida='6';
__delay_ms(150);
while(PORTBbits.RB6==1){}
t=0;
}
LATB=0b00000100;
if(PORTBbits.RB4==1){
salida='7';
__delay_ms(150);
while(PORTBbits.RB4==1){}
t=0;
}
if(PORTBbits.RB5==1){
salida='8';
__delay_ms(150);
while(PORTBbits.RB5==1){}
t=0;
}
if(PORTBbits.RB6==1){
salida='9';
__delay_ms(150);
while(PORTBbits.RB6==1){}
t=0;
}
LATB=0b00001000;
if(PORTBbits.RB4==1){
salida='*';
__delay_ms(150);
while(PORTBbits.RB4==1){}
t=0;
}
if(PORTBbits.RB5==1){
salida='0';
__delay_ms(150);
while(PORTBbits.RB4==1){}
t=0;
}
if(PORTBbits.RB6==1){
salida='*';
__delay_ms(150);
while(PORTBbits.RB4==1){}
t=0;
}
// CONFIG6H
#pragma config WRTC = OFF
// Configuration Register
Write Protection bit (Configuration registers (3000003000FFh) are not write-protected)
#pragma config WRTB = OFF
// Boot Block Write
Protection bit (Boot block (000000-0007FFh) is not writeprotected)
#pragma config WRTD = OFF
// Data EEPROM Write
Protection bit (Data EEPROM is not write-protected)
// CONFIG7L
#pragma config EBTR0 = OFF
// Table Read Protection bit
(Block 0 (000800-001FFFh) is not protected from table reads
executed in other blocks)
#pragma config EBTR1 = OFF
// Table Read Protection bit
(Block 1 (002000-003FFFh) is not protected from table reads
executed in other blocks)
#pragma config EBTR2 = OFF
// Table Read Protection bit
(Block 2 (004000-005FFFh) is not protected from table reads
executed in other blocks)
#pragma config EBTR3 = OFF
// Table Read Protection bit
(Block 3 (006000-007FFFh) is not protected from table reads
executed in other blocks)
// CONFIG7H
#pragma config EBTRB = OFF
// Boot Block Table Read
Protection bit (Boot block (000000-0007FFh) is not protected
from table reads executed in other blocks)
#define _XTAL_FREQ 20000000
#define RS PORTDbits.RD2
#define EN PORTDbits.RD3
#define D4 PORTDbits.RD4
#define D5 PORTDbits.RD5
#define D6 PORTDbits.RD6
#define D7 PORTDbits.RD7
#define led LATAbits.LATA4
#define buzzer LATAbits.LATA5
int
SALDO=200,SALDOP=0,VALOR=0,cc=0,ic,t,ec=0,ec2=0,s1,s2;
; //declaracion de variables
int
CLAVE_INTRODUCIDA[4]={'1','2','3','4'};
//clave
generica
int CLAVE_VERIFICAR[4]={0,0,0,0}; //clave a comparar con
la correcta
char salida=0,o,u,d,c,u1,d1,c1;
void TecladoPol(){ //funcion teclado 3x4
salida=0; //variable que almacena el valor de la tecla pulsada
t=1;PORTB=0;LATB=0;
while(t==1){
LATB=0b00000001;
if(PORTBbits.RB4==1){
salida='1';
__delay_ms(150);
while(PORTBbits.RB4==1){}
t=0;
}
if(PORTBbits.RB5==1){
}
void SolicitarClave(void){
Lcd_Clear();
Lcd_Set_Cursor(1, 1);
Lcd_Write_String("Digite clave");
TecladoPol();
CLAVE_VERIFICAR[0]=salida;
Lcd_Set_Cursor(2, 1);
Lcd_Write_Char('*');
TecladoPol();
CLAVE_VERIFICAR[1]=salida;
Lcd_Set_Cursor(2, 2);
Lcd_Write_Char('*');
TecladoPol();
CLAVE_VERIFICAR[2]=salida;
Lcd_Set_Cursor(2, 3);
Lcd_Write_Char('*');
TecladoPol();
CLAVE_VERIFICAR[3]=salida;
Lcd_Set_Cursor(2, 4);
Lcd_Write_Char('*');
__delay_ms(100);
Lcd_Clear();
if(CLAVE_VERIFICAR[0]==CLAVE_INTRODUCIDA[0]
&& CLAVE_VERIFICAR[1]==CLAVE_INTRODUCIDA[1]
&& CLAVE_VERIFICAR[2]==CLAVE_INTRODUCIDA[2]
&& CLAVE_VERIFICAR[3]==CLAVE_INTRODUCIDA[3]){
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Correcto");
__delay_ms(150);
__delay_ms(100);
cc=1; //variable que habilita el menu (clave correcta)
}else{
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Incorrecto");
__delay_ms(150);
__delay_ms(100);
cc=0;
ic++; //numero de intentos de introduccion de clave
if(ic==3){ //tercer intento incorrecto
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Bloqueo");
buzzer=1;
while(1){} //para desbloquearlo es necesario quitarle la
fuente de poder
}
}
return;
}
void Retirar () {
Lcd_Clear();
Lcd_Set_Cursor(1, 1);
Lcd_Write_String("Ingrese saldo a");
Lcd_Set_Cursor(2, 1);
Lcd_Write_String("retirar:");
__delay_ms(150);
__delay_ms(100);
Lcd_Clear();
Lcd_Set_Cursor(1, 1);
Lcd_Write_String("1(1) 2(2) "); //opciones de retiro
de $ 1,2,5 o 10
Lcd_Set_Cursor(2, 1);
Lcd_Write_String("5(3) 10(4)");
TecladoPol();
if(salida=='1'){VALOR=1;}
if(salida=='2'){VALOR=2;}
if(salida=='3'){VALOR=5;}
if(salida=='4'){VALOR=10;}
SALDOP = SALDO - VALOR; //saldo para la verificacion
(saldo de prueba)
if(SALDOP<0){ //verificacion de saldo suficiente
Lcd_Clear();
Lcd_Set_Cursor(1, 1);
Lcd_Write_String("Insuficiente");
__delay_ms(150);
__delay_ms(100);
}else{
SALDO=SALDOP; //realizacion del retiro
Lcd_Clear();
Lcd_Set_Cursor(1, 1);
Lcd_Write_String("Exito");
__delay_ms(150);
__delay_ms(100);
}
return;
}
void ConsultarSaldo() {
u=SALDO%10;
u1=conversion(u);
s1=SALDO/10;
d=s1%10;
d1=conversion(d);
s2=s1/10;
c=s2%10;
c1=conversion(c); //conversion a ascii
if(c==0){c1=' ';}
if(c==0 && d==0){d1=' ';}
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Saldo: ");
Lcd_Set_Cursor(1,8);
Lcd_Write_Char(c1);
Lcd_Set_Cursor(1,9);
Lcd_Write_Char(d1);
Lcd_Set_Cursor(1,10);
Lcd_Write_Char(u1);
__delay_ms(150);
__delay_ms(100);
__delay_ms(150);
__delay_ms(100);
return;
}
void CambiarClave (void) {
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Digite Nueva");
Lcd_Set_Cursor(2,1);
Lcd_Write_String("Clave ");
Lcd_Set_Cursor(2,6);
__delay_ms(150);
__delay_ms(100);
TecladoPol();
CLAVE_INTRODUCIDA[0]=salida;
Lcd_Set_Cursor(2, 8);
Lcd_Write_Char('*');
TecladoPol();
CLAVE_INTRODUCIDA[1]=salida;
Lcd_Set_Cursor(2, 9);
Lcd_Write_Char('*');
TecladoPol();
CLAVE_INTRODUCIDA[2]=salida;
Lcd_Set_Cursor(2, 10);
Lcd_Write_Char('*');
TecladoPol();
CLAVE_INTRODUCIDA[3]=salida;
Lcd_Set_Cursor(2, 11);
Lcd_Write_Char('*');
ec=1; //enable de la clave para la proxima solicitacion de
clave
EEPROM_WRITE(0xE0, CLAVE_INTRODUCIDA[0]);
EEPROM_WRITE(0xE1, CLAVE_INTRODUCIDA[1]);
EEPROM_WRITE(0xE2, CLAVE_INTRODUCIDA[2]);
EEPROM_WRITE(0xE3, CLAVE_INTRODUCIDA[3]);
EEPROM_WRITE(0xE4, ec);
__delay_ms(150);
__delay_ms(100);
Lcd_Clear();
Lcd_Set_Cursor(1, 1);
Lcd_Write_String("Exito");
__delay_ms(150);
__delay_ms(100);
return;
}