#include<reg51.h> #include<1602.h> #include<key.h> #include<24c01.h> #define uchar unsigned char #define uint unsigned int sbit LED1=P1^5; sbit LED2=P1^6; sbit INIT=P2^2; uchar idata key[8]={0,0,0,0,0,0,0,0}; //初始化 uchar idata iic[8]={0,1,2,3,4,5,6,7}; void Delay5ms(uint t); //************************************************** void press(uchar *s) { uchar dat; P3=0xf0; //保存第一位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_initial(); LCD_set_position(0x40); LCD_printc('*'); //輸入密碼顯示* LED1=0; Delay5ms(250); LED1=1; s++; } //************************************************** P3=0xf0; //保存第二位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_printc('*'); LED1=0; Delay5ms(250); LED1=1; s++; } //************************************************** P3=0xf0; //保存第三位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_printc('*'); LED1=0; Delay5ms(250); LED1=1; s++; } //************************************************** P3=0xf0; //保存第四位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_printc('*'); LED1=0; Delay5ms(250); LED1=1; s++; } //************************************************** P3=0xf0; //保存第五位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_printc('*'); LED1=0; Delay5ms(250); LED1=1; s++; } //************************************************** P3=0xf0; //保存第六位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_printc('*'); LED1=0; Delay5ms(250); LED1=1; s++; } //********************************************** P3=0xf0; //保存第七位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_printc('*'); LED1=0; Delay5ms(250); LED1=1; s++; } //************************************************ P3=0xf0; //保存第八位密碼 while(P3==0xf0); dat=key_scan(); if((dat!=0x0a)&&(dat!=0x0b)) { *s=dat; LCD_printc('*'); LED1=0; Delay5ms(250); LED1=1; } //************************************************** do{ P3=0xf0; //鍵入Enter鍵盤繼續執行下面語句,否則等待 while(P3==0xf0); dat=key_scan(); }while(dat!=0x0b); } //***************************************************** void Delay5ms(uint t) //參數25延時5ms { uint i,j,k; for(k=t;k>0;k--) for(i=25;i>0;i--) for(j=4;j>0;j--) ; }
void main() { uchar dat; uchar i=0,j=0,k; uchar x=0; LED1=1; LED2=1; SOUND=0; INIT=1; Designer(); //顯示標題 for(i=0;i<200;i++){Delay5ms(25);} Pass_init(); for(i=0;i<250;i++) { if(INIT==0) Delay5ms(25); if(INIT==0) { do{ x=SendB(iic,0x50,8); }while(x!=1) ; x=0; break; } Delay5ms(25); } do{ x=ReadB(iic,0x50,8); //首先從IIC器件中讀出密碼以供下面輸入密碼 }while(x!=1) ; x=0; //**********************************若密碼不正確,循環執行do{}while()******************************************** do{ LED1=1; System(); //顯示:"請輸入密碼"字幕 press(key);
if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])&&(key[6]==iic[6])&&(key[7]==iic[7])) //密碼比較,若密碼正確責進入系統,若密碼不正確則顯示密碼錯誤,重新輸入密碼 { True(); LED1=0; LED2=0; for(i=0;i<30;i++) { Sound_QQ(200,60); Delay5ms(100); } LED1=1;LED2=1; do { P3=0xf0; //鍵入1或2繼續執行下面語句,否則等待 while(P3==0xf0); dat=key_scan(); } while(dat!=1&&dat!=2); if(dat==1) //開鎖 { LED1=0; Unlock(); for(i=0;i<200;i++){Delay5ms(25);} } if(dat==2) //修改密碼 { do{ Modify(); press(key); Again(); press(iic); if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])&&(key[6]==iic[6])&&(key[7]==iic[7])) { Succeed(); //修改密碼成功 for(i=0;i<100;i++){Delay5ms(25);} Delay5ms(25); x=SendB(iic,0x50,8); Delay5ms(25); x=ReadB(iic,0x50,8);break; } else //修改密碼不成功,重新修改 { Repeat(); for(i=0;i<100;i++){Delay5ms(25);} } }while(1); } } else //密碼不正確,重新輸入密碼 { j++; if(j==3) { for(i=0;i<60;i++) { Sound_QQ(250,40); for(k=0;k<3;k++) { LED1=~LED1; LED2=~LED2; Delay5ms(25); } } j=0; } Error(); for(i=0;i<50;i++) { Sound_QQ(250,40); LED2=~LED2; Delay5ms(25); } for(i=0;i<100;i++){Delay5ms(35);} } }while(1); }
[此貼子已經被作者于2012-4-10 17:06:43編輯過]
|