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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子密碼鎖程序、Proteus仿真、電路圖 程序流程圖

  [復制鏈接]
跳轉到指定樓層
樓主
1.“輸入”按鍵:每次需要輸入密碼必須按“輸入”按鍵,否則無法輸入密碼,若輸入密碼正確,則提示正確信息,否則提示錯誤信息并報警,10S內不允許重新輸入密碼。
2.“確認”按鍵:同于確認密碼輸入完成。
3.“修改密碼”按鍵:需要修改密碼,在輸入正確密碼后可按此按鍵進行修改。
4. 鎖的初始密碼是123456(密碼長度為6位,超過6位再次輸入則無效)。
5.  開鎖10秒后不允許更改密碼、并提示修改超時_進入初始態,需要重新輸入密碼方可再次修改密碼。
6.  系統未使用存儲器存儲密碼故掉電后密碼自動恢復為初始密碼

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


程序流程圖:

主程序

  1. #include"KeyBord.h"
  2. #include"LCD1602.h"
  3. #include"Timer.h"
  4. #include"string.h"

  5. sbit Unlock_Led = P2^1;               //開鎖顯示燈
  6. sbit Beep = P2^2;                     //蜂鳴器

  7. unsigned char Key_Num = 0;            //按鍵值
  8. unsigned char input_flag = 0;         //輸入標志位
  9. unsigned char change_flag = 0;        //修改密碼標志位
  10. unsigned char Set_password = 0;       //設定密碼

  11. unsigned char Pass_Num[6];              //數組用于存放輸入的密碼
  12. unsigned char Pass_Temp[6];             //中間變量存儲數組
  13. unsigned char Pass_Word[6] = {1,2,3,4,5,6};     //轉換成液晶顯示的字符

  14. void Key_Control();

  15. void main()
  16. {  
  17.     unsigned char i,j=0,num=0,count=0;

  18.         LCD_Init();                               //顯示屏初始化
  19.     Timer0_Init();                            //定時器初始化

  20.     LCD_Write_Cmd(0x0F);                      //光標閃爍
  21.     LCD_Write_Str(0,0,"FireFly Sci&Tech");    //初始顯示界面
  22.     LCD_Write_Str(4,1,"Welcome!");


  23.     while(1)
  24.     {        
  25.         Key_Num = KeyPro();

  26.         if(time_flag)                             //定時器計時10S,返回初始界面
  27.         {                                         //關閉定時器
  28.             TR0 = 0;                              //定時標志位清零
  29.             time_flag = 0;
  30.             change_time =10;
  31.             Set_password = 0;
  32.             Unlock_Led = 0;
  33.             Beep = 0;

  34.             LCD_Write_Cmd(0x01);                     //清屏,并返回初始界面
  35.             LCD_Write_Str(0,0,"FireFly Sci&Tech");
  36.             LCD_Write_Str(4,1,"Welcome!");
  37.         }
  38.         if(Key_Num >= 12)                           //按鍵值是否大于12
  39.         {
  40.             if(Key_Num == 12)                       //輸入按鍵是否按下
  41.             {
  42.                 LCD_Write_Cmd(0x01);                //清屏,并進入輸入界面
  43.                 DelayMs(5);   
  44.                 LCD_Write_Str(1,0,"PassWord:");

  45.                 TR0 = 0;                            //關閉定時器,重新設定定時時間,
  46.                 time_flag = 0;
  47.                 change_time =10;
  48.                 input_flag = 1;                      //輸入標志位置1
  49.                 Unlock_Led = 0;                      //開鎖顯示燈滅
  50.                 num = 0;
  51.                 i = 0;     
  52.             }
  53.             else if(Key_Num == 13)                     //確認按鍵是否被按下
  54.             {
  55.                 if(num == 6)                           //輸入密碼長度是否為6位
  56.                 {
  57.                     if(change_flag)                    //修改密碼標志位真
  58.                     {
  59.                         change_flag = 0;

  60.                         for(j = 0; j < 6; j++)             //將密碼從中間數組導入密碼存儲數組
  61.                         {
  62.                             Pass_Word[j] = Pass_Temp[j];
  63.                         }

  64.                         LCD_Write_Cmd(0x01);                //清屏,并進入密碼修改成功界面
  65.                         LCD_Write_Str(2, 0, "SET Success!");
  66.                     }
  67.                     else if(input_flag)
  68.                     {
  69.                         if(memcmp(Pass_Num, Pass_Word, 6) == 0)      //將輸入的密碼與設置的密碼進行比對
  70.                         {
  71.                             LCD_Write_Cmd(0x01);                       //清屏,并進入密碼輸入正確界面
  72.                             LCD_Write_Str(1, 0, "PassWord Right");
  73.                             LCD_Write_Str(2, 1, "Door unlock");

  74.                             Set_password = 1;                          //設定密碼,10秒內可修改
  75.                             Unlock_Led = 1;                            //開鎖顯示燈亮
  76.                             input_flag = 0;
  77.                         }
  78.                         else
  79.                         {
  80.                             LCD_Write_Cmd(0x01);                   //清屏,并進入密碼輸入錯誤界面
  81.                             DelayMs(5);
  82.                             LCD_Write_Str(1, 0, "PassWord Error");
  83.                             change_time =10;
  84.                             TR0 = 1;
  85.                             Unlock_Led = 0;                           

  86.                             while(!time_flag)
  87.                             {
  88.                                 Unlock_Led = ~Unlock_Led;
  89.                                 Beep = ~Beep;         //板子為無源蜂鳴器
  90.                                 DelayUs2x(100);
  91.                             }   
  92.                         }
  93.                     }
  94.                     change_time =10;      //重新賦值定時時間,開定時器,輸入計數和顯示位置計數清零
  95.                     TR0 = 1;
  96.                     num = 0;
  97.                     i = 0;   
  98.                 }
  99.             }
  100.             else if(Key_Num == 14)         //修改密碼按鍵
  101.             {
  102.                 if(Set_password)           //如果在設定密碼時間內
  103.                 {
  104.                     LCD_Write_Cmd(0x01);        //清屏,進入修改密碼界面
  105.                     DelayMs(5);
  106.                     LCD_Write_Str(1, 0, "New PassWord:");
  107.                     TR0 = 0;
  108.                     time_flag = 0;
  109.                     change_time =10;
  110.                     change_flag = 1;
  111.                     input_flag = 0;
  112.                     Set_password = 0;
  113.                     num = 0;
  114.                     i = 0;     
  115.                 }   
  116.             }
  117.             else if(Key_Num == 15)             //取消修改密碼
  118.             {
  119.                 if(change_flag)
  120.                 {
  121.                     LCD_Write_Cmd(0x01);
  122.                     DelayMs(5);
  123.                     LCD_Write_Str(1, 0, "Cancel Change!");
  124.                     TR0 = 1;
  125.                     change_flag = 0;
  126.                     num = 0;
  127.                     i = 0;   
  128.                 }   
  129.             }

  130.         }
  131.         else if(Key_Num <= 9)
  132.         {
  133.             if(num < PASS_NUM)              //輸入密碼計數小于6
  134.             {
  135.                 if(input_flag)               //輸入密碼標志位
  136.                 {   
  137.                     Pass_Num[num] = Key_Num;
  138.                     LCD_Write_Char(3 + i, 1, '*');//依次顯示輸入字符
  139.                 }
  140.                 else if(change_flag)            //修改密碼標志位
  141.                 {
  142.                     Pass_Temp[num] = Key_Num;
  143.                     LCD_Write_Char(3 + i, 1, ('0' + Pass_Temp[num]));//依次顯示輸入字符
  144.                 }

  145.                 num++;
  146.                 i++;
  147.             }        
  148.         }
  149.     }
  150. }
