#include "LCD1602.h”
#include "TIME0.h"
#include "Key_scan.h"
#include<stdlib.h>//数学运算的头文件
uchar cabinet_1=0; //一号柜子空/满的标志位
uchar cabinet_2=0; //二号柜子空/满的标志位
uchar cabinet_3=0; //三号柜子空/满的标志位
uchar cabinet_4=0; //四号柜子空/满的标志位
uchar FULL_flag=1; //柜子全部是空标志
uint Cipher_1=0; //一号柜子密码缓存
uint Cipher_2=0; //二号柜子密码缓存
uint Cipher_3=0; //三号柜子密码缓存
uint Cipher_4=0; //四号柜子密码缓存
#define default_1 1111 //一号柜子的默认密码1111
#define default_2 2222 //二号柜子的默认密码2222
#define default_3 3333 //三号柜子的默认密码3333
#define default_4 4444 //四号柜子的默认密码4444
uchar lcd_The_first_line[16]={"1-NULL 2-NULL"};
uchar lcd_The_second_line[16]={"3-NULL 4-NULL"};
{
if(cabinet_1){lcd_The_first_line[2]='F';}else{lcd_The_first_line[2]='N';}
if(cabinet_2){lcd_The_first_line[12]='F';}else{lcd_The_first_line[12]='N';}
if(cabinet_3){lcd_The_second_line[2]='F';}else{lcd_The_second_line[2]='N';}
if(cabinet_4){lcd_The_second_line[12]='F';}else{lcd_The_second_line[12]='N';}
WriteChar(1,0,16,lcd_The_first_line);
WriteChar(2,0,16,lcd_The_second_line);
}void System_init(void)
{
LED_ALL_ON();
Delay_ms(500);
LED_ALL_OFF();
Delay_ms(500);
LED_ALL_ON();
Delay_ms(500);
LED_ALL_OFF();
Delay_ms(500);
LED_ALL_ON();
Delay_ms(500);
LED_ALL_OFF();
Delay_ms(500);
BUZZER_ON();
LED_ALL_ON();
Delay_ms(1000);
BUZZER_OFF();
LED_ALL_OFF();
Delay_ms(1000);
}
//存东西函数
uint Random_Cipher(uchar CH)
{
uint Cipher_val;
ucharCipher_all[16]={"Cipher: CH:"};
if(CH==1)Cipher_all[15]='1';
elseif(CH==2)Cipher_all[15]='2';
elseif(CH==3)Cipher_all[15]='3';
elseif(CH==4)Cipher_all[15]='4';
srand(count);//设置随机数种子
Cipher_val=rand()%1000; //调用随机函数,产生一个1000以内的函数,用作随机密码。
Cipher_all[7]=Cipher_val/1000+0x30;
Cipher_all[8]=Cipher_val/100%10+0x30;
Cipher_all[9]=Cipher_val/10%10+0x30;
Cipher_all[10]=Cipher_val%10+0x30;
WriteChar(1,0,16,"Pleaseremember ");
WriteChar(2,0,16,Cipher_all);
return Cipher_val;
}
void Storage(void)
{
if(!cabinet_1){cabinet_1=1;FULL_flag=0;LED1=1;Cipher_1=Random_Cipher(1);}//第一个柜子是空的
else if(!cabinet_2){cabinet_2=1;FULL_flag=0;LED2=1;Cipher_2=Random_Cipher(2);} //第二个柜子是空的
elseif(!cabinet_3){cabinet_3=1;FULL_flag=0;LED3=1;Cipher_3=Random_Cipher(3);} //第三个柜子是空的
elseif(!cabinet_4){cabinet_4=1;FULL_flag=0;LED4=1;Cipher_4=Random_Cipher(4);} //第四个柜子是空的
else
{
//FULL_flag=1;
WriteChar(1,0,16,"Sorry!Full load");
WriteChar(2,0,16,"Thankyou.... ");
BUZZER_ON();Delay_ms(2000);BUZZER_OFF();//蜂鸣器提醒
}
while((uchar)Key_scan()!=11);{LCD_DISP_ALL();/*LED_ALL_OFF;*/}
void Extract(void)
{
uchar i=0,j=0;
uint Cipher_val;
ucharCipher_all[16]={"Cipher: "};
if(FULL_flag)
{
WriteChar(1,0,16,"Sorry!No-load ");
WriteChar(2,0,16,"Thankyou.... ");
BUZZER_ON();Delay_ms(2000);BUZZER_OFF();
Delay_ms(4000);
LCD_DISP_ALL();
}
else
{
WriteChar(1,0,16,"Pleaseinput ");
WriteChar(2,0,16,Cipher_all);
while(1)
{
i=Key_scan();//扫描函数0-9确认
if(i!=11&&i!=12&&i!=13&&j<4)//4位密码数
{
Cipher_all[8+j++]=(i+0x30);
WriteChar(2,0,16,Cipher_all);
}
if(i==11)//确认键,比较密码是否正确
{
Cipher_val=(Cipher_all[8]-0x30)*1000+(Cipher_all[9]-0x30)*100+(Cipher_all[10]-0x30)*10+(Cipher_all[11]-0x30);
if(Cipher_val==Cipher_1||Cipher_val==default_1){cabinet_1=0;LED1=0;}
if(Cipher_val==Cipher_2||Cipher_val==default_2){cabinet_2=0;LED2=0;}
if(Cipher_val==Cipher_3||Cipher_val==default_3){cabinet_3=0;LED3=0;} if(Cipher_val==Cipher_4||Cipher_val==default_4){cabinet_4=0;LED4=0;}
if(cabinet_1==0&&cabinet_2==0&&cabinet_3==0&&cabinet_4==0)FULL_flag=1;
if(Cipher_val==Cipher_1||Cipher_val==Cipher_2||Cipher_val==Cipher_3||Cipher_val==Cipher_4||Cipher_val==default_1||Cipher_val==default_2||Cipher_val==default_3||Cipher_val==default_4)
{
WriteChar(1,0,16,"CipherCorrect ! ");
WriteChar(2,0,16,"Goodluck.... ");
BUZZER_ON();Delay_ms(2000);BUZZER_OFF();
}
else
{
WriteChar(1,0,16,"CipherError! ");
WriteChar(2,0,16,"Reenter!!! ");
BUZZER_ON();Delay_ms(6000);BUZZER_OFF();
}
Delay_ms(4000);
LCD_DISP_ALL();
/*LED_ALL_OFF();*/
break;
}
}
}
}
void main(void)
{
System_init();
Time0_Init();
LCD_Init();
LCD_DISP_ALL();
while(1)
{
if(!Save){Delay_ms(10);while(!Save);Storage();}//存键
if(!Take){Delay_ms(10);while(!Take);Extract();}//取键
}
}
比较难的部分都写好注解了