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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一種基于LCD1602和AT24C02的多功能電子密碼鎖設計(附仿真+C程序+PCB等全套資料)

  [復制鏈接]
跳轉到指定樓層
樓主
概要

多功能電子密碼鎖系統由AT89C52單片機最小系統、4×4矩陣鍵盤、LCD1602顯示、AT24C02存儲模塊以及報警系統等組成,具有設置、修改六位用戶密碼、超次報警、超次鎖定、密碼錯誤報警等功能。
設計要求
1.  本設計為了防止密碼被竊取要求在輸入密碼時在LCD屏幕上顯示*號;
2.  設計開鎖密碼位六位密碼的電子密碼鎖;
3.  能夠LCD顯示在密碼正確時顯示OPEN,密碼錯誤時顯示 ERROR,輸入密碼時顯示INPUT  PASSWORD;
4.  實現輸入密碼錯誤超過限定的三次電子密碼鎖定;
5.  4×4的矩陣鍵盤其中包括0-9的數字鍵和確認、重設、清除以及關鎖功能鍵;
6.  本產品具備報警功能,當輸入密碼錯誤時蜂鳴器響并且LED燈亮;
7.  密碼可以由用戶自己修改設定(只支持6位密碼),修改密碼之前必須再次輸入密碼,在輸入新密碼時候需要二次確認,以防止誤操作;
系統框圖


仿真電路圖






PCB原理圖



運行分析
(1)51單片機加載Lock程序的Hex文件,進行仿真運行,此時LCD顯示初始密碼輸入界面。


(2)輸入初始密碼6個0后,點擊“確認”鍵,LCD顯示Open狀態,密碼鎖打開,繼電器動作,綠色LED燈點亮,開鎖成功。




(3)重設密碼過程為:在密碼鎖開鎖成功的狀態下,即LCD顯示Open時,再次輸入6位舊密碼,點擊“確認”鍵,此時LCD顯示Set NewWord Enable,重設密碼進程激活。


(4)此時,輸入6位新密碼,點擊“重設”鍵,LCD顯示“inputagain”,再次輸入6位新密碼,點擊“重設”鍵,密碼重設成功,此時LCD顯示“ResetPassword OK”,新密碼被寫入AT24C02存儲器。即使仿真結束,或單片機復位,AT24C02存儲的密碼都不會丟失。


(5)如果忘記密碼,可輸入管理員密碼:131420,點擊“確認”鍵后,LCD顯示“Init Password”,密碼鎖密碼被重置為:000000。


(6)密碼輸入過程中,均會產生提示音。一聲提示音,表示按鍵每次的有效輸入;兩聲提示音,表示開鎖或密碼重設重置成功;三聲提示音,表示輸入錯誤等。密碼輸入錯誤3次,鍵盤被鎖死,提示音長鳴報警。


(7)開鎖成功后,可以點擊“關鎖”鍵,模擬鎖密碼關鎖,此時繼電器失電,綠色LED燈熄滅,LCD顯示密碼輸入界面。當密碼輸入過程中輸入錯誤時,可以通過“清除”清除錯誤的某位密碼數字,重新輸入即可。


