找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8322|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

行列反轉(zhuǎn)發(fā)實(shí)現(xiàn)具有4位密碼設(shè)置的實(shí)用密碼鎖單片機(jī)程序,數(shù)碼管顯示

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
      下面設(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)。

仿真:



部分程序:
  1. #include <reg51.h>

  2. void delay(unsigned int i)                //延時(shí)函數(shù)
  3. {
  4.         unsigned int k;
  5.         for(k = 0; k < i; k++);
  6. }

  7. unsigned char code key_code[] ={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};  //鍵盤掃描碼
  8. unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};                //數(shù)碼管顯示碼
  9. unsigned char pw[4]={0,0,0,0};                                        //存放原始密碼
  10. unsigned char pwnew[4]={10,10,10,10};                //存放輸入的密碼
  11. sbit P30=P3^0;

  12. void set_pw();                //密碼設(shè)置函數(shù)
  13. void dispset();                //密碼設(shè)置顯示函數(shù)
  14. void dispnew();                //當(dāng)先輸入密碼顯示函數(shù)
  15. void dispright();        //輸入密碼正確顯示函數(shù)
  16. void disperror();        //輸入密碼錯(cuò)誤顯示函數(shù)
  17. char keyscan();                //行列反轉(zhuǎn)法實(shí)現(xiàn)的矩陣鍵盤掃描函數(shù)



  18. void main()
  19. {
  20.         char i,count;
  21.         bit pw_flag;                //密碼標(biāo)志位,1表示正確0表示錯(cuò)誤
  22.         while(1)
  23.         {
  24.                 i=keyscan();
  25.                 dispnew();
  26.                 if(i!=-1)                        //判斷是否有按鍵按下
  27.                 {
  28.                         if(i==11)                //按下11號(hào)按鍵,進(jìn)入密碼設(shè)置界面
  29.                         {
  30.                                 P2=0xf0;
  31.                                 while(P2!=0xf0);
  32.                                 set_pw();
  33.                         }
  34.                         
  35.                         if((i>=0) && (i<=9))
  36.                         {
  37.                                 pwnew[count]=i;                //給pwnew數(shù)組賦上當(dāng)前按下按鍵對(duì)應(yīng)的值
  38.                                 
  39.                                 count++;
  40.                                 P2=0xf0;
  41.                                 while(P2!=0xf0);                //判斷按鍵釋放
  42.                         }
  43.                         
  44.                         else if(i==10)                                //輸入密碼完成后按下確認(rèn)鍵
  45.                                 {        pw_flag=1;                                //附上原始狀態(tài)
  46.                                 if(count!=4)                                //先判斷輸入字符個(gè)數(shù)是否正確
  47.                                         pw_flag=0;                                //不正確,則修改密碼標(biāo)志位為0
  48.                                 else
  49.                                 {for(i=0;i<4;i++)                //比較輸入字符與原始密碼是否相同
  50.                                         {if(pw[i]!=pwnew[i])
  51.                                                 {pw_flag=0; break;}
  52.                                         }
  53.                                 }
  54.                                 
  55.                                 if(pw_flag==1)                        //密碼輸入正確
  56.                                 {
  57.                                         dispright();                        //顯示密碼輸入正確顯示 P
  58.                                         P30 = 0;                                                //開鎖指示燈亮
  59.                                         delay(20000);
  60.                                         while(1)
  61.                                         {
  62.                                                 i=keyscan();
  63.                                                 if(i!=-1)                                //有按鍵按下則退出等待狀態(tài)
  64.                                                         break;        
  65.                                         }
  66.                                         P2=0xf0;
  67.                                         while(P2!=0xf0);                //判斷按鍵釋放
  68.                                 }
  69.                                 else
  70.                                 {
  71.                                         disperror();                        //密碼輸入錯(cuò)誤顯示 E
  72.                                         P30 = 1;
  73.                                 }
  74.                                 count=0;
  75.                                 delay(50000);
  76.                                 for(i=0;i<4;i++)                //清楚當(dāng)前輸入值
  77.                                 {
  78.                                         pwnew[i]=10;
  79.                                 }
  80.                                 
  81.                                 
  82.                         }        
  83.                 }
  84.         }
  85. }
復(fù)制代碼

Keil代碼與Proteus仿真下載:
四位密碼鎖.7z (91.99 KB, 下載次數(shù): 224)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:222956 發(fā)表于 2019-6-5 12:00 | 只看該作者
謝謝樓主,仿真成功了,中文注釋也很詳細(xì)  密碼是0000哦

