|
密碼鎖-無儲存(掉電密碼丟失,可根據(jù)自己需求加存儲如24c02)
單片機源程序如下:
- #include<reg52.h>
- #include"LCD.H"
- #define uchar unsigned char
- #define uint unsigned int
- uchar count=1,ci=0;//修改密碼時,只清屏一次,給wei=-1賦初值
- uchar mima[4];
- bit flag,flag1,flag2;//flag為按鍵14,15是否有效,flag1為修改密碼是否有效,flag2為初始化密碼是否有效
- sbit beep=P1^5;
- uchar table[4];//初始密碼
- uchar code table1[]="pass word!";
- uchar code table2[]="welcome!";
- uchar code table3[]="error!";
- uchar code table4[]="alarm!";
- uchar code table5[]="new mima!";
- void feng() //蜂鳴器函數(shù)
- {
- uchar i;
- for(i=0;i<10;i++)
- {
- beep=0;
- delayms(200);
- beep=1;
- delayms(200);
- }
- }
- void chushi() //初始函數(shù)
- {
- uchar i;
- write_byte(0,0x82);
- for(i=0;i<10;i++)
- {
- write_byte(1,table1[i]);
- }
- write_byte(1,'[');
- write_byte(1,0x30+count); //count是輸入密碼次數(shù),當(dāng)3次時,蜂鳴器報錯
- write_byte(1,']');
- }
- void bijiao() //比較函數(shù)
- {
- uchar i;
- keyscan(); //鍵盤掃描函數(shù)
- if(flag1==0) //當(dāng)修改密碼沒有按下時,正常輸入密碼
- {
- if((keynum>=0)&&(keynum<=9))
- {
- write_byte(0,0xc0+wei);
- if((wei>=0)&&(wei<=3))//密碼為4位,wei位密碼位數(shù)
- {
- write_byte(1,'*');
- mima[wei]=keynum; //將密碼存入到mima[]數(shù)組中,用于比較
- }
- }
- }
- if(flag1==1)//當(dāng)密碼修改按下時
- {
- if(ci==0) //清屏,wei=-1,只執(zhí)行一次
- {
- write_byte(0,0x01);
- delayms(20);
- wei=-1;
- ci++; //
- }
- else
- {
- write_byte(0,0x84); //修改密碼
- for(i=0;i<8;i++)
- {
- write_byte(1,table5[i]);
- }
- if((keynum>=0)&&(keynum<=9)) //修改密碼位數(shù)為4
- {
- write_byte(0,0xc0+wei);
- if((wei>=0)&&(wei<=3))
- {
- write_byte(1,0x30+keynum);
- table[wei]=keynum;
- }
- }
- flag=1; //開按鍵14,關(guān)按鍵15
- flag2=1; //將修改后的密碼存入table[]中
- count=1; //輸入密碼次數(shù)為1
- }
- }
- if(flag==0) //按鍵15有效
- {
- if(flag2==0) //初始密碼有效
- {
- table[0]=1;table[1]=2;table[2]=3;table[3]=4;
- }
- if(keynum==15)
- {
- if((mima[0]==table[0])&&(mima[1]==table[1])&&
- (mima[2]==table[2])&&(mima[3]==table[3])) //密碼比較 ,正確的話顯示welcome
- {
- write_byte(0,0x01);
- delayms(20);
- write_byte(0,0x82);
- for(i=0;i<8;i++)
- {
- write_byte(1,table2[i]);
- }
- while(1);
- }
- else //錯誤的話顯示error
- {
- write_byte(0,0x01);
- delayms(20);
- write_byte(0,0x84);
- for(i=0;i<6;i++)
- {
- write_byte(1,table3[i]);
- }
- count++; //輸入次數(shù),最多三次
- flag=1; //按鍵14打開,15關(guān)閉
- if(count>=4) //多余三次蜂鳴器響
- {
- write_byte(0,0x84);
- for(i=0;i<6;i++)
- {
- write_byte(1,table4[i]);
- }
- feng();
- while(1);
- }
- }
- }
- if(keynum==13) //按鍵13修改密碼有效
- {
- flag1=1;
- }
- }
- if(flag==1) //按鍵14有效
- {
- if(keynum==14) //清屏,初始化,輸入次數(shù)加一
- {
- write_byte(0,0x01);
- delayms(20);
- chushi();
- wei=-1;
- flag=0; //按鍵15有效
- flag1=0; //修改密碼無效
- }
- }
- }
- void main()
- {
- init_lcd1602();
- chushi();
- while(1)
- {
- bijiao();
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
密碼鎖-無存儲.zip
(37.42 KB, 下載次數(shù): 10)
2018-11-30 16:46 上傳
點擊文件名下載附件
|
|