程序設計
  1. voidStart(void)
  2. {
  3.     Sda=1;
  4.     Scl=1;
  5.     Nop();
  6.     Sda=0;
  7.     Nop();
  8. }
  9. voidStop(void)
  10. {
  11.     Sda=0;
  12.     Scl=1;
  13.     Nop();
  14.     Sda=1;
  15.     Nop();
  16. }
  17. voidAck(void)
  18. {
  19.     Sda=0;
  20.     Nop();
  21.     Scl=1;
  22.     Nop();
  23.     Scl=0;
  24. }
  25. voidNoAck(void)
  26. {
  27.     Sda=1;
  28.     Nop();
  29.     Scl=1;
  30.     Nop();
  31.     Scl=0;
  32. }
  33. voidSend(uchar Data)
  34. {
  35.     ucharBitCounter=8;
  36.     uchartemp;
  37.     do
  38.     {
  39.        temp=Data;
  40.        Scl=0;
  41.        Nop();
  42.        if((temp&0x80)==0x80)
  43.        Sda=1;
  44.        else
  45.        Sda=0;
  46.        Scl=1;
  47.        temp=Data<<1;
  48.        Data=temp;
  49.        BitCounter--;
  50.     }
  51.     while(BitCounter);   
  52.     Scl=0;
  53. }
  54. ucharRead(void)
  55. {
  56.     uchar temp=0;
  57.     uchar temp1=0;
  58.     uchar BitCounter=8;
  59.     Sda=1;
  60.     do
  61.     {
  62.        Scl=0;
  63.        Nop();
  64.        Scl=1;
  65.        Nop();
  66.        if(Sda)   
  67.            temp=temp|0x01;     
  68.        else   
  69.            temp=temp&0xfe;   
  70.        if(BitCounter-1)
  71.        {
  72.            temp1=temp<<1;
  73.            temp=temp1;
  74.        }
  75.        BitCounter--;
  76.     }
  77.     while(BitCounter);   
  78.     return(temp);
  79. }
  80. voidWrToROM(uchar Data[],uchar Address,uchar Num)
  81. {
  82.   uchar i;
  83.   uchar *PData;
  84.   PData=Data;
  85.   for(i=0;i<Num;i++)
  86.   {
  87.   Start();
  88.   Send(0xa0);
  89.   Ack();
  90.   Send(Address+i);
  91.   Ack();
  92.   Send(*(PData+i));
  93.   Ack();
  94.   Stop();
  95.   mDelay(20);
  96.   }
  97. }
  98. voidRdFromROM(uchar Data[],uchar Address,uchar Num)
  99. {
  100.   uchar i;
  101.   uchar *PData;
  102.   PData=Data;
  103.   for(i=0;i<Num;i++)
  104.   {
  105.   Start();
  106.   Send(0xa0);
  107.   Ack();
  108.   Send(Address+i);
  109.   Ack();
  110.   Start();
  111.   Send(0xa1);
  112.   Ack();
  113.   *(PData+i)=Read();
  114.   Scl=0;
  115.   NoAck();
  116.   Stop();
  117.   }
  118. }
  119. #defineyi 0x80
  120. #defineer 0x80+0x40
  121. voiddelay(uint xms)
  122. {
  123.     uint x,y;
  124.     for(x=xms;x>0;x--)
  125.      for(y=110;y>0;y--);
  126. }
  127. voidwrite_1602com(uchar com)
  128. {
  129.     lcd1602_rs=0;
  130.     lcd1602_rw=0;
  131.     P0=com;
  132.     delay(1);
  133.     lcd1602_en=1;
  134.     delay(1);
  135.     lcd1602_en=0; }
  136. voidwrite_1602dat(uchar dat)
  137. {
  138.     lcd1602_rs=1;
  139.     lcd1602_rw=0;
  140.     P0=dat;
  141.     delay(1);
  142.     lcd1602_en=1;
  143.     delay(1);
  144.     lcd1602_en=0;
  145. }
  146. voidlcd_init(void)
  147. {
  148.     write_1602com(0x38);
  149.     write_1602com(0x0c);
  150.     write_1602com(0x06);
  151.     write_1602com(0x01);
  152. }
  153. unsignedchar coding(unsigned char m)   
  154. {
  155.     unsigned char k;
  156.     switch(m)
  157.     {
  158.        case (0x11): k=1;break;
  159.        case (0x21): k=2;break;
  160.        case (0x41): k=3;break;
  161.        case (0x81): k='A';break;
  162.        case (0x12): k=4;break;
  163.        case (0x22): k=5;break;
  164.        case (0x42): k=6;break;
  165.        case (0x82): k='B';break;
  166.        case (0x14): k=7;break;
  167.        case (0x24): k=8;break;
  168.        case (0x44): k=9;break;
  169.        case (0x84): k='C';break;
  170.        case (0x18): k='*';break;
  171.        case (0x28): k=0;break;
  172.        case (0x48): k='#';break;
  173.        case (0x88): k='D';break;
  174.     }
  175.     return(k);
  176. }
  177. unsignedchar keynum(void)
  178. {
  179.     unsignedchar row,col,i;
  180.     P1=0xf0;
  181.     if((P1&0xf0)!=0xf0)
  182.     {
  183.         Delay5Ms();
  184.         Delay5Ms();
  185.        if((P1&0xf0)!=0xf0)
  186.        {
  187.            row=P1^0xf0;
  188.            i=0;
  189.            P1=a;   
  190.            while(i<4)
  191.            {
  192.                if((P1&0xf0)!=0xf0)
  193.                {
  194.                   col=~(P1&0xff);
  195.                   break;
  196.                }
  197.               else
  198.                {
  199.                   i++;
  200.                   P1=a;
  201.                }
  202.            }
  203.        }
  204.        else
  205.        {
  206.            return 0;
  207.        }
  208.        while((P1&0xf0)!=0xf0);
  209.        return (row|col);
  210.     }
  211.     elsereturn 0;
  212. }
  213. //=====一聲提示音,表示有效輸入=====//
  214. voidOneAlam(void)
  215. {
  216.     ALAM=0;
  217.     Delay5Ms();
  218.     ALAM=1;
  219. }
  220. //======二聲提示音,表示操作成功=====//
  221. voidTwoAlam(void)
  222. {
  223.     ALAM=0;
  224.     Delay5Ms();
  225.     ALAM=1;
  226.     Delay5Ms();
  227.     ALAM=0;
  228.     Delay5Ms();
  229.     ALAM=1;
  230. }
  231. //======三聲提示音,表示錯誤==========//
  232. voidThreeAlam(void)
  233. {
  234.     ALAM=0;
  235.     Delay5Ms();
  236.     ALAM=1;
  237.     Delay5Ms();
  238.     ALAM=0;
  239.     Delay5Ms();
  240.     ALAM=1;
  241.     Delay5Ms();
  242.     ALAM=0;
  243.     Delay5Ms();
  244.     ALAM=1;
  245. }
  246. //========顯示提示輸入========//
  247. voidDisplayChar(void)
  248. {
  249.     unsigned char i;
  250.     if(pass==1)
  251.     {
  252.        write_1602com(er);   
  253.        for(i=0;i<16;i++)
  254.        {
  255.            write_1602dat(LockOpen);        }
  256.     }
  257.     else
  258.     {
  259.        if(N==0)
  260.        {
  261.            //DisplayListChar(0,1,Error);
  262.            write_1602com(er);
  263.            for(i=0;i<16;i++)
  264.            {
  265.               write_1602dat(Error);
  266.            }
  267.        }
  268.        else
  269.        {
  270.            //DisplayListChar(0,1,start_line);
  271.            write_1602com(er);
  272.            for(i=0;i<16;i++)
  273.            {
  274.               write_1602dat(start_line);
  275.            }
  276.        }
  277.     }
  278. }
  279. //=====重置密碼=======//
  280. voidResetPassword(void)
  281. {
  282.     unsigned char i;  
  283.     unsigned char j;
  284.     if(pass==0)
  285.     {
  286.        pass=0;
  287.        DisplayChar();     
  288.        ThreeAlam();  
  289.     }
  290.     else   
  291.     {
  292.        if(ReInputEn==1)
  293.        {
  294.            if(N==6)
  295.            {
  296.               ReInputCont++;
  297.               if(ReInputCont==2)
  298.               {
  299.                   for(i=0;i<6;)
  300.                   {
  301.                      if(TempPassword==InputData)
  302.                          i++;
  303.                      else   
  304.                      {
  305.                          //DisplayListChar(0,1,Error);
  306.                          write_1602com(er);
  307.                          for(j=0;j<16;j++)
  308.                          {
  309.                             write_1602dat(Error[j]);
  310.                          }
  311.                          ThreeAlam();  
  312.                          pass=0;   
  313.                          ReInputEn=0;  
  314.                          ReInputCont=0;
  315.                          DisplayChar();
  316.                          break;
  317.                      }
  318.                   }
  319.                   if(i==6)
  320.                   {
  321.                      //DisplayListChar(0,1,ResetOK);
  322.                      write_1602com(er);
  323.                      for(j=0;j<16;j++)
  324.                      {
  325.                          write_1602dat(ResetOK[j]);  
  326.                      }
  327.                      TwoAlam();
  328.                       WrToROM(TempPassword,0,6);
  329.                      ReInputEn=0;
  330.                   }
  331.                   ReInputCont=0;
  332.                   CorrectCont=0;
  333.               }
  334.               else   
  335.               {
  336.                   OneAlam();
  337.                   //DisplayListChar(0, 1,again);
  338.                   write_1602com(er);
  339.                   for(j=0;j<16;j++)
  340.                   {
  341.                      write_1602dat(again[j]);
  342.                   }                 
  343.                   for(i=0;i<6;i++)
  344.                   {
  345.                      TempPassword=InputData;
  346.                   }
  347.               }
  348.            N=0;
  349.          }
  350.         }
  351.     }
  352. }
