|
主程序:
#include<reg52.h>
#include<intrins.h>
#include"LCD1602.h"
#include"key.h"
#include"delay.h"
#include"eeprom.h"
sbit P3_6=P3^6;
sbit P3_7=P3^7;
void int0(void);
unsigned char password[6]/*={0x01,0x01,0x01,0x01,0x01,0x01}*/;
unsigned char password1[6];
unsigned char code aa[]="Password ";
unsigned char code gg[]="New";
unsigned char code bb[]="ERROR ";
unsigned char code cc[]="OK ";
unsigned char code dd[]=" ";
unsigned char code ee[]="Next ";
unsigned char code ff[]="success ";
unsigned char keydata;
void main()
{
unsigned char i,j,k,l,m,n,o,a1;
unsigned int aaaa=65536;
init();//LCD初始化
int0();
P3_6=0;
P3_7=0;
P1=0x0f;
LCD_Write_String(0,0,aa);
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
while(1)
{
start: LCD_Write_String(0,0,aa);
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
while(1)
{
if((0<keydata)&&(4>keydata)||(4<keydata)&&(8>keydata)||(8<keydata)&&(12>keydata)||keydata==14)
//在0-9之间的数字通过
{
password[i]=keydata;//键盘值进行保存
keydata=0; //把键盘值置其它值,不被其它利用,以一样
i++;
write_data('*'); //在LCD上显示*这字符代表输入了一个密码
if(i==6) //这里限制了六位密码
{
i=0;
goto panduan;
}
}
if(keydata==13) //重新输入改密
{
m=0;
n=0;
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
}
if(keydata==33) //确定进入密码比较
{
keydata=0;
panduan: i=0;
for(j=0;j<6;j++)
{
l+=password[j];
k+=Random_Read(j);
}
if(l!=k) //密码不同进行处理
{
l=0;
k=0;
LCD_Write_String(0,0,bb);
DelayMs(1000);
a1+=1;
if(a1==2)
{
while(1)
{
// aaaa--;
P3_7=1;
P3_6=0;
// if(aaaa==0)
{
// P3_7=0;
a1=0;
//aaaa=65536;
//goto start;
}
}
}//两次错误发出报警
goto start; //第二次输入密码
}
if(l==k) //密码对了,进入运行状态,这里绿灯代表该状态
{
l=0;
k=0;
a1=0;
P3_6=1;
P3_7=0;
LCD_Write_String(0,0,cc);
LCD_Write_String(1,1,dd);
if(o==1)
{
o=0;
LCD_Write_String(0,0,gg);
LCD_Write_String(4,0,aa);
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
goto text2;
}
goto yingxing; //跳到下面函数中,yingxing里
}
}
}
yingxing:while(1)
{
if(keydata==4) //锁定功能
{
P3_6=0;
goto start;
}
if(keydata==15) //修改密码
{
o++;
if(o==1)
goto start;
text2: keydata=0;
while(1)
{
if((0<keydata)&&(4>keydata)||(4<keydata)&&(8>keydata)||(8<keydata)&&(12>keydata)||keydata==14)
//上面表达式0-9之间的数字通过
{
password[m]=keydata; //读取键盘值
keydata=0;
m++;
write_data('*');
if(m==6) //到密码输入到六位的时候进行判断是否再输入,或者判断前后两次密码是否一致
{
m=0;
n++;
if(n==2)
goto panduan1; //输入第二次的时候进行前后两次密码进判断
for(i=0;i<6;i++) //储存前一次密码
{
password1[i]=password[i];
}
LCD_Write_String(1,1,dd);
LCD_Write_String(0,0,ee);
DelayMs(1000);
LCD_Write_String(0,0,aa);
write_com(0xc0+1);
}
}
if(keydata==13) //重新输入改密
{
text: m=0;
n=0;
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
}
if(keydata==16) //退出不改密码
{
out: m=0;
n=0;
o=0;
LCD_Write_String(0,0,cc);
LCD_Write_String(1,1,dd);
goto yingxing;
}
if(keydata==33)
{
keydata=0;
panduan1: for(j=0;j<6;j++)//第一次与第二次密码比较
{
l+=password[j];
k+=password1[j];
}
if(l!=k) //第一次与第二次密码输入错误
{
l=0;
k=0;
LCD_Write_String(0,0,bb);
DelayMs(1000);
LCD_Write_String(0,0,aa);
goto text;
}
else
{
for(i=0;i<6;i++)
{
Write_IIC(i,password[i]);
}
LCD_Write_String(0,0,ff);
DelayMs(1000);
goto out;
}
}
}
}
}
}
}
void int0(void)
{
EA=1;
EX0=1;
IT0=1;
}
void wb0(void) interrupt 0
{
keydata=key_scan();
}
|
|