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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子密碼鎖電路程序帶仿真,調試通過lcd1602+24C02

  [復制鏈接]
跳轉到指定樓層
樓主
調試通過,,,電子密碼鎖,,,資料,,,,分享
lcd1602液晶屏顯示 并且用24c02保存數據

仿真圖 電路圖(proteus仿真文件可以從51黑本貼附件下載)


全部資料(壓縮包)下載:
密碼鎖單片機源程序仿真.zip (128 KB, 下載次數: 383)



S0-S9為密碼數字鍵;
S10為刪除鍵,刪除上一次輸入的數字;
S11為清除鍵,清除所有輸入的數字;
S12為確認鍵,輸入密碼后按確認鍵確認密碼是否輸入正確;
S13為密碼修改鍵。
S1-S10鍵按下5秒后,沒有其他鍵按下,則發出報警聲,聲音持續10s;
輸入密碼后按確認鍵,若密碼正確,則綠燈亮,否則則紅燈亮。

下面是部分程序預覽(完整版本請下載本帖附件):
  1. //S1-S9為數字密碼輸入鍵0-9
  2. //S10-S13為功能鍵
  3. //S10為單個數字刪除鍵,S11為所以數字清除鍵,S12為密碼確認鍵,S13為修改密碼鍵
  4. #include<reg52.h>   //包含頭文件
  5. #include"IIC.h"     //包含IIC總線頭文件
  6. #include"1602.h"    //包含1602頭文件
  7. #include"keyboard.h"    //包含鍵盤掃描頭文件

  8. sbit led_red=P2^5;  //位定義綠燈,密碼輸入正確時顯示
  9. sbit led_gre=P2^6;  //位定義紅燈,密碼輸入錯誤時顯示
  10. sbit spk=P2^7;

  11. uchar ASC[]={'0','1','2','3','4','5','6','7','8','9'};  //將數字轉換成字符型數據供1602顯示

  12. uchar one=0,two=1,three=2,four=3;      //初始密碼0123

  13. uint t0,t1;     //定時器0、1分別溢出的次數

  14. void Init_time0(void)   //定時器0初始化函數   
  15. {
  16.     TMOD=0x11;
  17.     TH0=(65535-50000)/256;
  18.     TL0=(65535-50000)%256;
  19.     TH1=(65535-2000)/256;
  20.     TL1=(65535-2000)%256;
  21.     EA=1;
  22.     ET0=1;
  23.     ET1=1;
  24.     TR0=0;
  25.     TR1=0;
  26. }

  27. void main(void)     //主函數
  28. {
  29.     uchar flag=0,cflag=0;
  30. //flag、cflag分別為修改密碼標志和修改密碼時初始密碼輸入正確標志(輸入新密碼標志)
  31.     uchar i=0,k=0;
  32. //i為輸入密碼時輸入數字密碼的個數
  33. //k為修改密碼時輸入數字密碼的個數
  34.     uchar j=0,t=0,shu=1;
  35. //j用于for循環中判斷輸入密碼和存儲密碼對比
  36. //t=0為進入修改密碼狀態,只要是為了修改密碼時的初始顯示
  37. //shu用于輸入新密碼時,四位密碼的地址
  38.     uchar num,newpassword[4];
  39. //num為按鍵值,newpassword數組存放每次輸入的數字密碼S0-S13和0-13對應
  40.     Init_IIC();     //初始化IIC
  41.     Init_1602();    //初始化1602
  42.     Init_time0();   //初始化定時器0

  43.     led_red=0;      //熄滅綠燈和紅燈
  44.     led_gre=0;
  45.     spk=0;

  46.     write_add(1,one);   //寫入初始密碼0123到E2PROM
  47.     delay_ms(5);
  48.     write_add(2,two);
  49.     delay_ms(5);
  50.     write_add(3,three);
  51.     delay_ms(5);
  52.     write_add(4,four);
  53.     delay_ms(5);

  54.     displaylistchar(0,0,"Input Password:");     //1602初始化后顯示Input Password:

  55.     while(1)
  56.     {
  57. /*檢測是否有按鍵按下,若沒有則不停掃描*/
  58.         num=KeyPro();   //掃描按鍵

  59.         if(num!=0xff)   //如果有鍵按下
  60.         {
  61. /*******************************************************************************************/
  62. /*輸入密碼*/
  63.             if((num!=13)&&(flag==0))    //S13為修改密碼鍵,flag為修改密碼標志,flag=1時修改密碼,判斷是否修改密碼
  64.             {
  65.                 displaylistchar(0,0,"Input Password:");

  66.                 if(num>=0&&num<=9)  //如果是0-9按下,則輸入0-9并在液晶上顯示0-9
  67.                 {
  68.                     TR0=~TR0;   //若按鍵后五秒內沒有打開鎖,則報警
  69.                     t0=0;
  70.                     displayonechar(i,1,ASC[num]);   //顯示輸入的數字密碼
  71.                     newpassword[i++]=num;        
  72.                 }
  73.    
  74.                 if(num==10)     //如果10按下,在有數字輸入的情況下刪除上次輸入的數字
  75.                 {
  76.                     TR0=~TR0;   //若按鍵后五秒內沒有打開鎖,則報警
  77.                     t0=0;
  78.                     if(i>0)
  79.                     {
  80.                         i=i-1;
  81.                         displayonechar(i,1,' ');
  82.                     }
  83.                 }
  84.    
  85.                 if(num==11)     //如果是11按下,清除所有輸入的數據,重新輸入
  86.                 {
  87.                     TR0=0;
  88.                     i=0;
  89.                     displaylistchar(0,1,"                ");//清除該行
  90.                 }
  91.    
  92.                 if(num==12)     //確認鍵,如果密碼正確,則綠燈亮紅燈熄,否則則紅燈亮綠燈熄
  93.                 {
  94.                     TR0=0;
  95.                     if(i==4)    //四位密碼,所以只在輸入四個密碼的情況下檢測密碼是否正確
  96.                     {
  97.                         for(j=0;j<4;j++)
  98.                         {
  99.                             if(newpassword[j]!=read_add(j+1))   //輸入的密碼和存儲的密碼對比,若有一個錯誤,則跳出密碼對比
  100.                                 break;
  101.                         }
  102.                         if(j==i)    //若j=i成立,則密碼正確
  103.                         {                                               
  104.                             led_gre=1;  //亮綠燈
  105.                             led_red=0;
  106.                             displaylistchar(0,1,"Right Open!");     //顯示輸入正確
  107.                             delay_ms(1000);
  108.                             i=0;    //按鍵輸入數置0
  109.                             displaylistchar(0,1,"                ");//清除該行
  110.                         }
  111.                         else        //若不成立則密碼不正確
  112.                         {
  113.                             led_gre=0;      //亮紅燈
  114.                             led_red=1;
  115.                             displaylistchar(0,1,"Wrong Retry!");     //顯示輸入錯誤
  116.                             delay_ms(1000);
  117.                             i=0;    //按鍵輸入數置0
  118.                             displaylistchar(0,1,"                ");//清除該行
  119.                         }
  120.                     }

  121.                     else        //若按鍵輸入數i不等于4,則密碼肯定錯誤
  122.                     {
  123.                         led_gre=0;      //亮紅燈
  124.                         led_red=1;
  125.                         displaylistchar(0,1,"Wrong Retry!");        //顯示輸入錯誤
  126.                         delay_ms(1000);
  127.                         i=0;     //按鍵輸入數置0
  128.                         displaylistchar(0,1,"                ");//清除該行
  129.                     }
  130.                 }
  131.    
  132.                 if(i==6)    //虛設六位密碼,數字按鍵輸入六次后還沒有按確定的話,則提示密碼錯誤
  133.                 {
  134.                     TR0=0;
  135.                     led_gre=0;        //亮紅燈
  136.                     led_red=1;
  137.                     displaylistchar(0,1,"Wrong Retry!");        //顯示輸入錯誤
  138.                     delay_ms(1000);
  139.                     i=0;       //按鍵輸入數置0
  140.                     displaylistchar(0,1,"                ");//清除該行
  141.                 }
  142.             }
  143. /*******************************************************************************************/
  144. /*******************************************************************************************/
  145. /*修改密碼*/
  146.             else               //有S13鍵按下或修改密碼標志flag置1
  147.             {
  148.                 if(cflag==0)    //修改密碼時初始密碼輸入正確標志cflag置0時為輸入初始密碼檢測狀態,類似前面的密碼輸入   
  149.                 {
  150.                     i=0;        //按鍵輸入數置0
  151.                     flag=1;     //S13鍵按下,修改密碼標志置1
  152.                     if(t==0)    //t=0為進入修改密碼狀態,只要是為了修改密碼時的初始顯示
  153.                     {
  154.                         displaylistchar(0,0,"Change Password:");
  155.                         delay_ms(500);
  156.                         displaylistchar(0,1,"Old Password:");
  157.                         delay_ms(500);     
  158.                         displaylistchar(0,1,"                ");//清除該行
  159.                     }
  160.                     t++;        //正在修改密碼狀態,則不用再次進入修改密碼狀態
  161.                     if(num>=0&&num<=9)  //如果是0-9按下,則輸入0-9并在液晶上顯示0-9
  162.                     {
  163.                         TR0=~TR0;   //若按鍵后五秒內沒有打開鎖,則報警
  164.                         t0=0;
  165.                         displayonechar(k,1,ASC[num]);
  166.                         newpassword[k++]=num;        
  167.                     }
  168.         
  169.                     if(num==10)     //單個密碼刪除鍵,和輸入密碼時一樣
  170.                     {
  171.                         TR0=~TR0;   //若按鍵后五秒內沒有打開鎖,則報警
  172.                         t0=0;
  173.                         if(k>0)
  174.                         {
  175.                             k=k-1;
  176.                             displayonechar(i,1,' ');
  177.                         }
  178.                     }
  179.         
  180.                     if(num==11)     //所以密碼清除鍵,和輸入密碼時一樣
  181.                     {
  182.                         TR0=0;
  183.                         k=0;
  184.                         flag=0;
  185.                         displaylistchar(0,1,"                ");//清除該行
  186.                     }  
  187.    
  188.                     if(num==12)     //確認鍵,和輸入密碼時一樣
  189.                     {
  190.                         TR0=0;
  191.                         if(k==4)
  192.                         {
  193.                             for(j=0;j<4;j++)
  194.                             {
  195.                                 if(newpassword[j]!=read_add(j+1))
  196.                                     break;
  197.                             }
  198.                             if(j==k)        //若初始密碼輸入正確后提示輸入新密碼,并將輸入新密碼標志cflag置1
  199.                             {                                               
  200.                                 led_gre=1;
  201.                                 led_red=0;
  202.                                 displaylistchar(0,1,"Right Open!");
  203.                                 delay_ms(500);
  204.                                 displaylistchar(0,1,"                ");//清除該行
  205.                                 displaylistchar(0,1,"New Password:");
  206.                                 delay_ms(500);
  207.                                 displaylistchar(0,1,"                ");//清除該行
  208.                                 k=0;
  209.                                 cflag=1;
  210.                             }
  211.                             else        //若輸入錯誤,則跳出密碼修改,flag=0
  212.                             {
  213.                                 led_gre=0;
  214.                                 led_red=1;
  215.                                 displaylistchar(0,1,"Wrong Retry!");
  216.                                 delay_ms(1000);
  217.                                 k=0;
  218.                                 flag=0;
  219.                                 displaylistchar(0,1,"                ");//清除該行
  220.                                 displaylistchar(0,0,"                ");//清除該行
  221.                                 displaylistchar(0,0,"Input Password:");
  222.                             }
  223.                         }
  224.                         else    //修改密碼時輸入原密碼數不等于4,顯然密碼錯誤,跳出密碼修改
  225.                         {
  226.                             led_gre=0;
  227.                             led_red=1;
  228.                             displaylistchar(0,1,"Wrong Retry!");
  229.                             delay_ms(1000);
  230.                             k=0;
  231.                             flag=0;
  232.                             displaylistchar(0,1,"                ");//清除該行
  233.                             displaylistchar(0,0,"                ");//清除該行
  234.                             displaylistchar(0,0,"Input Password:");
  235.    
  236.                         }
  237.                     }
  238.                     if(k==6)    //數字按鍵輸入六次后還沒有按確定的話,則提示密碼錯誤 ,跳出密碼修改
  239.                     {
  240.                         TR0=0;
  241.                         led_gre=0;
  242.                         led_red=1;
  243.                         displaylistchar(0,1,"Wrong Retry!");
  244.                         delay_ms(1000);
  245.                         k=0;
  246.                         flag=0;
  247.                         displaylistchar(0,1,"                ");//清除該行
  248.                         displaylistchar(0,0,"                ");//清除該行
  249.                         displaylistchar(0,0,"Input Password:");
  250.                     }
  251.                 }   
  252.                 else        //輸入新密碼標志置1,輸入新密碼并顯示新輸入的密碼
  253.                 {
  254.                     if(num>=0&&num<=9)
  255.                     {
  256.                         write_add(shu,num);
  257.                         displayonechar(shu-1,1,ASC[num]);
  258.                         shu++;
  259.                         if(shu==5)
  260.                         {
  261.                             t=0;
  262.                             shu=1;
  263.                             cflag=0;
  264.                             flag=0;
  265.                             displaylistchar(0,1,"Change Success!");
  266.                             delay_ms(500);
  267.                             displaylistchar(0,0,"                ");//清除該行
  268.                             displaylistchar(0,1,"                ");//清除該行
  269.                             displaylistchar(0,0,"Input Password:");
  270.                         }
  271.                     }
  272.                 }                 
  273.             }

  274.         }
  275.                     
  276.     }
  277. }

  278. void time0(void) interrupt 1
  279. {
  280.     TH0=(65535-50000)/256;
  281.     TL0=(65535-50000)%256;
  282.     t0++;
  283.     if(t0==100)
  284.     {
  285.         t0=0;
  286.         TR0=0;
  287.         TR1=1;      
  288.     }
  289. }

  290. void time1(void) interrupt 3
  291. {
  292.     TH1=(65535-2000)/256;
  293.     TL1=(65535-2000)%256;
  294.     t1++;
  295.     spk=~spk;
  296.     if(t1==5000)
  297.     {
  298.         t1=0;
  299.         TR1=0;
  300.     }
  301. }

