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

標題: 單片機電子密碼鎖Proteus仿真+程序+視頻 [打印本頁]

作者: luyuddll    時間: 2019-6-10 19:18
標題: 單片機電子密碼鎖Proteus仿真+程序+視頻
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)





3.6 開鎖機構(gòu)
在基于單片機的電子密碼鎖設計中,用戶需要輸入密碼,密碼正確則發(fā)出開鎖信號開鎖。
在這次基于單片機的電子密碼鎖設計中,通過控制蜂鳴器的發(fā)音來指示系統(tǒng)的開鎖功能。蜂鳴器是一種采用直流電壓供電的電子訊響器。圖3-9是用蜂鳴器指示的開鎖機構(gòu)仿真圖。因為在設計中是以蜂鳴器發(fā)生來指示開鎖是否成功,當密碼輸入正確時蜂鳴器響起來,代表鎖開了。
圖3-9開鎖機構(gòu)指示電路
3.7 報警機構(gòu)
在這次基于單片機的電子密碼鎖設計中,通過控制報警顯示LED來指示系統(tǒng)的報警功能。圖3-10是用基于LED的報警機構(gòu)仿真圖?刂芌ELAY輸出高低電平,即P3.4引腳,就可以控制報警顯示LED的亮滅,從而指示相關信息。
圖3-10報警機構(gòu)模擬仿真圖
當用戶輸入密碼錯誤次數(shù)達到預設警告次數(shù)時,系統(tǒng)調(diào)用報警子程序,使LED亮起來,同時禁止鍵盤輸入。
3.8 硬件綜合設計
根據(jù)電路原理,在PROTEUS中畫出各功能模塊的仿真圖,各個功能模塊驗證正確后,將所有模塊集合到一個電路設計圖中,畫出具有所有功能的總體硬件仿真圖。
待程序編寫好后,將KEIL和PROTEUS聯(lián)調(diào),觀察此電路設計圖可以知道各個功能模塊和器件的工作情況。屆時,根據(jù)實際情況可以適當修改電路圖或者程序,以達到設計的目的。