復制代碼

Keil代碼與Proteus8.8仿真下載: 電子密碼鎖.rar (542.69 KB, 下載次數: 294)

評分

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

查看全部評分

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

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
5#
ID:1053794 發表于 2022-11-24 19:55 | 只看該作者
邏輯很清楚,容易理解
回復

使用道具 舉報

6#
ID:1054493 發表于 2022-11-28 21:10 | 只看該作者
大佬的作品
回復

使用道具 舉報

7#
無效樓層,該帖已經被刪除
8#
ID:1054627 發表于 2022-11-29 14:17 | 只看該作者
大佬的作品好理解
回復

使用道具 舉報

9#
ID:1054697 發表于 2022-12-2 12:54 | 只看該作者
怎么開機界面不一樣呀仿真用不了
回復

使用道具 舉報

10#
ID:262 發表于 2022-12-2 16:24 | 只看該作者
無敵飛貓 發表于 2022-12-2 12:54
怎么開機界面不一樣呀仿真用不了

我打開可以用 你版本不行吧 用Proteus8.13
回復

使用道具 舉報

11#
ID:1055296 發表于 2022-12-2 20:37 | 只看該作者
附件里面有lcd1602.h文件
回復

使用道具 舉報

12#
ID:1055296 發表于 2022-12-3 00:23 | 只看該作者
為什么打開后lcd顯示屏沒有開機界面,只會亮,請問什么情況?
回復

使用道具 舉報

13#
ID:262 發表于 2022-12-3 04:43 | 只看該作者
ENXXXXTONEW 發表于 2022-12-3 00:23
為什么打開后lcd顯示屏沒有開機界面,只會亮,請問什么情況?

可能是你沒有采用樓主的8.8版本吧 我打開和樓主的圖是一樣的
回復

使用道具 舉報

14#
ID:1055296 發表于 2022-12-3 22:32 | 只看該作者
輸入密碼的時候不會顯示星號,什么問題?跪求!

回復

使用道具 舉報

15#
ID:1025912 發表于 2022-12-5 15:03 | 只看該作者
非常有用,學習,收藏了,謝謝
回復

使用道具 舉報

16#
ID:1056587 發表于 2022-12-9 10:49 | 只看該作者
heicad 發表于 2022-12-3 04:43
可能是你沒有采用樓主的8.8版本吧 我打開和樓主的圖是一樣的

我用的8.9版本為什么還是沒有開機界面呢,求解
回復

使用道具 舉報

17#
ID:932294 發表于 2022-12-9 13:55 | 只看該作者
led安在哪里了請問
回復

使用道具 舉報

18#
ID:92810 發表于 2023-1-9 16:31 | 只看該作者
謝謝樓主分享了,下載學習先
回復

使用道具 舉報

19#
無效樓層,該帖已經被刪除
20#
無效樓層,該帖已經被刪除
21#
無效樓層,該帖已經被刪除
22#
ID:1107797 發表于 2024-1-4 15:33 | 只看該作者
大神寫的軟件就是好,可惜我看不懂,軟件太難了!
回復

使用道具 舉報

23#
無效樓層,該帖已經被刪除
24#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

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