屏幕截圖 2025-02-28 151033.jpg (107.55 KB, 下載次數: 0)
下載附件
2025-2-28 19:27 上傳
屏幕截圖 2025-02-28 151126.jpg (578.87 KB, 下載次數: 0)
下載附件
2025-2-28 19:27 上傳
出現這種情況一般是什么問題,各位大神,程序如下:
#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++; } }
|