|
下面設(shè)計(jì)具體有16個(gè)按鍵輸入,S12~S15此處無(wú)用、用4為集成數(shù)碼管顯示4為密碼。矩陣鍵盤電路由P2口低四位控制4行,P2口高四位控制4列,數(shù)碼管短線段與P0口相連,4調(diào)位選控制線與P1口低四位相連,模擬鎖狀態(tài)的發(fā)光二極管由P3.0控制。
密碼鎖功能如下:
(1)系統(tǒng)上電,數(shù)碼管顯示 - - - -,此時(shí)可輸入4位密碼,然后以O(shè)K KEY鍵結(jié)束輸入,如果密碼輸入正確數(shù)碼管顯示 P,按下任意鍵結(jié)束;如果密碼輸入錯(cuò)誤數(shù)碼管顯示 E 1秒,重新輸入。
(2)PASS KEY作為密碼設(shè)置按鍵,再次按下或已重置輸入4位密碼 則顯示 P 表示設(shè)置密碼成功返回輸入狀態(tài)。
仿真:
3.png (108.83 KB, 下載次數(shù): 84)
下載附件
2019-5-28 18:23 上傳
部分程序:
- #include <reg51.h>
- void delay(unsigned int i) //延時(shí)函數(shù)
- {
- unsigned int k;
- for(k = 0; k < i; k++);
- }
- unsigned char code key_code[] ={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //鍵盤掃描碼
- unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //數(shù)碼管顯示碼
- unsigned char pw[4]={0,0,0,0}; //存放原始密碼
- unsigned char pwnew[4]={10,10,10,10}; //存放輸入的密碼
- sbit P30=P3^0;
- void set_pw(); //密碼設(shè)置函數(shù)
- void dispset(); //密碼設(shè)置顯示函數(shù)
- void dispnew(); //當(dāng)先輸入密碼顯示函數(shù)
- void dispright(); //輸入密碼正確顯示函數(shù)
- void disperror(); //輸入密碼錯(cuò)誤顯示函數(shù)
- char keyscan(); //行列反轉(zhuǎn)法實(shí)現(xiàn)的矩陣鍵盤掃描函數(shù)
- void main()
- {
- char i,count;
- bit pw_flag; //密碼標(biāo)志位,1表示正確0表示錯(cuò)誤
- while(1)
- {
- i=keyscan();
- dispnew();
- if(i!=-1) //判斷是否有按鍵按下
- {
- if(i==11) //按下11號(hào)按鍵,進(jìn)入密碼設(shè)置界面
- {
- P2=0xf0;
- while(P2!=0xf0);
- set_pw();
- }
-
- if((i>=0) && (i<=9))
- {
- pwnew[count]=i; //給pwnew數(shù)組賦上當(dāng)前按下按鍵對(duì)應(yīng)的值
-
- count++;
- P2=0xf0;
- while(P2!=0xf0); //判斷按鍵釋放
- }
-
- else if(i==10) //輸入密碼完成后按下確認(rèn)鍵
- { pw_flag=1; //附上原始狀態(tài)
- if(count!=4) //先判斷輸入字符個(gè)數(shù)是否正確
- pw_flag=0; //不正確,則修改密碼標(biāo)志位為0
- else
- {for(i=0;i<4;i++) //比較輸入字符與原始密碼是否相同
- {if(pw[i]!=pwnew[i])
- {pw_flag=0; break;}
- }
- }
-
- if(pw_flag==1) //密碼輸入正確
- {
- dispright(); //顯示密碼輸入正確顯示 P
- P30 = 0; //開鎖指示燈亮
- delay(20000);
- while(1)
- {
- i=keyscan();
- if(i!=-1) //有按鍵按下則退出等待狀態(tài)
- break;
- }
- P2=0xf0;
- while(P2!=0xf0); //判斷按鍵釋放
- }
- else
- {
- disperror(); //密碼輸入錯(cuò)誤顯示 E
- P30 = 1;
- }
- count=0;
- delay(50000);
- for(i=0;i<4;i++) //清楚當(dāng)前輸入值
- {
- pwnew[i]=10;
- }
-
-
- }
- }
- }
- }
復(fù)制代碼
Keil代碼與Proteus仿真下載:
四位密碼鎖.7z
(91.99 KB, 下載次數(shù): 224)
2021-7-18 04:39 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|