51hei.png (31.42 KB, 下載次數(shù): 117)

51hei.png

51hei.png (37.54 KB, 下載次數(shù): 110)

51hei.png
回復(fù)

使用道具 舉報(bào)

板凳
ID:840421 發(fā)表于 2020-11-15 12:22 來(lái)自觸屏版 | 只看該作者
樓主,解壓密碼是多少?
回復(fù)

使用道具 舉報(bào)

地板
ID:840216 發(fā)表于 2020-11-22 13:02 | 只看該作者
下下來(lái)之后,注釋全是亂碼,可以重新發(fā)一下嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:849172 發(fā)表于 2020-11-26 09:44 來(lái)自觸屏版 | 只看該作者
樓主,仿真打不開啊
回復(fù)

使用道具 舉報(bào)

6#
ID:942018 發(fā)表于 2021-6-21 23:53 | 只看該作者
嗒嗒嗒2 發(fā)表于 2019-6-5 12:00
謝謝樓主,仿真成功了,中文注釋也很詳細(xì)  密碼是0000哦

能發(fā)一下后續(xù)代碼嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:954263 發(fā)表于 2021-7-18 02:14 | 只看該作者
心態(tài)崩了 ,下載下來(lái)沒(méi)有hex,后面仿真也是搞不成
回復(fù)

使用道具 舉報(bào)

8#
ID:328014 發(fā)表于 2021-7-18 04:37 | 只看該作者
2657575938 發(fā)表于 2021-7-18 02:14
心態(tài)崩了 ,下載下來(lái)沒(méi)有hex,后面仿真也是搞不成

學(xué)單片機(jī)切勿心急,要慢慢弄懂每一個(gè)細(xì)節(jié),hex文件在 "程序\Objects" 目錄里面,仿真用Proteus8.8,你看我這不是成功了嗎?

51hei.png (2.81 KB, 下載次數(shù): 117)

51hei.png

51hei.gif (81.14 KB, 下載次數(shù): 91)

51hei.gif
回復(fù)

使用道具 舉報(bào)

9#
ID:993542 發(fā)表于 2021-12-17 12:36 來(lái)自觸屏版 | 只看該作者
51hei團(tuán)團(tuán) 發(fā)表于 2021-7-18 04:37
學(xué)單片機(jī)切勿心急,要慢慢弄懂每一個(gè)細(xì)節(jié),hex文件在 "程序\Objects" 目錄里面,仿真用Proteus8.8,你看我這 ...

有后續(xù)的代碼嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:877543 發(fā)表于 2021-12-17 15:45 | 只看該作者
謝謝樓主,仿真成功了,中文注釋也很詳細(xì)  密碼是0000哦
回復(fù)

使用道具 舉報(bào)

11#
ID:1030330 發(fā)表于 2022-6-2 00:39 | 只看該作者
你好 我的單片機(jī)是用P3口的,行列都是,我試著改了但是不對(duì),請(qǐng)問(wèn)我對(duì)應(yīng)的話應(yīng)該改哪里,麻煩了
回復(fù)

使用道具 舉報(bào)

12#
ID:143767 發(fā)表于 2022-6-4 15:09 | 只看該作者
樓主你好,我在你開鎖指示燈 delay(20000);后面加了P30 = 1; ,但是仿真的時(shí)候LED只是亮了一下然后迅速熄滅,延時(shí)改成100000也是一樣,請(qǐng)教各位怎樣讓LED開鎖后延時(shí)5秒后熄滅,謝謝!
回復(fù)

使用道具 舉報(bào)

13#
ID:1038334 發(fā)表于 2022-7-5 23:14 來(lái)自觸屏版 | 只看該作者
為什么程序是亂碼
回復(fù)

使用道具 舉報(bào)

14#
ID:1038334 發(fā)表于 2022-7-5 23:15 來(lái)自觸屏版 | 只看該作者
wofa 發(fā)表于 2021-12-17 15:45
謝謝樓主,仿真成功了,中文注釋也很詳細(xì)  密碼是0000哦

請(qǐng)問(wèn)有注釋嗎,我打開的不是程序,
回復(fù)

使用道具 舉報(bào)

15#
ID:262 發(fā)表于 2022-7-6 05:54 | 只看該作者

打開方式有問(wèn)題吧,是第一次用Keil嗎?你從網(wǎng)頁(yè)上把復(fù)制過(guò)去 重新建立工程,就可以了,不需要下載.你看我的打開效果

51hei.png (73.12 KB, 下載次數(shù): 67)

51hei.png
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表