久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機電子密碼鎖程序、Proteus仿真、電路圖 程序流程圖 [打印本頁]

作者: 帥比凱    時間: 2021-12-20 17:27
標題: 單片機電子密碼鎖程序、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)

作者: djd5    時間: 2022-11-24 19:55
邏輯很清楚,容易理解
作者: zzx3    時間: 2022-11-28 21:10
大佬的作品

作者: 墨非塵    時間: 2022-11-29 14:17
大佬的作品好理解
作者: 無敵飛貓    時間: 2022-12-2 12:54
怎么開機界面不一樣呀仿真用不了

作者: heicad    時間: 2022-12-2 16:24
無敵飛貓 發表于 2022-12-2 12:54
怎么開機界面不一樣呀仿真用不了

我打開可以用 你版本不行吧 用Proteus8.13
作者: ENXXXXTONEW    時間: 2022-12-2 20:37
附件里面有lcd1602.h文件

作者: ENXXXXTONEW    時間: 2022-12-3 00:23
為什么打開后lcd顯示屏沒有開機界面,只會亮,請問什么情況?
作者: heicad    時間: 2022-12-3 04:43
ENXXXXTONEW 發表于 2022-12-3 00:23
為什么打開后lcd顯示屏沒有開機界面,只會亮,請問什么情況?

可能是你沒有采用樓主的8.8版本吧 我打開和樓主的圖是一樣的
作者: ENXXXXTONEW    時間: 2022-12-3 22:32
輸入密碼的時候不會顯示星號,什么問題?跪求!


作者: Fish-LKCY    時間: 2022-12-5 15:03
非常有用,學習,收藏了,謝謝
作者: 草中蛋    時間: 2022-12-9 10:49
heicad 發表于 2022-12-3 04:43
可能是你沒有采用樓主的8.8版本吧 我打開和樓主的圖是一樣的

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

作者: 水果火師    時間: 2022-12-9 13:55
led安在哪里了請問

作者: gemxie    時間: 2023-1-9 16:31
謝謝樓主分享了,下載學習先
作者: junkwt    時間: 2024-1-4 15:33
大神寫的軟件就是好,可惜我看不懂,軟件太難了!




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线天堂视频 | 日韩中文字幕第一页 | 国产黄色免费 | 日韩在线视频免费 | 国产又黄又粗 | 日韩一区二区在线播放 | 久久久久国产一区二区三区 | 午夜网站在线观看 | 激情导航 | 一区二区三区日韩 | 在线观看黄色片 | 日韩成人在线播放 | 五月婷婷在线观看 | 天天综合天天做天天综合 | xxxx性欧美 | 看真人一级毛片 | 久久久婷 | 黄色三级视频网站 | 欧美综合在线视频 | 亚洲影院一区 | 国产一区二区三区在线视频 | 欧美福利影院 | 99九九久久| 久久久久女人精品毛片九一 | 久久久久久97 | 四虎在线观看 | av网站免费在线观看 | 欧美一级在线视频 | 免费91 | 特黄aaaaaaaaa真人毛片 | 久久成人精品 | 国产黄视频在线观看 | 久久久久久九九九九 | 国产日韩视频 | 欧美精品第一页 | 国产va在线观看 | 国产精品福利一区 | 深夜福利av | 国产一区精品在线观看 | 中文字幕亚洲综合 | 国产精品久久久国产盗摄 |