|
單片機1602密碼鎖程序仿真
0.png (19.56 KB, 下載次數: 55)
下載附件
2017-5-25 03:13 上傳
目 錄
第1節 引言…………………………………………………………………………1
1.1 電子密碼鎖述……………………………………………………………1
1.2 本設計主要任務…………………………………………………………1
1.3 系統主要功能……………………………………………………………2
第2節 系統硬件設計………………………………………………………………3
2.1 系統的硬件構成及功能 …………………………………………………3
2.2 AT89C2051單片機及其引腳說明………………………………………3
第3節 系統軟件設計………………………………………………………………5
3.1 系統主程序設計(流程圖)……………………………………………5
3.2 軟件設計思想……………………………………………………………5
3.3 儲單元的分配……………………………………………………………5
3.4 系統源程序………………………………………………………………6
3.5 系統應用說明……………………………………………………………9
3.6 小結………………………………………………………………………9
結束語……………………………………………………………………10
參考文獻 ………………………………………………………………………11
附錄 ……………………………………………………………………………12
本設計主要任務
(1)共8位密碼,每位的取值范圍為1~8。
(2)用戶可以自行設定和修改密碼。
(3)按每個密碼鍵時都有聲、光提示。
(4)若鍵入的8位開鎖密碼不完全正確,則報警5秒鐘,以提醒他人注意。
(5)開鎖密碼錯3次要報警10分鐘,報警期間輸入密碼無效,以防竊賊多次試探密碼。
(6)鍵入的8位開鎖密碼完全正確才能開鎖,開鎖時要有1秒的提示音。
(7)密碼鍵盤上只允許有8個密碼按鍵和1個發光管。鎖內有備用電池,只有內部上電復位時才能設置或修改密碼,因此,僅在門外按鍵是不能修改或設置密碼的。
(8)密碼設定完畢后要有2秒的提示音。
以上是初步設定的電子密碼鎖的主要功能。
0.png (103.86 KB, 下載次數: 49)
下載附件
2017-5-25 03:12 上傳
0.png (59.79 KB, 下載次數: 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是顯示的個數,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; //密碼正確打開繼電器,關閉計時器
- 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++;//統計輸錯次數
- 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黑下載附件…………
復制代碼
所有資料51hei提供下載:
電子密碼鎖1602液晶顯示資料.zip
(446.83 KB, 下載次數: 103)
2017-5-24 17:50 上傳
點擊文件名下載附件
c語言 下載積分: 黑幣 -5
|
|