這是基于89c52的六位密碼鎖,在通過矩陣鍵盤來輸入密碼,也可以進行密碼的修改,詳情請下載附件。
單片機源程序如下:
- /**********************密碼鎖**************************/
- #include"lcd1602.h"
- #include"jianpan.h"
- #include"buzzer.h"
- #include"relay.h"
- #define uint unsigned int
- void delay_ms(uint x)
- {
- uint i,j;
- for(i=x;i>0;i--)
- for(j=110;j>0;j--);
- }
-
- uchar password[]={14,10,6,13,9,5}; //用來裝密碼
- main()
- {
- uchar num,i=0,j; //num為按鍵值,i為字符數,j數值比較變量
- uchar input_number_test[10]; //裝剛輸入的密碼
- uchar wrongtimes=0; //用來記錄輸入錯誤次數
- uchar input_number_length, //輸入密碼長度,
- infact_number_length=6; //實際密碼長度
- bit Flag; //標志
- bit huan=1; //進入密碼修改模式的標志
- buzzer_init(); //蜂鳴器初始化
- relay_init(); //綠燈初始化
- InitLCD(); //初始化液晶屏
- Delay(10); //延時用于穩定,可以去掉
- LCD_Clear(); //清屏
- while(1) //主循環
- {
- Write_String(0,0," Welcome! ^_^ "); //寫入第一行信息,主循環中不再更改此信息,所以在while之前寫入
- i=0;
- Write_String(0,1,"Enter password");//寫入第二行信息,提示輸入密碼
- while (huan) //輸入密碼循環
- {
- num=KeyPro(); //看看鍵盤按下什么東西(沒按下時輸出0xff)
- if(num!=0xff) //如果有值的話就執行下一步操作
- {
- if(i==0) //輸入是第一個字符的時候需要把改行清空,方便觀看密碼
- Write_String(0,1," "); //清除該行
- if((i<6)&&(num!=0)) //如果輸入的是前七位
- {
- input_number_test[i]=num;
- LCD_Write_Char(i,1,'*'); //輸入的密碼用"*"代替
- i++;
- }
- if(0==num) //刪除鍵,按下0就刪除
- {
- --i;
- LCD_Write_Char(i,1,' ');
- }
-
- if(1==num) //修改密碼程序開始階段
- {
- huan=0;
- i=0;
- Write_String(0,1," "); //清除該行
- }
-
- /************************按下確認鍵,進行密碼比較,查看密碼是否正確******************/
-
- if((15==num)||(i==9)) //輸入按鍵值15或者密碼輸入到最大值6后按OK表示輸入結束,需要進行比對
- {
- input_number_length=i; //計算輸入密碼長度
- i=0; //計數器復位
- if(input_number_length==infact_number_length) //長度相等則比較,否則直接輸出錯誤
- {
- Flag=1; //比較位置1
- for(j=0;j<infact_number_length;j++) //循環比較8個數值,如果有一個不等 則最終Flag值為0
- Flag=Flag&&(input_number_test[j]==password[j]);//比較輸入值和已有密碼
- }
- if(!Flag)
- {
- Write_String(0,1," "); //清除該行
- Write_String(0,1,"Wrong! Retry!"); //密碼錯誤,提示重新輸入
- wrongtimes++; //連續輸入錯誤,則次數累加
- if(wrongtimes==3)
- {
- Write_String(0,1," "); //清除該行
- Write_String(0,1,"Wrong 3 times!");
- relay_work(); //
- buzzer_work(); //蜂鳴器工作
- while(1); //停止該位置,重啟電源后才能輸入,實際實用中則需要等到一定時間后才能再次輸入?。
- }
- }
- if(Flag) //如果比較全部相同,標志位置1
- {
- Write_String(0,1," "); //清除該行
- Write_String(0,1,"Right!OPEN .*-*."); //密碼正確
- wrongtimes=0; //輸入正確則次數清零,重新計數
- Flag=0;
- }
- }
- }
- }
-
- //********************進入密碼修改模式程序**********************************************************************************************************
- while (!huan) //修改密碼循環
- {
- Write_String(0,0,"Enter old code:");
- num=KeyPro(); //看看鍵盤按下什么東西(沒按下時輸出0xff)
- if(num!=0xff) //如果有值的話就執行下一步操作
- {
- if(i==0) //輸入是第一個字符的時候需要把改行清空,方便觀看密碼
- Write_String(0,1," "); //清除該行
- if((i<6)&&(num!=0)) //如果輸入的是前七位
- {
- input_number_test[i]=num;
- LCD_Write_Char(i,1,'*'); //輸入的密碼用"*"代替
- i++;
- }
- if(0==num) //刪除鍵,按下0就刪除
- {
- --i;
- LCD_Write_Char(i,1,' ');
- }
-
- if(2==num) //退出修改密碼模式
- {
- huan=1;
- break;
- }
- /***********************修改密碼的程序******************/
-
-
- if((15==num)||(i==9)) //輸入按鍵值15或者密碼輸入到最大值6后按OK表示輸入結束,需要進行比對
- {
- input_number_length=i; //計算輸入密碼長度
- i=0; //計數器復位
- if(input_number_length==infact_number_length) //長度相等則比較,否則直接輸出錯誤
- {
- Flag=1; //比較位置1
- for(j=0;j<infact_number_length;j++) //循環比較8個數值,如果有一個不等 則最終Flag值為0
- Flag=Flag&&(input_number_test[j]==password[j]);//比較輸入值和已有密碼
- }
- if(!Flag)
- {
- Write_String(0,1," "); //清除該行
- Write_String(0,1,"Wrong! Retry!"); //密碼錯誤,提示重新輸入
- break;
- }
- if(Flag) //如果比較全部相同,標志位置1
- {
- Write_String(0,1," "); //清除該行
- Write_String(0,0,"Enter new code"); //密碼正確
- wrongtimes=0; //輸入正確則次數清零,重新計數
- while(1)
- {
- num=KeyPro(); //看看鍵盤按下什么東西(沒按下時輸出0xff)
- if(num!=0xff) //如果有值的話就執行下一步操作
- {
- if(i==0) //輸入是第一個字符的時候需要把改行清空,方便觀看密碼
- Write_String(0,1," "); //清除該行
- if((i<6)&&(num!=0)) //如果輸入的是前七位
- {
- password[i]=num;
- LCD_Write_Char(i,1,'*'); //輸入的密碼用"*"代替
- i++;
- }
- if(0==num) //刪除鍵,按下0就刪除
- {
- --i;
- LCD_Write_Char(i,1,' ');
- }
-
- if((num==15))
- {
- Write_String(0,0,"Change succeeded");
- Write_String(0,1," ");
- delay_ms(1500);
- huan=1;
- Write_String(0,0," "); //清除該行
-
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
復制代碼
所有資料51hei提供下載:
密碼鎖.zip
(57.48 KB, 下載次數: 101)
2018-7-10 19:22 上傳
點擊文件名下載附件
密碼鎖程序 下載積分: 黑幣 -5
|