欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8295|回復: 14
打印 上一主題 下一主題
收起左側

行列反轉發實現具有4位密碼設置的實用密碼鎖單片機程序,數碼管顯示

  [復制鏈接]
跳轉到指定樓層
樓主
      下面設計具體有16個按鍵輸入,S12~S15此處無用、用4為集成數碼管顯示4為密碼。矩陣鍵盤電路由P2口低四位控制4行,P2口高四位控制4列,數碼管短線段與P0口相連,4調位選控制線與P1口低四位相連,模擬鎖狀態的發光二極管由P3.0控制。

密碼鎖功能如下:
(1)系統上電,數碼管顯示 - - - -,此時可輸入4位密碼,然后以OK KEY鍵結束輸入,如果密碼輸入正確數碼管顯示 P,按下任意鍵結束;如果密碼輸入錯誤數碼管顯示 E 1秒,重新輸入。
(2)PASS KEY作為密碼設置按鍵,再次按下或已重置輸入4位密碼 則顯示 P 表示設置密碼成功返回輸入狀態。

仿真:



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

  2. void delay(unsigned int i)                //延時函數
  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};                //數碼管顯示碼
  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();                //密碼設置函數
  13. void dispset();                //密碼設置顯示函數
  14. void dispnew();                //當先輸入密碼顯示函數
  15. void dispright();        //輸入密碼正確顯示函數
  16. void disperror();        //輸入密碼錯誤顯示函數
  17. char keyscan();                //行列反轉法實現的矩陣鍵盤掃描函數



  18. void main()
  19. {
  20.         char i,count;
  21.         bit pw_flag;                //密碼標志位,1表示正確0表示錯誤
  22.         while(1)
  23.         {
  24.                 i=keyscan();
  25.                 dispnew();
  26.                 if(i!=-1)                        //判斷是否有按鍵按下
  27.                 {
  28.                         if(i==11)                //按下11號按鍵,進入密碼設置界面
  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數組賦上當前按下按鍵對應的值
  38.                                 
  39.                                 count++;
  40.                                 P2=0xf0;
  41.                                 while(P2!=0xf0);                //判斷按鍵釋放
  42.                         }
  43.                         
  44.                         else if(i==10)                                //輸入密碼完成后按下確認鍵
  45.                                 {        pw_flag=1;                                //附上原始狀態
  46.                                 if(count!=4)                                //先判斷輸入字符個數是否正確
  47.                                         pw_flag=0;                                //不正確,則修改密碼標志位為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)                                //有按鍵按下則退出等待狀態
  64.                                                         break;        
  65.                                         }
  66.                                         P2=0xf0;
  67.                                         while(P2!=0xf0);                //判斷按鍵釋放
  68.                                 }
  69.                                 else
  70.                                 {
  71.                                         disperror();                        //密碼輸入錯誤顯示 E
  72.                                         P30 = 1;
  73.                                 }
  74.                                 count=0;
  75.                                 delay(50000);
  76.                                 for(i=0;i<4;i++)                //清楚當前輸入值
  77.                                 {
  78.                                         pwnew[i]=10;
  79.                                 }
  80.                                 
  81.                                 
  82.                         }        
  83.                 }
  84.         }
  85. }
復制代碼

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

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

51hei.png

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

51hei.png
回復

使用道具 舉報

無效樓層,該帖已經被刪除
地板
ID:840421 發表于 2020-11-15 12:22 來自觸屏版 | 只看該作者
樓主,解壓密碼是多少?
回復

使用道具 舉報

5#
ID:840216 發表于 2020-11-22 13:02 | 只看該作者
下下來之后,注釋全是亂碼,可以重新發一下嗎
回復

使用道具 舉報

6#
ID:849172 發表于 2020-11-26 09:44 來自觸屏版 | 只看該作者
樓主,仿真打不開啊
回復

使用道具 舉報

7#
無效樓層,該帖已經被刪除
8#
ID:942018 發表于 2021-6-21 23:53 | 只看該作者
嗒嗒嗒2 發表于 2019-6-5 12:00
謝謝樓主,仿真成功了,中文注釋也很詳細  密碼是0000哦

能發一下后續代碼嗎
回復

使用道具 舉報

9#
ID:954263 發表于 2021-7-18 02:14 | 只看該作者
心態崩了 ,下載下來沒有hex,后面仿真也是搞不成
回復

使用道具 舉報

10#
ID:328014 發表于 2021-7-18 04:37 | 只看該作者
2657575938 發表于 2021-7-18 02:14
心態崩了 ,下載下來沒有hex,后面仿真也是搞不成

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

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

51hei.png

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

51hei.gif
回復

使用道具 舉報

11#
無效樓層,該帖已經被刪除
12#
ID:993542 發表于 2021-12-17 12:36 來自觸屏版 | 只看該作者
51hei團團 發表于 2021-7-18 04:37
學單片機切勿心急,要慢慢弄懂每一個細節,hex文件在 "程序\Objects" 目錄里面,仿真用Proteus8.8,你看我這 ...

有后續的代碼嗎
回復

使用道具 舉報

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

使用道具 舉報

14#
無效樓層,該帖已經被刪除
15#
無效樓層,該帖已經被刪除
16#
ID:1030330 發表于 2022-6-2 00:39 | 只看該作者
你好 我的單片機是用P3口的,行列都是,我試著改了但是不對,請問我對應的話應該改哪里,麻煩了
回復

使用道具 舉報

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

使用道具 舉報

18#
ID:1038334 發表于 2022-7-5 23:14 來自觸屏版 | 只看該作者
為什么程序是亂碼
回復

使用道具 舉報

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

請問有注釋嗎,我打開的不是程序,
回復

使用道具 舉報

20#
ID:262 發表于 2022-7-6 05:54 | 只看該作者
2807326858 發表于 2022-7-5 23:14
為什么程序是亂碼

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

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

51hei.png
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表