本設(shè)計(jì)主要任務(wù)
(1)共8位密碼,每位的取值范圍為1~8。
(2)用戶可以自行設(shè)定和修改密碼。
(3)按每個密碼鍵時都有聲、光提示。
(4)若鍵入的8位開鎖密碼不完全正確,則報(bào)警5秒鐘,以提醒他人注意。
(5)開鎖密碼錯3次要報(bào)警10分鐘,報(bào)警期間輸入密碼無效,以防竊賊多次試探密碼。
(6)鍵入的8位開鎖密碼完全正確才能開鎖,開鎖時要有1秒的提示音。
(7)密碼鍵盤上只允許有8個密碼按鍵和1個發(fā)光管。鎖內(nèi)有備用電池,只有內(nèi)部上電復(fù)位時才能設(shè)置或修改密碼,因此,僅在門外按鍵是不能修改或設(shè)置密碼的。
(8)密碼設(shè)定完畢后要有2秒的提示音。
以上是初步設(shè)定的電子密碼鎖的主要功能。
本系統(tǒng)主要由單片機(jī)系統(tǒng)、鍵盤、報(bào)警系統(tǒng)組成。系統(tǒng)能完成開鎖、超時報(bào)警、超次鎖定、管理員解密、修改用戶密碼基本的密碼鎖的功能。除上述基本的密碼鎖功能外,還具有調(diào)電存儲、聲光提示等功能,依據(jù)實(shí)際的情況還可以添加遙控功能。本系統(tǒng)成本低廉,功能實(shí)用。本設(shè)計(jì)要完成的軟件任務(wù)主要有:一是鍵盤輸入的識別;二是8位LED的顯示;三是密碼的比較、修改、存儲;;四是報(bào)警和開鎖控制電平的輸出。
根據(jù)以上任務(wù),結(jié)合硬件結(jié)構(gòu),可以將鍵盤輸入的識別用來作為系統(tǒng)的監(jiān)控程序(主程序),用顯示程序來延時,不斷查詢鍵盤。如果有鍵按下,就得到相應(yīng)的鍵值。結(jié)合當(dāng)前系統(tǒng)所處的狀態(tài),調(diào)用不同的操作模塊,實(shí)現(xiàn)相應(yīng)的功能。而執(zhí)行模塊主要有數(shù)字輸入模塊、確定鍵模塊、修改鍵模塊、顯示模塊及報(bào)警模塊。 存儲單元的分配 該密碼鎖中RAM存儲單元的分配方案如下: 31H~38H:依次存放8位設(shè)定的密碼,首位密碼存放在31H單元; R0:指向密碼地址; R2:已經(jīng)鍵入密碼的位數(shù); R3:存放允許的錯碼次數(shù)3與實(shí)際錯碼次數(shù)的差值; R4至R7:延時用; 00H:錯碼標(biāo)志位。 對于ROM存儲單元的分配,由于程序比較短,而且占用的存儲空間比較少,因此,在無特殊要求時,可以從0030H單元(其它地址也可以)開始存放主程序。 若按鍵AN1~AN7分別代表數(shù)碼1~7,按鍵AN0代表數(shù)碼8。在沒有鍵按下時,P1.0~P1.7全是高電平1,若某個鍵被按下,相應(yīng)的口線就變?yōu)榈碗娖?。假如設(shè)定的密碼是61234578,當(dāng)按鍵AN6被按下時,P1.6變?yōu)榈碗娖剑琍1端口其余口線為高電平,此時從P1端口讀入的數(shù)值為10111111,存到31H單元的密碼值就是10111111,也就是BFH。依此類推,存到32H至38H單元的密碼值分別是FDH、FBH、F7H、EFH、DFH、7FH、FEH。開鎖時必須先按AN6,使從P1口讀入的第一個密碼值與31H單元存儲的設(shè)定值相同,再順序按AN1、AN2、AN3、AN4、AN5、AN7、AN0才能開鎖。否則不能開鎖,同時開始報(bào)警。
實(shí)物圖:
proteus仿真原理圖:
單片機(jī)源程序如下:
- //南陽理工學(xué)院
- //學(xué)習(xí)是遺忘的最好的方式
- //只花了很少時間寫的,有很多不足的算法與編程序方式,見諒!
- #include"at89x51.h"
- #include"key.h"
- #include"lcd.h"
- uchar code show_0[]="Please input the password:";
- uchar code show_1[]="The cipher is:" ;
- uchar code show_2[]="********";
- uchar code show_3[]="The password is wrong!";
- uchar code show_4[]="This is the last time,";
- uchar code show_5[]="Please try it tomorrow!";
- uchar code show_6[]="you are right!";
- uchar code show_7[]="Please input the new cipher:";
- uchar code show_8[]="Input it again!";
- uchar code show_9[]="Establishes successful! ";
- uchar code show_10[]="(^_^)";
- uchar init_pswd[]={8,8,8,8,8,8,8,8};
- uchar pswd[8]={0};
- uchar pswd_1[8]={0};
- void play(uchar *j,uchar k) //K是顯示的個數(shù),j是地址
- {
- uchar i;
- for(i=0;i<k;i++)
- {
- dat_w(*(j+i));
- delay(20);
- }
- }
- main()
- {
- uchar j=0,i=0,sum_1=0;
- loop:init();
- clear();
- gotoxy(1,0);
- play(show_0,16);
- gotoxy(2,0);
- play(show_0+17,10);
- /****密碼輸入****/
- do
- {
- key();
- }
- while(ki!=15);
- clear();
- gotoxy(1,0);
- play(show_1,15);
- do
- {
- flag=0;
- key();
- gotoxy(2,0);
- if(flag==1&&ki<=9)
- {
- pswd[i]=ki;
- play(show_2,i);
- i++;
- }
- if(ki==14) //14則退出.
- break;
- }
- while(i<=8);
- for(i=0;i<=7;i++)
- {
- sum_1=init_pswd[i]-pswd[i]+sum_1;
- if(sum_1!=0)
- {
- clear();
- j++;
- if(j==3)
- {
- clear();
- gotoxy(1,0);
- play(show_4,16);
- gotoxy(2,0);
- play(show_4+16,14);
- delay(500);
- delay(500);
- clear();
- gotoxy(1,0);
- play(show_5+7,16);
- gotoxy(2,5);
- play(show_10,5);
- while(1); //三次輸入密碼失敗,自鎖
- }
- gotoxy(1,0);
- play(show_3,16);
- gotoxy(2,5);
- play(show_3+15,7);
- delay(500);
- clear();
- gotoxy(1,0);
- play(show_8,15);
- goto loop;
- }
- if(sum_1==0)
- {
-
- clear();
- gotoxy(1,0);
- play(show_6,15);
- do
- {
- key();
- }
- while(ki!=13);
- loop1:clear();
- gotoxy(1,0);
- play(show_7,13);
- gotoxy(2,0);
- play(show_7+13,15);
- /****第一次輸密碼***/
- i=0;
- do
- {
- flag=0;
- key();
- if(flag==1&&ki<=9)
- {
- pswd[i]=ki;
- i++;
- clear();
- gotoxy(1,0);
- play(show_2,i);
- }
- }while(i<=7);
- clear();
- gotoxy(1,0);
- play(show_8,15);
- /***第二次輸密碼****/
- i=0;
- sum_1=0;
- do
- {
- flag=0;
- key();
- if(flag==1&&ki<=9)
- {
- pswd_1[i]=ki;
- i++;
- clear();
- gotoxy(1,0);
- play(show_2,i);
- }
- }
- while(i<=7);
- for(i=0;i<=7;i++)
- {
- sum_1=sum_1+ pswd_1[i]-pswd[i];
- }
- if(sum_1==0)
- {
- clear();
- gotoxy(1,2);
- play(show_9,12);
- gotoxy(2,2);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
電子密碼鎖 1602顯示仿真程序.zip
(292.21 KB, 下載次數(shù): 395)
2017-5-25 15:47 上傳
點(diǎn)擊文件名下載附件
|