復制代碼


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

使用道具 舉報

沙發
ID:75472 發表于 2016-12-20 11:25 | 只看該作者
還差1分 才能下
回復

使用道具 舉報

板凳
ID:89286 發表于 2017-2-28 09:17 | 只看該作者
thanks for sharing
回復

使用道具 舉報

地板
ID:89286 發表于 2017-2-28 09:21 | 只看該作者
thanks for sharing
回復

使用道具 舉報

5#
ID:183867 發表于 2017-3-27 17:12 | 只看該作者

thanks for sharing
回復

使用道具 舉報

6#
ID:202896 發表于 2017-5-21 10:23 | 只看該作者
下載不了
回復

使用道具 舉報

7#
ID:234518 發表于 2017-11-20 15:17 | 只看該作者
謝謝分享!不過積分不夠~~~
回復

使用道具 舉報

8#
ID:339176 發表于 2018-5-28 06:11 | 只看該作者
下載不了,求補附件
回復

使用道具 舉報

9#
ID:346735 發表于 2018-6-7 10:57 | 只看該作者
不錯我可以學習到真正意義上的知識了
回復

使用道具 舉報

10#
ID:7922 發表于 2018-6-7 18:01 | 只看該作者

thanks for sharing
回復

使用道具 舉報

11#
ID:138664 發表于 2018-7-18 16:01 | 只看該作者
學習下24c02存儲程序
回復

