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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個基于51單片機的電子密碼設計與制作(代碼注釋,仿真都有)

[復制鏈接]
跳轉到指定樓層
樓主
在此分享一個自己原創制作的基于51單片機的電子密碼設計此電子密碼鎖的功能有:
(1)六位密碼輸入(如需修改密碼位數,請看注釋);
(2)不同的密碼權限,管理員有修改密碼,保持鎖常開,手動關鎖的功能,一般用戶沒有這些功能;
(3)定時關鎖(附件里的定時了五秒,如需修改,請看注釋);
(4)蜂鳴器報警;
(5)LCD1602顯示(有一般的并口驅動,和IIC驅動);
嗯,應該就這些。
如圖為Proteus仿真圖


嗯,電磁鎖的原理跟繼電器的差不多(我也不是太懂),仿真中就用繼電器模擬電磁鎖的開關了,亮燈表示通電,門鎖上,滅燈表示斷電,門打開。
仿真中沒有斷電保護,也就是說,斷電后,密碼回到初始狀態,修改的密碼無效。我沒有用外部的存儲器保存數據,用的是51單片機自帶的EEPROM。實現斷電保護的程序一起打包了,不過注釋掉了,因為會影響仿真,燒到硬件上的恢復一下就好。具體怎么實現斷電保護有蠻多方式,可以在51hei論壇里找找。

這是部分程序,為了方便使用,我把驅動程序分成了.c和.h文件。修改一下對應的管腳就可以使用了。
  1. #include "MAIN.h"

  2. int main(void){
  3.                
  4.         LOCK = 0;                                                              //關鎖
  5.         BUZ = 1;                                                                //關蜂鳴器
  6. //        ISP_Password_Read();                                          //從Flash或EEPROM中讀出密碼,進行初始化
  7.         init_timer();                                                            //初始化定時器
  8.         LCD_init();                                                             //顯示初始
  9.         delayms(10);                                                                                
  10.         LCD_printf(0,0,"Please input");
  11.         LCD_printf(1,0,"Password:");
  12.         BUZ_time(5);                                                       //響鳴提示可以輸入密碼

  13.         while(1){
  14.                 KEY_read();                                                //按鍵值讀取
  15.                 DISPLAY();                                                 //顯示
  16.                 BUZ_cmd();                                                //蜂鳴器響應
  17.                 PassTiem();                                                //繼電器響應
  18.         }
  19. }

  20. /****************************************
  21.                                                                               
  22.          定時計數器初始化子程序                                
  23.                                                                               
  24. *****************************************/

  25. void init_timer() {
  26.         
  27.         TMOD = 0X01;                                                  //設置T0為定時器,工作方式為1,16位定時/計數器
  28.         TH0 = TH;                                                        //設置定時器0初值,定時50ms
  29.            TL0 = TL;
  30.         EA = 1;                                                            //中斷使能開
  31.         ET0 = 1;                                                          //定時器0中開
  32.         TR0 = 0;                                                          //定時器0關                 
  33. }

  34. /****************************************
  35. *                                                                                
  36. *        定時器0中斷子程序                                       
  37. *                                                                                
  38. *****************************************/

  39. void timer_irs_0() interrupt 1{
  40.                         
  41.         if(time < hold_time) {                                        //這里設置定時為hold_time*50ms
  42.                 TH0 = TH;                                                //重新賦值50
  43.                    TL0 = TL;               
  44.                 time++;
  45.                 if(((hold_time - time) % 20) == 0){                                       //顯示剩余時間                                                
  46.                         count[0] = '0' + ((hold_time - time) / 20) /10;
  47.                         count[1] = '0' + ((hold_time - time) / 20) %10;
  48.                         LCD_printf(1,9,count);                                                
  49.                         BUZ_time(50);
  50.                         time++;                                                                      //由于響鈴50ms,計時補償
  51.                 }

  52.         }
  53.         else {
  54.                 TR0 = 0;                                                        //定時器0關
  55.                 time = 0;                                                       //溢出標志清零
  56.                 LCD_WriteCommand(0X01);                             //清屏
  57.                 delayms(10);
  58.                 LCD_printf(0,0,"Closing!");
  59.                 BUZ_time(50);                                                //響鳴提示已關鎖
  60.                 delayms(200);
  61.                 CLEAR();                                                        //清空數據
  62.                                 
  63.         }
  64.                                                    
  65. }

  66. /****************************************                                                                             
  67.         LCD顯示程序                                                      
  68.                                                                               
  69.         顯示操作信息,給用戶操作提示                                                                                                                             
  70. *****************************************/

  71. uchar DISPLAY(void){
  72.         uchar t;
  73.         if(flag_pass && flag_a){                                        //通過且為管理員,顯示Adm和剩余時間
  74.                 LCD_WriteCommand(0X01);
  75.                 delayms(10);
  76.                 LCD_printf(0,0,"Welcome,Adm!");
  77.                 LCD_printf(1,0,"Passtime:");
  78.                 return 0x00;
  79.         }
  80.         if(flag_pass && !flag_a){                                           //通過但非管理員,顯示User和剩余時間
  81.                 LCD_WriteCommand(0X01);
  82.                 delayms(10);
  83.                 LCD_printf(0,0,"Welcome,User!");
  84.                 LCD_printf(1,0,"Passtime:");
  85.                 return 0x00;
  86.         }
  87.         if(flag_error){                                                                //不通過,錯誤顯示,顯示錯誤次數
  88.                 t = '0' + flag_error_time;
  89.                 LCD_WriteCommand(0X01);
  90.                 delayms(10);
  91.                 LCD_printf(0,0,"Input,error!");
  92.                 LCD_printf(1,0,&t);
  93.                 return 0x00;
  94.         }               
  95.         if(flag_m1){                                                   //管理員按下M1/M2,顯示常開
  96.                 LCD_WriteCommand(0X01);
  97.                 delayms(10);
  98.                 LCD_printf(0,0,"Passing!");
  99.                 LCD_printf(1,0,"Hold on!");
  100.                 return 0x00;
  101.         }
  102.         if(flag_m2){
  103.                 LCD_WriteCommand(0X01);                                                //清屏
  104.                 delayms(10);
  105.                 LCD_printf(0,0,"Password Change");
  106.                 LCD_printf(1,0,"First :");
  107.                 return 0x00;        
  108.         }
  109.         if(flag_lock){
  110.                 LCD_WriteCommand(0X01);                                        //管理員按下LOCK,顯示準備關鎖
  111.                 delayms(10);
  112.                 LCD_printf(0,0,"Closing!");
  113.                 LCD_printf(1,0,"Attention!");
  114.                 return 0x00;
  115.         }
  116.         return 0x00;        
  117. }
