Cerradura electrónica inteligente
Objetivo general
- Programar un PIC de manera que este nos ayude a tener un control en finanzas junto con una bandeja donde depositemos el dinero. .
Objetivos Específicos
- Mediante el uso de "maquina de estados" elaboraremos 2 estados que serán de ejecución y programación.
- Utilizaremos un programa usando operaciones matemáticas básicas de suma y resta para variar los datos.
Justificación
-Esta investigación, tiene como objetivo ayudar a las personas, las cuales, muchas tiene problemas financieros, de orden con el dinero o para administrarlo.Este proyecto beneficiara no solo a la economía de las personas, sino que provocaría una mejor administración en el aspecto económico .
Diagrama de bloques
Simulación en Proteus
Código hecho en PIC C Compiler
#include <16f877a.h>
#USE DELAY(CLOCK=4M)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//#DEFINE USE_PORTD_LCD TRUE
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#DEFINE USE_PORTB_KBD //se esta usando el puerto B.*/
#INCLUDE<KBD4x4_1.c> //Incluir en el encabezado el driver para
#INCLUDE<lcd1.c>
#BYTE PORTC= 7
#rom 0x2100={'0','0','0','0','0','0'}
//#BYTE PORTD= 5
#BYTE PORTB= 6
//#DEFINE LED1 PORTD,0
//#DEFINE LED2 PORTD,1
#DEFINE LED3 PORTC,0
#DEFINE LED4 PORTC,1
#BYTE WPUB= 0X95 // declarar registro option
#BYTE OPTION_REG = 0X81
//INT CONT;
//BYTE J=16;
CHAR K;
int estado;
INT MIL,CEN,DEC,UNI,VAL;
long int cuenta=0100;
int sinal;
VOID TECLADO()
{
k=kbd_getc(); //Llamar la función del teclado y almacenar
//el valor digitado en una variable tipo
//carácter. Si no se oprime ninguna tecla el
//teclado retornara el carácter nulo.*/
WHILE(k=='\0') //si no se oprime ninguna tecla sigue llamando al teclado.
{
k=kbd_getc();
}
IF( (k!='\0'))
{
IF(K=='0')//Si K es igual a cero
VAL=0;//Val es igual a cero
IF(K=='1')
VAL=1;
IF(K=='2')
VAL=2;
IF(K=='3')
VAL=3;
IF(K=='4')
VAL=4;
IF(K=='5')
VAL=5;
IF(K=='6')
VAL=6;
IF(K=='7')
VAL=7;
IF(K=='8')
VAL=8;
IF(K=='9')
VAL=9;
}
}
VOID monto()
{
float cuenta=0000;
printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"Saldo Total");
lcd_gotoxy(1,2);
printf(lcd_putc,"S/");
lcd_gotoxy(3,2);
printf(lcd_putc,"%.2f",cuenta);
TECLADO();
TECLADO();
WHILE((k!='#'))
{
TECLADO();
}
}
VOID cambio_monto()
{
// int bandera=0;
long nuevo=0,m,c,d,u;
LCD_PUTC("\f");
LCD_GOTOXY(1,1);
LCD_PUTC("Cuenta Actual");
LCD_GOTOXY(1,2);
//pedir_clave(); //Llama la funcion de pedir la clave
//bandera=validar_clave(); //Compruebo si la clave actual es correcta
//if(bandera==1)
{
LCD_PUTC("\f");
LCD_GOTOXY(1,1);
LCD_PUTC("nuevo monto");
LCD_GOTOXY(1,2);
printf(lcd_putc,"S/");
lcd_gotoxy(3,2);
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc(k);
MIL=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc(k);
CEN=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc(k);
DEC=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc(k);
UNI=VAL;
}
TECLADO();
WHILE((k!='#'))
{
TECLADO();
}
m=MIL*1000; //Convierto miles a numero
c=CEN*10; //Convierto centemas a numero y lo sumo al anterior
c=c*10;
d=DEC*10; //Convierto decenas a numero y lo sumo al anterior
u=UNI; //Convierto unidades a numero y lo sumo al anterior
nuevo=m+c+d+u;
cuenta=nuevo;
WRITE_EEPROM(0,MIL); //Guarda en la eemprom posicion cero la nueva contraseña
WRITE_EEPROM(1,CEN);
WRITE_EEPROM(2,DEC);
WRITE_EEPROM(3,UNI);
WRITE_EEPROM(4,12); //Guardo un 12 en la posicion 1 de la EEPROM, para decir que tengo
//una contraseña guardada
}
}
VOID MAIN()
{
long m,c,d,u;
OPTION_REG = 0; //en el MAIN desactivas el registro OPTION
WPUB= 0B11111111;// y seleccionas los pullups q vas a utilizar
SET_TRIS_B(0);
SET_TRIS_C(0B00000000);
KBD_INIT(); //Inicializar el driver del teclado en el //programa
//ppal
LCD_INIT();
PORTC=0;
sinal=READ_EEPROM(4); //Averiguo si tengo una contraseña guardada o no
if(sinal!=12)
cuenta=0000;
else
{
m=READ_EEPROM(0); //Convierto miles a numero
c=READ_EEPROM(1); //Convierto centemas a numero y lo sumo al anterior
d=READ_EEPROM(2); //Convierto decenas a numero y lo sumo al anterior
u=READ_EEPROM(3); //Convierto unidades a numero y lo sumo al anterior
m=m*1000; //Convierto miles a numero
c=c*10; //Convierto centemas a numero y lo sumo al anterior
c=c*10;
d=d*10; //Convierto decenas a numero y lo sumo al anterior
cuenta=m+c+d+u;
}
WHILE(estado == 0)
{
lcd_putc("\f BIENVENIDO "); //
lcd_putc("\n caja de ahorros ");
delay_ms(1000);
lcd_putc("\fINGRESE SU CLAVE ");
DELAY_MS(1000);
TECLADO();
//LCD_PUTC("\f");
LCD_GOTOXY(1,2);
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
UNI=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
DEC=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
CEN=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
MIL=VAL;
}
TECLADO();
WHILE((k!='#'))
{
TECLADO();
}
IF((UNI==1)&&(DEC==2)&&(CEN==3)&&(MIL==4)) //Aquí se compara si
//los números digitados
//están correctos.*/
{
LCD_PUTC("\f"); //Se borra LCD
LCD_GOTOXY(1,1);//Se ubica en la posición 1,1
LCD_PUTC(" CLAVE CORRECTA ");
lcd_putc ("\nAdelante!! ");
output_high (PIN_D0);
DELAY_MS(2000);
output_low (PIN_D0);
estado = 1;
}
ELSE
{
LCD_PUTC("\f");
LCD_GOTOXY(1,2);
LCD_PUTC(" CLAVE INVALIDA ");
output_high (PIN_D1);
DELAY_MS(2000);
output_low (PIN_D1);
}
}
WHILE(estado == 1)
{
float cuenta;
//printf(lcd_putc,"%.2f",cuenta); //Muestra el dinero depositado
//delay_ms(500);
printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"Saldo Total");
lcd_gotoxy(1,2);
printf(lcd_putc,"S/");
lcd_gotoxy(3,2);
printf(lcd_putc,"%.2f",cuenta);
TECLADO();
if(k=='*')
{
lcd_putc("\f Ingrese nuevo "); //
lcd_putc("\n monto ");
delay_ms(1000);
estado=0;
while{
k=kbd_getc(); // leer la tecla presiono
if(k!=0){
dato[estado]=k;
lcd_gotoxy(i,2); // posicion i de la segunda linea
lcd_putc('*');
}
}
for()
clave[estado]=read_eeprom(i); //guarda la constraseña en el vector clave
{
lcd_putc("\fSaldo guardado! ");
lcd_putc("\nAdelante!! ");
delay_ms(2000);
lcd_putc("\f Monto total "); //
printf(lcd_putc,"%.2f",cuenta);
delay_ms(1000);
estado=0;
}
else
{
WHILE((k!='#'))
{
TECLADO();
//if(k=='*')
// cambio_monto();
}
}
}
}
Comentarios
Publicar un comentario