|
單片機1602密碼鎖程序仿真
0.png (19.56 KB, 下載次數(shù): 55)
下載附件
2017-5-25 03:13 上傳
目 錄
第1節(jié) 引言…………………………………………………………………………1
1.1 電子密碼鎖述……………………………………………………………1
1.2 本設(shè)計主要任務(wù)…………………………………………………………1
1.3 系統(tǒng)主要功能……………………………………………………………2
第2節(jié) 系統(tǒng)硬件設(shè)計………………………………………………………………3
2.1 系統(tǒng)的硬件構(gòu)成及功能 …………………………………………………3
2.2 AT89C2051單片機及其引腳說明………………………………………3
第3節(jié) 系統(tǒng)軟件設(shè)計………………………………………………………………5
3.1 系統(tǒng)主程序設(shè)計(流程圖)……………………………………………5
3.2 軟件設(shè)計思想……………………………………………………………5
3.3 儲單元的分配……………………………………………………………5
3.4 系統(tǒng)源程序………………………………………………………………6
3.5 系統(tǒng)應(yīng)用說明……………………………………………………………9
3.6 小結(jié)………………………………………………………………………9
結(jié)束語……………………………………………………………………10
參考文獻 ………………………………………………………………………11
附錄 ……………………………………………………………………………12
本設(shè)計主要任務(wù)
(1)共8位密碼,每位的取值范圍為1~8。
(2)用戶可以自行設(shè)定和修改密碼。
(3)按每個密碼鍵時都有聲、光提示。
(4)若鍵入的8位開鎖密碼不完全正確,則報警5秒鐘,以提醒他人注意。
(5)開鎖密碼錯3次要報警10分鐘,報警期間輸入密碼無效,以防竊賊多次試探密碼。
(6)鍵入的8位開鎖密碼完全正確才能開鎖,開鎖時要有1秒的提示音。
(7)密碼鍵盤上只允許有8個密碼按鍵和1個發(fā)光管。鎖內(nèi)有備用電池,只有內(nèi)部上電復(fù)位時才能設(shè)置或修改密碼,因此,僅在門外按鍵是不能修改或設(shè)置密碼的。
(8)密碼設(shè)定完畢后要有2秒的提示音。
以上是初步設(shè)定的電子密碼鎖的主要功能。
0.png (103.86 KB, 下載次數(shù): 49)
下載附件
2017-5-25 03:12 上傳
0.png (59.79 KB, 下載次數(shù): 45)
下載附件
2017-5-25 03:12 上傳
單片機源程序如下:
- #include"reg51.h"
- #include"key.h"
- #include"lcd.h"
- uchar code show_0[]="Please input the password:";
- uchar code show_1[]="The mima is:" ;
- uchar code show_2[]="********";
- uchar code show_3[]="The password is wrong!";
- uchar code show_4[]="This is delay 5s";
- uchar code show_5[]="Please zai shu yici!";
- uchar code show_6[]="you are right!";
- uchar code show_7[]="Please input the new mima:";
- uchar code show_8[]="Input it again!";
- uchar code show_9[]="Establishes successful! ";
- uchar code show_10[]="(^_^)";
- uchar code show_11[]="shuru guanliyuan mima";
- uchar code show_12[]="chao shi baojing";
- sbit baojing = P1^1;
- sbit jidianqi=P1^0;
- int k;
- //蜂鳴器
- void beep() //????????
- { uchar i;
- for(i=0;i<10;i++)
- {
-
- delay(10); //??10??
- baojing =! baojing;
- delay(10); //??10??
- }
- }
-
-
- void play(uchar *j,uchar q) //K是顯示的個數(shù),j是地址
- {
- uchar i;
- for(i=0;i<q;i++)
- {
- dat_w(*(j+i));
- delay(20);
- }
- }
- time0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- k++;
-
- if(k>=(20*60*3))
- { k=0;
- //jidianqi=0;
- beep();
- clear();
- gotoxy(1,0);
- play(show_12,16);
- gotoxy(2,0);
- play(show_12+17,10);
- }
-
- }
- void main()
- { uchar init_pswd[]={0,0,0,0,0,0,0,0};
- uchar guanli_pswd[]={8,8,8,8,8,8,8,8};
- uchar pswd[8]={0};
- uchar pswd_1[8]={0};
- uchar j=0,i=0,sum_1=0,g=0;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- //beep();
- loop:init();
- i=0;sum_1=0;
- clear();
- gotoxy(1,0);
- play(show_0,16);
- gotoxy(2,0);
- play(show_0+17,10);
- /****密碼輸入****/
- do
- {
- key();
- }
- while(ki!=15);
-
- TR0=1;//定時器開始計時,超時報警
- clear();
- gotoxy(1,0);
- play(show_1,13);
- do
- {
- flag=0;
- key();
-
- gotoxy(2,0);
- if(flag==1&&ki<=9)
- {
- pswd[i]=ki;
- i++;
- play(show_2,i);
-
- }
- }
- while(i<=7);
- for(i=0;i<=7;i++)
- {
- sum_1=init_pswd[i]-pswd[i]+sum_1;//比較密碼是否正確
-
- }
-
- if(sum_1==0)
- {
-
- clear();
- gotoxy(1,0);
- play(show_6,15);
- jidianqi=0;
- //beep();
- //TR0=0; //密碼正確打開繼電器,關(guān)閉計時器
- do
- {
- key();
- }
- while(ki!=13);
- jidianqi=1;
- loop1:clear();
- gotoxy(1,0);
- play(show_7,13);
- gotoxy(2,0);
- play(show_7+13,13);
- /****第一次輸密碼***/
- 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);
- play(show_9+13,11);
- for(i=0;i<=7;i++)
- {
- init_pswd[i]=pswd[i];
- }
- goto loop ;
- }
- if(sum_1!=0)
- {
- clear();
- goto loop1;
- }
- }
- if(sum_1!=0)//密碼不正確e
- {
- clear();
-
- j++;//統(tǒng)計輸錯次數(shù)
- if(j==3)
- {
- clear();
-
- beep();//三次輸入密碼失敗,報警
-
-
- while(g==0)
- {
- clear();
- gotoxy(1,0);
- play(show_11,15);
- gotoxy(2,0);
- play(show_11+15,6);
- i=0;sum_1=0;
- do
- {
- flag=0;
- gotoxy(2,7);
- key();
- //beep();
-
-
- if(flag==1&&ki<=9)
- {
- pswd[i]=ki;
- i++;
- play(show_2,i);
-
- }
- }
- while(i<=7);
- for(i=0;i<=7;i++)
- {
- sum_1=guanli_pswd[i]-pswd[i]+sum_1;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
電子密碼鎖1602液晶顯示資料.zip
(446.83 KB, 下載次數(shù): 103)
2017-5-24 17:50 上傳
點擊文件名下載附件
c語言 下載積分: 黑幣 -5
|
|