復制代碼

嗯。我也不是什么大神,寫的東西不是那么完美,如果有什么錯誤的地方,請多多包涵,打包的文件里有程序、仿真、硬件效果圖(都是用現成的模塊制作的,非自己做板,請別嫌棄)。如何修改程序以達到相應的效果,請看注釋的內容(我能注釋的都注釋了)。


全部資料51hei下載地址:
電子密碼鎖制作.7z (1.11 MB, 下載次數: 17)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 精品 综合 精品 自拍 | 国产乱码精品一区二区三区忘忧草 | 成人黄色av网址 | 国产精品久久久久久久久久久久久 | 91亚洲精品国偷拍自产在线观看 | 日本黄视频在线观看 | 精品一区二区久久久久久久网站 | 亚洲免费精品一区 | 真人毛片| 欧美日韩18| 日本黄色免费片 | 精品视频一区二区三区在线观看 | 久久免费精彩视频 | 欧美一区二区三区日韩 | 黄色片免费在线观看 | 欧美一区中文字幕 | 午夜爱爱毛片xxxx视频免费看 | 91麻豆精品国产91久久久更新资源速度超快 | 网站国产 | 亚洲精品国产区 | 超碰在线国产 | 国产一区二区精 | 一本在线| 中日字幕大片在线播放 | 91久久精品国产91久久 | 国产精品不卡一区二区三区 | 亚洲免费一区二区 | 欧美一级精品片在线看 | 一区二区三区四区免费视频 | 91麻豆精品国产91久久久更新资源速度超快 | 久久成人av| 久久久久久久久久久久一区二区 | 丝袜 亚洲 另类 欧美 综合 | 69亚洲精品| 国产精品美女 | 免费在线视频精品 | jlzzjlzz欧美大全 | 91麻豆精品国产91久久久更新资源速度超快 | 在线一区 | 成人欧美一区二区三区在线播放 | 中文字幕不卡在线88 |