出现这种情况一般是什么问题,各位大神,程序如下:
#include <reg52.h> #include <intrins.h> #include"24C0x.h" #include"LCD12864.h" #define uchar unsigned char #define uint unsigned int #define buffer1ID 0x01 #define buffer2ID 0x02 #define queren 0x88 #define tuichu 0x18 #define shanchu 0x82 #define User 1 void fan(); sbit B0=B^0; sbit B7=B^7; sbit k2=P3^7; sbit jidianqi=P3^6; sbit BUZZ=P2^0; bit succeed_mm=0; bit count_down=0; bit alarm=0; uchar dz[4]; uchar time[4]; uchar mima[6]; uchar mima_kai[6]; uchar mimag[6]; uchar mimaID[6]={1,2,3,4,5,6}; uchar out_time=0; uchar Address1=20,tempx=20; uchar Address2=20; uchar data K; uchar data Key; uint PageID; uchar data querenma=11; uchar sum[2]; int summaf,summas; Uchar xdata UserPassword[2][7]={0};//密码0是管理员密码,1是开锁密码 uchar xdata DSY_BUFFER[16] ={0};//缓存 void Red_Init(void); unsigned char check(void); unsigned char redchange(unsigned char rednum); void delayms(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar Chack(uchar User_Number) { uchar flag, i,temp[6],Address; Address=User_Number*6; for(i=0;i<6;i++) { temp=x24c02_read(Address); delayms(10); Address++; } for(i=0;i<6;i++) { if(temp==UserPassword[User_Number]) flag=1; else { flag=0; break; } } return flag; } void delay(uint tt) { uchar i; while(tt--) { for(i=0;i<125;i++); } } { SCON= 0x50;//串口方式1//REN=1,允许接受 PCON=0x00;//SMOD=0 TMOD= 0x21;//定时器1定时方式2 TH1= 0xFD;//11.0592MHz模块默认波特率为9600bps TL1= 0xFD; TR1= 1;//启动定时器 TH0=0x4b; TL0=0xff; ET0=1; TR0=1; EA=1; } unsigned char Keycan(void)//按键扫描程序 { unsigned char rcode, ccode; P1 = 0xF0;//发送0行扫描码,列线输入 if((P1&0xF0) != 0xF0)//若有键按下 { delay(1);//延时去抖动 if((P1&0xF0) != 0xF0) { rcode = 0xFE;//逐行扫描初值 while((rcode&0x10) != 0) { P1 = rcode;//输出行扫描码 if((P1&0xF0) != 0xF0)//本行有键按下 { ccode = (P1&0xF0)|0x0F; BUZZ=0; delayms(20); BUZZ=1; //do{;} while((P1&0xF0) != 0xF0); //等待键释放 return ((~rcode) + (~ccode)); //返回键编码 } else rcode = (rcode<<1)|0x01; //行扫描码左移一位 } } } return 0; //无键按下,返回值为零 } void KeyDeal(unsigned char Key) { //unsigned char n; if(Key!=0) { switch(Key) { case 0x11: K=1; break; case 0x21: K=2; break; case 0x41: K=3; break; case 0x81: break; case 0x12: K=4; break; case 0x22: K=5; break; case 0x42: K=6; break; case 0x82: K=34;break;删除 case 0x14: K=7; break; case 0x24: K=8; break; case 0x44: K=9; break; case 0x84: break;输入开锁密码 case 0x18: K=35; break;退出 case 0x28: K=0; break; case 0x48: K=11; break; case 0x88: break; default: break; } } } void SFG_GetEcho()//握手 { uchar i; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X03; while(TI==0); TI=0; SBUF=0X53; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; summaf=0x57; SBUF=summaf; while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; } void SFG_getimage()//录入指纹图像 { uchar i; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X03; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; summaf=0x05; SBUF=summaf; while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; } void SFG_genchar(uchar bufferID) //生成特征并存于charbufferl//调用后单片机波特率发生变化 { uchar i; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X04; while(TI==0); TI=0; SBUF=0X02; while(TI==0); TI=0; SBUF=bufferID; while(TI==0); TI=0; summaf=0x07+bufferID; sum[0]=summaf; sum[1]=summaf>>8; SBUF=sum[1]; while(TI==0) TI=0; SBUF=sum[0]; while(TI==0) TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; } void SFG_fastsearch(uchar bufferID)//搜索指纹返回指纹ID { uchar i,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X08; while(TI==0); TI=0; SBUF=0X1b; while(TI==0); TI=0; SBUF=bufferID; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=180; while(TI==0); TI=0; summaf=9+0x1b+bufferID+180; sum[0]=summaf; sum[1]=summaf>>8; SBUF=sum[1]; while(TI==0); TI=0; SBUF=sum[0]; while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; ID1=SBUF; while(RI==0); RI=0; ID2=SBUF; //接收到的ID号 while(RI==0); RI=0; while(RI==0); RI=0; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; //PageID=ID1; PageID=(ID1<<8)+ID2; } Void SFG_enroll()//自动注册模板返回存储ID=录图像+合并生成模板+储存模板 { uchar i,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X03; while(TI==0); TI=0; SBUF=0X10; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; summaf=0x14; SBUF=summaf; //校验和 while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; ID1=SBUF; while(RI==0); RI=0; ID2=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; //PageID=ID1; PageID=(ID1<<8)+ID2; } void SFG_deletchar(uint pageID) //删除指纹 校验和在2字节的页码处应分高低字节相加 { uchar i,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X07; while(TI==0); TI=0; SBUF=0X0c; while(TI==0); TI=0; ID1=pageID;ID2=pageID>>8; SBUF=ID2; while(TI==0); TI=0; SBUF=ID1; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=1; while(TI==0); TI=0; summaf=0x15+ID1+ID2; sum[0]=summaf; sum[1]=summaf>>8; SBUF=sum[1]; while(TI==0); TI=0; SBUF=sum[0]; while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; } void SFG_identify() //自动验证指纹 录图像+生成特征+搜索 { uchar i,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X03; while(TI==0); TI=0; SBUF=0X11; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; summaf=0x15; SBUF=summaf; //校验和 while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; ID1=SBUF; while(RI==0); RI=0; ID2=SBUF; while(RI==0); RI=0; while(RI==0); RI=0; //得分 while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; //PageID=ID1; PageID=(ID1<<8)+ID2; } void shuazhiwen() { uchar IDs1,IDs2,IDs3; LcmClearTXT(); PutStr(1,1,"请按手指开锁"); SFG_identify(); count_down=1; while(querenma==2) { SFG_identify(); if(out_time>=10) { out_time=0; count_down=0; succeed_mm=0; goto out_fingerprint; } } if(querenma==0) { out_time=0; count_down=0; ERROR_TIME=0; BUZZ=1; alarm=0; LcmClearTXT(); PutStr(1,2,"门已打开"); IDs1=PageID/100; IDs2=PageID/10%10; IDs3=PageID%10; PutStr(2,1,"编号为:"); WriteCommand(0x8D);//指定第三行显示位置 WriteData(0x30+IDs1); WriteData(0x30+IDs2); WriteData(0x30+IDs3); jidianqi=0; delay(5000); jidianqi=1; succeed_mm=0; } else if(querenma==9) { LcmClearTXT(); ERROR_TIME++; if(ERROR_TIME>=3) { alarm=1; } PutStr(1,1,"没搜索到指纹"); PutStr(2,1,"请重新按手指"); out_time=0; count_down=0; } else { LcmClearTXT(); PutStr(1,1,"接受包出错"); out_time=0; count_down=0; } delay(2000); out_fingerprint: LcmClearTXT(); void addfinger() { uchar IDa1,IDa2,IDa3; LcmClearTXT(); PutStr(1,2,"请按手指"); SFG_getimage(); while(querenma!=0) SFG_getimage(); SFG_genchar(buffer1ID); UART_Init(); SFG_fastsearch(buffer1ID); while(querenma==1) SFG_fastsearch(buffer1ID); if(querenma==0) { LcmClearTXT(); PutStr(1,1,"指纹已存在"); PutStr(3,0,"按任意键继续"); while(Keycan()==0); } else if(querenma==9) { LcmClearTXT(); PutStr(1,1,"请再次按手指"); SFG_enroll(); while(querenma==2) SFG_enroll(); LcmClearTXT(); if(querenma==0) { IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10; PutStr(1,1,"指纹采集成功"); PutStr(2,1,"编号为:"); WriteCommand(0x8D); WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3); } else if(querenma!=0) { PutStr(1,1,"指纹采集失败"); PutStr(2,1,"请重新操作"); } PutStr(3,0,"按任意键继续"); while(Keycan()==0); } LcmClearTXT(); } Void deletfinger() { uchar i,j=0; LcmClearTXT(); PutStr(1,0,"输入删去的指纹号"); PutStr(3,0,"B退格 D确认"); for(i=0;i<5;i++)dz=0; Key=Keycan(); while(Key!=queren) { Key=Keycan(); KeyDeal(Key); if(K==35) goto out2; delay(30); //按键有抖动 if(Key==0)K=10; if((K>=0)&&(K<=9)) { dz[j]=K; if(j<3) { WriteCommand(0x88+j); //指定第三行显示位置 WriteData(0x30+dz[j]); } ++j; if(j==4) j=3; } //显示LCD12864并行显示 if(K==34) //按了删除键 { if(j==0) { WriteCommand(0x88);//指定第三行显示位置 WriteData(0x20); } else { --j; WriteCommand(0x88+j); //指定第三行显示位置 WriteData(0x20); } } } if(j>=2) PageID=dz[2]+dz[1]*10+dz[0]*100; if(j==1) PageID=dz[1]+dz[0]*10; if(j==0) PageID=dz[0]; SFG_deletchar(PageID); if(querenma==0) { LcmClearTXT(); PutStr(1,1,"删去指纹号成功"); } else { LcmClearTXT(); PutStr(1,2,"删去指纹号失败"); } PutStr(2,0,"按任意键继续"); while(Keycan()==0); out2: LcmClearTXT(); K=0; } void gaimima() { uchar i,j=0,mima1[6],mima2[6]; uchar k,temp; resum_modification: LcmClearTXT(); PutStr(1,1,"请输入新密码"); PutStr(3,0,"B退格 D确认"); for(i=0;i<6;i++)mima1=0; Key=Keycan(); while(Key!=queren) { Key=Keycan(); KeyDeal(Key); if(K==35) goto out3; delay(30); if(Key==0)K=10; if((K>=0)&&(K<=9)) { mima1[j]=K; if(j<6) { WriteCommand(0x89+j); //指定第三行显示 WriteData(0x0f); } ++j; if(j==7) j=6; }//显示LCD12864并行显示 if(K==34) //按了删除键 { if(j==0) { WriteCommand(0x89); //指定第三行显示 WriteData(0x20); } else { --j; WriteCommand(0x89+j); //指定第三行显示 WriteData(0x20); } } } LcmClearTXT(); LcmClearTXT(); j=0; PutStr(1,0,"请再次输入新密码"); PutStr(3,0,"B退格 D确认"); for(i=0;i<6;i++)mima2=0; Key=Keycan(); while(Key!=queren) { Key=Keycan(); KeyDeal(Key); delay(30); if(Key==0)K=10; if((K>=0)&&(K<=9)) { mima2[j]=K; if(j<6) { WriteCommand(0x89+j);//指定第三行显示 WriteData(0x0f); } ++j; if(j==7) j=6; }//显示LCD12864并行显示 if(K==34) //按了删除键 { if(j==0) { WriteCommand(0x89);//指定第三行显示 WriteData(0x20); } else { --j; WriteCommand(0x89+j);//指定第三行显示 WriteData(0x20); } } } LcmClearTXT(); if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5])) { for(i=0;i<6;i++) mimaID=mima1; for(i=0;i<6;i++)//密码限制在六位以内 { UserPassword[0]=mima1; } temp=(Member-1)*6; delayms(5); for(k=0;k<6;k++) { x24c02_write(temp,UserPassword[0][k]); delayms(10); temp++; } PutStr(0,1,"密码修改成功"); PutStr(3,0,"按任意键继续"); while(Keycan()==0); } else { j=0; PutStr(0,0,"密码修改失败"); PutStr(1,0,"两次输入的密码不"); PutStr(2,0,"一致,请重新操作"); PutStr(3,0,"按任意键继续"); while(Keycan()==0); goto resum_modification; } out3: LcmClearTXT(); K=0; } void gaimima_kaisuo() { uchar i,j=0,mima1[6],mima2[6]; uchar k,temp; resum_modification1: LcmClearTXT(); PutStr(1,1,"请输入新密码"); PutStr(3,0,"B退格 D确认"); for(i=0;i<6;i++)mima1=0; Key=Keycan(); while(Key!=queren) { Key=Keycan(); KeyDeal(Key); if(K==35) goto out4; delay(30); if(Key==0)K=10; if((K>=0)&&(K<=9)) { mima1[j]=K; if(j<6) { WriteCommand(0x89+j); //指定第三行显示 WriteData(0x0f); } ++j; if(j==7) j=6; }//显示LCD12864并行显示 if(K==34)//按了删除键 { if(j==0) { WriteCommand(0x89); //指定第三行显示 WriteData(0x20); } else { --j; WriteCommand(0x89+j); //指定第三行显示 WriteData(0x20); } } } LcmClearTXT(); LcmClearTXT(); j=0; PutStr(1,0,"请再次输入新密码"); PutStr(3,0,"B退格 D确认"); for(i=0;i<6;i++)mima2=0; Key=Keycan(); while(Key!=queren) { Key=Keycan(); KeyDeal(Key); delay(30); if(Key==0)K=10; if((K>=0)&&(K<=9)) { mima2[j]=K; if(j<6) { WriteCommand(0x89+j);//指定第三行显示 WriteData(0x0f); } ++j; if(j==7) j=6; } //显示LCD并行显示 if(K==34) //按了删除键 { if(j==0) { WriteCommand(0x89);//指定第三行显示 WriteData(0x20); } else { --j; WriteCommand(0x89+j); //指定第三行显示 WriteData(0x20); } } } LcmClearTXT(); if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5])) { for(i=0;i<6;i++) mimaID=mima1; for(i=0;i<6;i++)/密码限制在6位以内 { UserPassword[1]=mima1; } temp=(Member-1)*6; delayms(5); for(k=0;k<6;k++) { x24c02_write(temp,UserPassword[1][k]); delayms(10); temp++; } PutStr(0,1,"密码修改成功"); PutStr(3,0,"按任意键继续"); while(Keycan()==0); } else { j=0; PutStr(0,0,"密码修改失败"); PutStr(1,0,"两次输入的密码不"); PutStr(2,0,"一致,请重新操作"); PutStr(3,0,"按任意键继续"); while(Keycan()==0); goto resum_modification1; } out4: LcmClearTXT(); K=0; } void zhu() { LcmClearTXT(); PutStr(1,2,"门已打开"); jidianqi=0; delay(5000); jidianqi=1; //PutStr(3,0,"按任意键继续"); //while(Keycan()==0); K=35; } void xiugaimima() { LcmClearTXT(); while(Keycan()!=tuichu) { PutStr(0,0,"按1:修改开锁密码"); PutStr(1,0,"按2:修改管理密码"); KeyDeal(Keycan()); if(K==35) goto out5; switch(K) { case 1: Member=2;gaimima_kaisuo();break; case 2: Member=1;gaimima();break; default: break; } } out5: LcmClearTXT(); K=0; } void guanliyuan() { uchar i,j=0,x=1; uchar Right_flag; resum_guanliyuan: LcmClearTXT(); PutStr(1,0,"请输入管理密码"); PutStr(3,0,"B退格 D确认"); for(i=0;i<6;i++)mima=0; Key=Keycan(); while(Key!=queren) { Key=Keycan(); if(Key==tuichu) goto out1; KeyDeal(Key); delay(30); if(Key==0)K=10; if((K>=0)&&(K<=9)) { mima[j]=K; if(j<6) { WriteCommand(0x89+j);//指定第三行显示 WriteData(0x0f); } ++j; if(j==7) j=6; } //显示LCD12864并行显示 if(K==34)//按了删除键 { if(j==0) { WriteCommand(0x89);//指定第三行显示 WriteData(0x20); } else { --j; WriteCommand(0x89+j); //指定第三行显示 WriteData(0x20); } } } LcmClearTXT(); for(i=0;i<6;i++) { UserPassword[0]=mima; } if(j==6){Right_flag=Chack(0); } if (Right_flag==1) { Right_flag=0; ERROR_TIME=0; alarm=0; BUZZ=1; while(Keycan()!=tuichu) { PutStr(0,0,"按1:增加指纹"); PutStr(1,0,"按2:删除指纹"); PutStr(2,0,"按3:修改密码"); PutStr(3,0,"按4:手动开锁"); KeyDeal(Keycan()); if(K==35) goto out1; switch(K) { case 1: addfinger();K=6;break; case 2:deletfinger();break; case 3: xiugaimima();break; case 4:zhu();break; default: break; } } } else { j=0; ERROR_TIME++; if(ERROR_TIME>=3) { alarm=1; } PutStr(1,2,密码错误"); PutStr(2,0,"请重新操作"); PutStr(3,0,"按任意键继续"); while(Keycan()==0); goto resum_guanliyuan; } Key=0; out1: LcmClearTXT(); } void kaisuomm() { uchar i,j=0,x=1; uchar Right_flag; resume: PutStr(1,0,"请输入开锁面膜"); PutStr(3,0,"B退格 D确认"); for(i=0;i<6;i++)mima_kai=0; Key=Keycan(); while(Key!=queren) { Key=Keycan(); if(Key==tuichu) goto out; KeyDeal(Key); delay(30); if(Key==0)K=10; if((K>=0)&&(K<=9)) { mima_kai[j]=K; if(j<6) { WriteCommand(0x89+j);//指定第三行显示 WriteData(0x0f); } ++j; if(j==7) j=6; } //显示LCD12864并行显示 if(K==34)//按了删除键 { if(j==0) { WriteCommand(0x89);//指定第三行显示 WriteData(0x20); } else { --j; WriteCommand(0x89+j);//指定第三行显示 WriteData(0x20); } } } for(i=0;i<6;i++) { UserPassword[1]=mima_kai; } if(j==6){Right_flag=Chack(1); } if (Right_flag==1) { Right_flag=0; succeed_mm=1; ERROR_TIME=0; BUZZ=1; alarm=0; //while(Keycan()!=tuichu) { PutStr(1,0,"请刷手指开锁"); PutStr(3,0); } } else { j=0; ERROR_TIME++; if(ERROR_TIME>=3) { alarm=1; } //PutStr(1,0); PutStr(1,0,"密码错误"); PutStr(2,0,"请重新输入"); PutStr(3,0,"按任意键继续"); while(Keycan()==0); LcmClearTXT(); goto resume; } Key=0; out: LcmClearTXT(); } void fan() { if(succeed_mm==0) { PutStr(0,2,"欢迎使用"); PutStr(1,1,"指纹识别系统"); PutStr(2,0," "); PutStr(3,0,"A管理 C开锁"); } Key=Keycan(); if(Key==0x84) { LcmClearTXT(); kaisuomm(); LcmClearTXT(); // K=0; } if(/*k2==1&&*/succeed_mm==1)//指纹刷机 { LcmClearTXT(); shuazhiwen(); LcmClearTXT(); } if(Key==0x81)//管理员操作 { LcmClearTXT(); guanliyuan(); LcmClearTXT(); } } void main() { //PSB=0; UART_Init();//串口初始化 x24c02_init();//24C02初始化 LcmInit();//LCD12864初始化 LcmClearTXT();//LCD12864清屏 while(1) { fan(); delay(100); } } void T0_time() interrupt 1 { uchar jishi; TH0=0x4b; TL0=0xff; jishi++; if(jishi%2==0&&alarm==1) { BUZZ=!BUZZ; } if(jishi>=20) { jishi=0; if(count_down==1) out_time++; } }
|