内容发布更新时间 : 2024/11/20 19:34:02星期一 下面是文章的全部内容请认真阅读。
if(i==6) {
CorrectCont++;
if(CorrectCont==1) //正确输入计数,当只有一次正确输入时,开锁,
{
write_1602com(er); for(j=0;j<16;j++) {
write_1602dat(LockOpen[j]); }
lock_led=1; //开锁
pass=1; //置正确标志位 TR0=1; //开启定时 open_led=0; //开锁指示灯亮 for(j=0;j<6;j++) //将输入清除 {
InputData[i]=0; } }
else //当两次正确输入时,开启重置密码功能 {
write_1602com(er); for(j=0;j<16;j++) {
write_1602dat(SetNew[j]); }
ReInputEn=1; //允许重置密码输入 CorrectCont=0; //正确计数器清零 } }
else //当第一次使用或忘记密码时可以用131420对其密码初始化 {
if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0)) {
WrToROM(initpassword,0,6); //强制将初始密码写入24C02存储
write_1602com(er); //显示初始化密码 for(j=0;j<16;j++)
26
{
write_1602dat(initword[j]); }
Delay400Ms(); N=0; } else {
write_1602com(er); for(j=0;j<16;j++) {
write_1602dat(Error[j]); }
pass=0; } } }
else //当已经开启重置密码功能时,而按下开锁键, {
write_1602com(er); for(j=0;j<16;j++) {
write_1602dat(Er_try[j]); } } }
else {
//DisplayListChar(0,1,Error); write_1602com(er); for(j=0;j<16;j++) {
write_1602dat(Error[j]); }
pass=0; }
N=0; //将输入数据计数器清零,为下一次输入作准备
operation=1; }
//==============================主函数===============================
27
void main(void) {
uchar KEY,NUM; uchar i,j; P1=0xFF;
lock_led=0; TMOD=0x11; TL0=0xB0; TH0=0x3C; EA=1; ET0=1; TR0=0;
Delay400Ms(); //启动等待,等LCM讲入工作状态 lcd_init(); //LCD初始化
write_1602com(yi);//日历显示固定符号从第一行第0个位置之后开始显示 for(i=0;i<20;i++) {
write_1602dat(name[i]);//向液晶屏写日历显示的固定符号部分 }
write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示
for(i=0;i<16;i++) {
write_1602dat(start_line[i]);//写显示时间固定符号,两个冒号 }
write_1602com(er+9); //设置光标位置 write_1602com(0x0f); //设置光标为闪烁 Delay5Ms(); //延时片刻(可不要)
N=0; //初始化数据输入位数 while(1) {
KEY=keynum(); if(KEY!=0) {
NUM=coding(KEY); {
switch(NUM) {
case ('A'): ; break; case ('B'): ; break; case ('C'): ; break;
case ('D'): ResetPassword(); break; //重新设置密码
28
case ('*'): Cancel(); break; //取消当前输入
case ('#'): Ensure(); break; //确认键,
default:
{ write_1602com(er); for(i=0;i<16;i++) {
write_1602dat(Input[i]); }
operation=0;
if(N<6) //当输入的密码少于6位时,接受输入并保存,大于6位时则无效。 {
InputData[N]=NUM; for(j=0;j<=N;j++) {
write_1602com(er+6+j);
write_1602dat(InputData[j]);//'*'); } N++; }
else //输入数据位数大于6后,忽略输入 {
N=6; break; } } } } } } }
//******************中断服务函数**************************** void time0_int(void) interrupt 1 {
TL0=0xB0; TH0=0x3C; countt0++;
if(countt0==20) {
29
countt0=0; second++; if(pass==1) {
if(second==1) {
open_led=1; //关指示灯 TR0=0; //关定时器
TL0=0xB0; TH0=0x3C; second=0; } } else {
if(second==3) {
TR0=0; second=0;
s3_keydown=0; TL0=0xB0; TH0=0x3C; } else
TR0=1; }
} }
30