單片機源程序如下:
  1. #include<reg51.h>    //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

  2. #include"lcd1602.h"
  3. #include"i2c.h"

  4. sbit LED=P3^3;  //繼電器控制引腳
  5. sbit RELAY=P3^4;  //繼電器控制引腳
  6. sbit BUZZER=P3^5; //蜂鳴器控制引腳
  7. sbit SET=P0^7;          //設置
  8. sbit LCK=P0^6;          //關鎖

  9. #define LOCK_TIME_second 10
  10. #define SU 1/256
  11. #define GPIO_KEY P1        //4X4矩陣鍵盤輸入
  12. unsigned char KeyValue; //用來存放讀取到的鍵值
  13. unsigned char saved_Value[4]={6,7,6,7};          //初始密碼
  14. unsigned char input_Value[4];
  15. unsigned char Right_flg=0,Right_flg0=0;
  16. unsigned char set_flg=0,LOCK_flg=0;
  17. unsigned char temp00;
  18. unsigned int  time_cnt,time_remember,delay_ddll;
  19. long int DECvalue=0;

  20. //存儲芯片存儲的內(nèi)容
  21. /*===============================================
  22. 地址: 0    1    2     3    4    5      6     
  23. 數(shù)據(jù):無   密碼 密碼  密碼 密碼         無  錯誤次數(shù)
  24. =================================================*/

  25. void TimerConfiguration(void);  //定時中斷
  26. void KeyDown();                            //檢測按鍵函數(shù)
  27. void At24c02Write(unsigned char addr,unsigned char dat);
  28. unsigned char At24c02Read(unsigned char addr);

  29. //====主函數(shù)入口======
  30. void main()
  31. {
  32.    char i=0,j=0;
  33.    //unsigned char aa;
  34.    char k=0;

  35.    LcdInit();    //液晶初始化
  36.    clear_window();
  37.    TimerConfiguration();   //初始化定時器

  38.    Lcd1602_Delay1ms(5);
  39.    At24c02Write(1,6);   //初始化存儲芯片,實際電路中就不需要
  40.    At24c02Write(2,7);
  41.    At24c02Write(3,6);
  42.    At24c02Write(4,7);
  43.    At24c02Write(6,0);        ////清除錯誤輸入次數(shù)

  44.    RELAY=1;
  45.    BUZZER=1;

  46.         while(1)
  47.                 {
  48.                    KeyDown();         ////按鍵掃描

  49.                   ///===========正常輸入密碼操作======================
  50.                    if (KeyValue<=9 && !set_flg && !LOCK_flg) //有按鍵按下
  51.                    {
  52.                      input_Value[i]=KeyValue;                                                  
  53.                          if (Right_flg0)
  54.                          {  clear_window();
  55.                                  Right_flg0=0;
  56.                          }

  57.                          LcdWriteCom(0x80+i);  //顯示當前按鍵的值
  58.                          LcdWriteData('*');

  59.                          i++;
  60.                             if(i>=4)  //判斷
  61.                          {
  62.                                  Right_flg0=0;
  63.                             for (j=0;j<4;j++)
  64.                                 {
  65.                                     if (input_Value[j]!=saved_Value[j])
  66.                                            Right_flg0=1;                                
  67.                                 }
  68.                                 clear_window();
  69.                                 if(!Right_flg0)                  ////密碼輸入正確
  70.                                 {
  71.                                   BUZZER=0;         //聲音報警
  72.                                   delay_ddll = 1;
  73.                                   LcdWriteCom(0x80+i+2);
  74.                                   LcdWriteData('O');
  75.                                   LcdWriteData('K');
  76.                                   At24c02Write(6,0);        ////清除錯誤輸入次數(shù)
  77.                                 }
  78.                                 else
  79.                                 {
  80.                                   BUZZER=1;
  81.                                   LcdWriteCom(0x80+i+2);
  82.                                   LcdWriteData('E');
  83.                                   LcdWriteData('R');

  84.                                   temp00=At24c02Read(6);  ////存儲輸入錯誤次數(shù)
  85.                                   if (temp00>=2)              //連續(xù)輸入錯誤超過3次
  86.                                   {         
  87.                                     LOCK_flg=1;
  88.                                         RELAY=0;  /////指示燈起來
  89.                                         LcdWriteCom(0x80+i+2);
  90.                                     LcdWriteData('L');
  91.                                     LcdWriteData('K');                                            
  92.                                   }
  93.                                   At24c02Write(6,temp00+1);                                                            
  94.                                 }

  95.                                 i=0;                    
  96.                          }
  97.                    }
  98.                 ///===========正常輸入密碼操作 end======================


  99.                  ///===========修改密碼操作======================
  100.                    if (KeyValue<=9 && set_flg && !LOCK_flg) //有按鍵按下 KeyValue!=66
  101.                    {
  102.                          input_Value[k]=KeyValue;
  103.                         
  104.                          LcdWriteCom(0x80+k);  //顯示當前按鍵的值
  105.                          LcdWriteData('*');

  106.                           k++;
  107.                           if(k>=4)  //判斷
  108.                           {
  109.                                   if (set_flg==2)
  110.                                   {                                       
  111.                                         for (j=0;j<4;j++)
  112.                                                 {
  113.                                                   saved_Value[j]=input_Value[j];
  114.                                                   At24c02Write(j+1,saved_Value[j]);                                                                                                                                                                                                                                            
  115.                                                 }
  116.                                                 clear_window();

  117.                                                   set_flg=0;
  118.                                                 LED = 0;  //設置狀態(tài)指示燈亮起來
  119.                                                 delay_ddll =1;
  120. //                                                  LcdWriteCom(0x80+k+2);
  121. //                                                LcdWriteData('O');
  122. //                                                LcdWriteData('K');
  123.                                   }

  124.                                    if (set_flg==1)
  125.                                   {///============================================                                                                                                  
  126.                                                 Right_flg=0;
  127.                                             for (j=0;j<4;j++)
  128.                                                 {
  129.                                                   if(input_Value[j]!=saved_Value[j])
  130.                                                     Right_flg=1;                                    
  131.                                                 }
  132.                                                 clear_window();
  133.                                                 if(!Right_flg)                  ///舊密碼輸入正確
  134.                                                 {
  135.                                                   set_flg=2;         ///可以進行下一步操作                                                  
  136.                                                   LcdWriteCom(0x80+0x40);  //
  137.                                                   LcdWriteData('N');
  138.                                                   LcdWriteData('E');
  139.                                                   LcdWriteData('W');         
  140.                                                 }
  141.                                                 else
  142.                                                 {
  143.                                                   LcdWriteCom(0x80+k+2);
  144.                                                   LcdWriteData('E');
  145.                                                   LcdWriteData('R');
  146.                                                   
  147.                                                   temp00=At24c02Read(6);  ////存儲輸入錯誤次數(shù)
  148.                                                   if (temp00>=2)        
  149.                                                   {         
  150.                                                     LOCK_flg=1;
  151.                                                         RELAY=0;  /////指示燈起來
  152.                                                         LcdWriteCom(0x80+i+2);
  153.                                                     LcdWriteData('L');
  154.                                                     LcdWriteData('K');                                            
  155.                                                   }
  156.                                                   At24c02Write(6,temp00+1);                        
  157.                                                 }
  158.                                   }          ///============================================
  159.                                                                           

  160.                                 k=0;                    
  161.                          }
  162.                    }
  163.           ///===========修改密碼操作 end======================

  164.                    if (KeyValue==0x0A && !LOCK_flg)  //有按鍵按下         
  165.                    {
  166.                            clear_window();
  167.                            set_flg=1;
  168.                            LcdWriteCom(0x80+0x40);  //
  169.                            LcdWriteData('O');
  170.                            LcdWriteData('L');
  171.                            LcdWriteData('D');

  172.                             k=0;  //=================                                             
  173.                    }
  174.          ////=============############================================
  175.                    else if (KeyValue==0x0B && !LOCK_flg)  //有按鍵按下,關上鎖,清除窗口!LCK
  176.                    {        
  177.                           BUZZER=1;
  178.                           clear_window();                                             
  179.                    }
  180.                   
  181.                   if (delay_ddll)
  182.                   {
  183.                              delay_ddll++;
  184.                            if (delay_ddll>2000)
  185.                            {
  186.                                       LED = 1;
  187.                                    BUZZER = 1;
  188.                                    delay_ddll = 0;
  189.                            }
  190.                   }
  191.            ////=============================================
  192.                  Lcd1602_Delay1ms(1);

  193.                 }
  194. }


  195. /*******************************************************************************
  196. * 函 數(shù) 名         : KeyDown
  197. * 函數(shù)功能                   : 檢測有按鍵按下并讀取鍵值
  198. * 輸    入         : 無
  199. * 輸    出         : 無
  200. *******************************************************************************/
  201. void KeyDown(void)
  202. {
  203.         unsigned char a=0;
  204.                  
  205.         KeyValue=66;
  206.         GPIO_KEY=0x0f;
  207.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  208.         {
  209.                 Lcd1602_Delay1ms(10); //延時10ms進行消抖
  210.                 if(GPIO_KEY!=0x0f)    //再次檢測鍵盤是否按下
  211.                 {               
  212.                         //測試列
  213.                         GPIO_KEY=0X0F;
  214.                         switch(GPIO_KEY)
  215.                         {
  216.                                 case(0X07):        KeyValue=0;break;
  217.                                 case(0X0b):        KeyValue=1;break;
  218.                                 case(0X0d): KeyValue=2;break;
  219.                                 case(0X0e):        KeyValue=3;break;
  220.                         }
  221.                         //測試行
  222.                         GPIO_KEY=0XF0;
  223.                         switch(GPIO_KEY)
  224.                         {
  225.                                 case(0X70):        KeyValue=KeyValue;break;
  226.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  227.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  228.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  229.                         }

  230.                         while((a<250)&&(GPIO_KEY!=0xf0))         //檢測按鍵松手檢測
  231.                         {
  232.                                 Lcd1602_Delay1ms(2);
  233.                                 a++;
  234.                         }
  235.                 }
  236.         }
  237. }

  238. /*******************************************************************************
  239. * 函數(shù)名         : void At24c02Write(unsigned char addr,unsigned char dat)
  240. * 函數(shù)功能                   : 往24c02的一個地址寫入一個數(shù)據(jù)
  241. * 輸入           : 無
  242. * 輸出                  : 無
  243. *******************************************************************************/
  244. void At24c02Write(unsigned char addr,unsigned char dat)
  245. {
  246.         I2cStart();
  247.         I2cSendByte(0xa0);//發(fā)送寫器件地址
  248.         I2cSendByte(addr);//發(fā)送要寫入內(nèi)存地址
  249.         I2cSendByte(dat);        //發(fā)送數(shù)據(jù)
  250.         I2cStop();
  251. }
  252. /*******************************************************************************
  253. * 函數(shù)名         : unsigned char At24c02Read(unsigned char addr)
  254. * 函數(shù)功能                   : 讀取24c02的一個地址的一個數(shù)據(jù)
  255. * 輸入           : 無
  256. * 輸出                  : 無
  257. *******************************************************************************/
  258. unsigned char At24c02Read(unsigned char addr)
  259. {
  260.         unsigned char num;
  261.         I2cStart();
  262.         I2cSendByte(0xa0); //發(fā)送寫器件地址
  263.         I2cSendByte(addr); //發(fā)送要讀取的地址
  264.         I2cStart();
  265. ……………………

  266. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
仿真代碼.7z (398.91 KB, 下載次數(shù): 2407)
演示視頻.7z (9.91 MB, 下載次數(shù): 286)

作者: 方方    時間: 2019-6-11 16:40
好資料,51黑有你更精彩!!!
作者: 807610641    時間: 2019-6-17 09:24
能不能發(fā)個聯(lián)系方式,有問題不懂
作者: 1120440746    時間: 2019-6-17 10:22
能不能給個聯(lián)系方式

作者: aaasym    時間: 2019-7-5 16:51
如何修改為斷電記憶密碼?求大家指導
作者: ixiaozhuanlin    時間: 2019-7-11 10:16
真是太有愛了
作者: wbq13892040385    時間: 2019-10-30 17:26
萬分感謝
作者: DestinyW    時間: 2019-11-21 12:56
如果51換成stm32的有哪些地方需要改動?
作者: Easom    時間: 2019-11-21 13:32
感謝感謝,這網(wǎng)站太好用了
作者: wzbwzbwzb298739    時間: 2019-11-26 15:28
初始密碼是什么?


作者: zjhhhhh    時間: 2019-12-13 09:41
兄弟,三次密碼輸入錯誤以后就不能再輸入密碼了呀,復位鍵沒用啊
作者: 阿瓦達無法    時間: 2019-12-26 17:38
復位電路  沒有用  什么情況

作者: emlink    時間: 2019-12-27 08:27
真是太有愛了
作者: emlink    時間: 2019-12-28 09:04
感謝感謝,這網(wǎng)站太好用了
作者: abc_123456    時間: 2019-12-28 23:06
可以設置密碼位數(shù)可以讓它多幾位或者少幾位嗎
作者: 清水煮魚    時間: 2020-1-5 21:30
清水煮魚 發(fā)表于 2020-1-4 14:05
沒有黑幣呀,這上面的代碼全嗎?

請問如何將4位改成6位可以嗎?

作者: hzlbza    時間: 2020-3-15 10:38
wzbwzbwzb298739 發(fā)表于 2019-11-26 15:28
初始密碼是什么?

密碼是6767
作者: 51hei2004304    時間: 2020-4-2 15:50
感謝感謝,這網(wǎng)站太好用了
作者: 春風十里吹    時間: 2020-4-3 10:30
|一|枝|獨|秀| 發(fā)表于 2020-4-2 15:50
感謝感謝,這網(wǎng)站太好用了

好用就多上來聊聊
作者: 子不語乖乖    時間: 2020-4-3 15:55
樓主,按照你的的代碼,鍵盤鎖定之后該怎么解除鎖定啊,在找就解答
作者: 姚俊松    時間: 2020-4-7 09:12
89c51沒有IIC總線呀,只能模擬,那我要怎么實現(xiàn)呀

作者: +++++++++++    時間: 2020-6-1 10:58
春風十里吹死你 發(fā)表于 2020-4-3 10:30
好用就多上來聊聊

請問一下。上面的程序是不是不全呀。我下載了但是沒有全部源代碼
作者: 望從心    時間: 2020-6-6 10:05
666 感謝兄弟
作者: 1935501565    時間: 2020-6-8 17:18
謝謝分享,感覺受益匪淺!
作者: lll1472589    時間: 2020-6-24 15:43
問一下怎么設置讓它顯示輸入的數(shù)字呢
作者: lll1472589    時間: 2020-6-24 15:44
大神啊,怎么讓它顯示輸入的數(shù)字呢,就輸入一個顯示一個
作者: lll1472589    時間: 2020-6-24 15:46
+++++++++++ 發(fā)表于 2020-6-1 10:58
請問一下。上面的程序是不是不全呀。我下載了但是沒有全部源代碼

有的,下載的全了,你現(xiàn)在還需要嗎
作者: 我好卡    時間: 2020-6-28 12:58
啊,我輸入初始密碼6767怎么直接鎖了
作者: yoyue    時間: 2020-10-20 16:22
已下載,等有空的時候好好學習一下
作者: 906869996    時間: 2020-11-5 17:12
這主程序都辣么長?赐暧悬c暈
作者: 鐵憨憨AA    時間: 2020-11-8 12:08
找到了跟我一致想法的帖子
作者: 愛妃如此多嬌    時間: 2020-12-5 09:37
DSN文件需要什么版本proteus才能打開呀
作者: Purpose-x    時間: 2020-12-22 08:08
我確實沒想過一個鎖的程序都這么多
作者: 2633675861    時間: 2020-12-22 19:04
非常有用的程序,謝樓主分享
作者: 有魚i    時間: 2020-12-29 19:41
太棒了,就是我想要的。
作者: usaboy    時間: 2021-6-4 07:14
thank you for your sharing!
作者: adad2    時間: 2021-11-18 17:20
好資料,51黑有你更精彩!!!
作者: snsoyang    時間: 2021-11-18 19:21
aaasym 發(fā)表于 2019-7-5 16:51
斷電不能記憶密碼-有弊端!

肯定可以了,24C02可以掉電存儲啊
作者: wgaopeng    時間: 2021-11-18 21:22
好資料,51黑有你更精彩!!!
作者: 2450609732    時間: 2021-11-30 20:39
做實物的話都需要買啥哇
作者: 逍遙尊者    時間: 2021-12-7 14:00
有沒有匯編語言的

作者: 1429968322    時間: 2021-12-9 18:02
有點舊了
作者: Chen-wei    時間: 2021-12-19 09:16
看完了,沒懂
作者: zhouyutong    時間: 2022-3-15 10:22
lll1472589 發(fā)表于 2020-6-24 15:46
有的,下載的全了,你現(xiàn)在還需要嗎

可以分享一下么,我下載的好像不全誒
作者: YME    時間: 2022-4-25 19:45
有沒有實物圖正面全圖
作者: wqwqwqwrfdsd    時間: 2022-5-18 17:29
好資料,51黑有你更精彩!!!
作者: 向目標出發(fā)    時間: 2022-5-23 13:06
代碼都正確,但最后仿真運行的時候,我的LCD1602只亮但沒有顯示字,需要按鍵才顯示
我覺得應該要加一個啟動界面比較好  提示用戶輸入

作者: xingchenyzx    時間: 2022-5-24 11:29
有AD源文件嗎

作者: 1634414378    時間: 2022-6-8 15:14
DestinyW 發(fā)表于 2019-11-21 12:56
如果51換成stm32的有哪些地方需要改動?

挺多的,端口什么的
作者: 無線hi    時間: 2022-6-22 09:03
清水煮魚 發(fā)表于 2020-1-5 21:30
請問如何將4位改成6位可以嗎?

可以改,只不過程序內(nèi)部就得改東
作者: lallallala    時間: 2022-6-30 17:53
設置的密碼是多少啊
作者: Ylf@!234    時間: 2022-11-26 15:25
好資料,51黑有你更精彩!!!
作者: 墨非塵    時間: 2022-11-29 14:25
看得懂就行
作者: 墨非塵    時間: 2022-11-29 14:25
太愛啦這個代碼
作者: huanzai    時間: 2023-5-12 14:38
麻煩問一下這個代碼適用于52單片機嗎?
作者: LDD2    時間: 2023-6-2 11:16
51有你更精彩
作者: hu86    時間: 2023-6-25 10:40
好資料,51黑有你更精彩!!!
作者: hhh159357    時間: 2023-9-8 17:28
+++++++++++ 發(fā)表于 2020-6-1 10:58
請問一下。上面的程序是不是不全呀。我下載了但是沒有全部源代碼

我也是

作者: 45111565    時間: 2024-1-17 19:02
請問要下載什么東西嗎才能打開你這些
作者: MCJK    時間: 2024-12-26 19:59
寫的真好





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产男女猛烈无遮掩视频免费网站 | 99精品国产一区二区三区 | 久久99精品国产 | 国产精品久久久久久久三级 | 欧美激情精品久久久久 | www.久久 | 亚洲欧美综合 | 中文字幕在线观看一区 | 久久精品免费观看 | 啪啪毛片 | 亚洲一区二区 | 成人国产精品久久 | 欧美一级毛片在线播放 | 九九免费视频 | 337p日韩 | 激情在线视频网站 | 国产激情福利 | 国产伦精品一区二区三区高清 | 欧美日批| 亚洲一区二区国产 | 色天天综合| 久久久久一区二区 | 欧美 日韩 中文 | avmans最新导航地址 | 国产欧美日韩一区 | 中文字幕免费观看 | 在线免费91 | 美女国产| 一级无毛片 | 国产一区二区三区 | 亚洲精品在线视频 | 老司机久久 | 国内精品久久精品 | 国产91在线 | 中日 | 亚洲精品一区二三区不卡 | 一区二区三区四区免费在线观看 | 亚洲免费在线视频 | 狠狠做深爱婷婷综合一区 | 91综合网| 日日干日日操 | 羞羞视频在线观看免费观看 |