使用道具 舉報

12#
ID:216962 發表于 2018-10-9 15:36 | 只看該作者
多謝。。。。。。。
回復

使用道具 舉報

13#
ID:222956 發表于 2018-10-12 18:08 | 只看該作者
很好謝謝
回復

使用道具 舉報

14#
ID:304790 發表于 2018-12-30 22:54 | 只看該作者
樓主厲害
回復

使用道具 舉報

15#
ID:465706 發表于 2019-1-10 12:23 | 只看該作者
還差點分,加油
回復

使用道具 舉報

16#
ID:477709 發表于 2019-2-27 11:59 | 只看該作者
這是六位密碼嗎,有仿真的圖和程序的嗎
回復

使用道具 舉報

17#
ID:865733 發表于 2020-12-22 19:32 | 只看該作者

學習24c02存儲程序
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美精品 | 金莲网 | 黄色视频a级毛片 | 91大神xh98xh系列全部 | 日韩一区二区三区精品 | 日韩一区三区 | 成人精品在线观看 | 国产成人精品一区二区三区视频 | 亚洲一区二区三区免费在线 | 成人 在线| 在线中文字幕亚洲 | 日批免费看 | 一区二区在线免费观看视频 | 亚洲视频在线观看 | 国产精品99久久久久久久久 | 综合精品久久久 | 日韩午夜 | 精品久久久久久久久亚洲 | 国产99精品 | 每日在线更新av | 国产一二区视频 | 久久久精品一区二区三区 | 夜夜夜久久 | 偷拍自拍在线观看 | 成人在线免费观看 | 亚洲欧美一区二区三区视频 | 欧美精品一区二区免费 | 性在线| 黄色片在线免费看 | 精品一区二区在线观看 | 久久男人天堂 | 国产欧美精品一区 | 日韩av在线免费 | 国产精品日韩在线 | 中文字幕91av | 日韩精品免费看 | 成人激情免费视频 | 最新中文字幕一区 | 久久成人精品视频 | 亚洲一区中文 | 亚洲欧美在线观看 |