復制代碼

全套資料分享如下

附件:
內容不完整 已刪除

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:390496 發表于 2019-9-10 15:08 | 只看該作者
在哪里啊
回復

使用道具 舉報

板凳
ID:79874 發表于 2019-12-30 15:05 | 只看該作者
下載不了了哥們再傳一份呢啥
回復

使用道具 舉報

地板
ID:406001 發表于 2020-1-14 17:05 | 只看該作者
哥哥 再傳一下啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美中文字幕在线观看 | 中文字幕免费在线观看 | 99久久精品国产一区二区三区 | 美女黄网 | 亚洲成人免费网址 | 伊人免费在线观看高清 | 日韩a v在线免费观看 | 中文天堂在线观看 | 精品在线观看一区二区 | 四虎影视在线 | 精品国产乱码久久久久久牛牛 | 成人性生交大片免费看中文带字幕 | 午夜爽爽男女免费观看hd | 欧美午夜一区二区三区免费大片 | 9色视频在线| 国产高清免费在线 | 成人黄色av网址 | 亚洲成人一区二区 | 一级片免费在线观看 | 奇米影视77| 影音先锋中文在线 | 欧美日韩一区在线 | av中文字幕在线 | 亚洲欧美综合精品久久成人 | 在线欧美日韩 | 黄网站在线播放 | 国产永久免费 | 久久久久久网 | 69亚洲精品 | 欧美一区在线视频 | 久久综合狠狠综合久久综合88 | 亚洲成人av | 91在线区| 成人精品免费 | 四虎影视免费观看 | 奇米久久 | 在线观看av网站永久 | 亚洲国产精品成人无久久精品 | 国产精品免费一区二区三区四区 | 成人av观看| 国产精品久久久久久久一区探花 |