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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機+LCD1602電子密碼鎖程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:539683 發表于 2019-5-16 11:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于51電路板 電子密碼鎖程序

24c02采用IIC與單片機通信,其詳細通信時序參考24C02數據手冊。我們只需使用At24c02Read(unsigned char addr)和At24c02Write(unsigned char addr,unsigned char dat)即可。

一、        實驗現象
將線連接好并將程序下載后,可以看到1602上顯示:
              
此時可以按下任意鍵繼續
在這里我們可以“1”或“9”選擇開鎖或者是修改密碼。如果這里選擇的開鎖,按下確定鍵,此時會提示輸入密碼,初始密碼默認為888888,輸入密碼
然后按下確定鍵,如果密碼正確則會顯示:
并且可以看到繼電器模塊指示燈亮并可以聽到繼電器閉合的聲音。
如果密碼錯誤則會提示:Error.



  如果需要修改密碼,則選擇Change password
這里會提示輸入密碼:
輸入原密碼
按下確認鍵,如果密碼正確會提示輸入新密碼,
輸入密碼后按下確認鍵,會提示OK并返回到待機畫面。

單片機源程序如下:
  1. /**************************************************************************************
  2. *                              電子密碼鎖                                                                                                  *
  3. 實現現象:下載程序輸入正確密碼,會聽到繼電器吸合的聲音
  4. 硬件連接:
  5.            P1 -->矩陣鍵盤
  6.                                          P20--> EEPROM模塊SDA
  7.                                          P21--> EEPROM模塊SCL
  8.                                          P22-->繼電器模塊J15
  9.                                          
  10.                                          矩陣鍵盤:
  11.                                          0      1      2       3
  12.                                          
  13.                                          4      5      6       7
  14.                                          
  15.                                          8      9    返回    確定
  16.                                          
  17.                                          [        DISCUZ_CODE_22        ]nbsp;     [        DISCUZ_CODE_22        ]nbsp;     [        DISCUZ_CODE_22        ]nbsp;      $
  18. 注意事項:無                                                                                                                                                                  
  19. ***************************************************************************************/

  20. #include "reg52.h"                       //此文件中定義了單片機的一些特殊功能寄存器
  21. #include "lcd.h"
  22. #include "key.h"
  23. #include "i2c.h"

  24. #define u16 unsigned int           //對數據類型進行聲明定義
  25. #define u8 unsigned char

  26. sbit AS=P2^2;               //繼電器

  27. /*****************************************************************************/

  28. /*****************************************************************************/
  29. u8 pw_num,Error_Num,PassWord_Length=6;
  30. u8 PASSWORD[]={8,8,8,8,8,8,0,0,0,0};
  31. u8 INPUT_PW_Tab[10];
  32. u8 key_num,Step,Step5,Load_first_flag=0;
  33. /*****************************************************************************/

  34. /*******************************************************************************/
  35. bit result_flag,Input_suc_flag;
  36. bit List1=0;
  37. /*****************************************************************************/

  38. /*******************************************************************************/
  39. void Step_0();
  40. void Step_1();
  41. void Step_2();
  42. void Step_3();
  43. void Step_4();
  44.          
  45. void Step_5();
  46.                  void Step5_0();
  47.            void Step5_1();
  48.            void Step5_2();
  49.            void Step5_3();
  50.            void Step5_4();
  51.            void Step5_5();
  52. void Step_6();
  53. /********************************************************************************/

  54. /*******************************************************************************/
  55. void CipherComparison();
  56. void input_password(bit m);
  57. void Read_Password();



  58. /*******************************************************************************
  59. * 函 數 名       : main
  60. * 函數功能                 : 主函數
  61. * 輸    入       : 無
  62. * 輸    出             : 無
  63. *******************************************************************************/
  64. void main()
  65. {        
  66.         u8 data1,a;
  67.         //        ShowString(0x00," Pechin Science ");  
  68.         //        At24c02Write(0,0);                                                //開機顯示密碼
  69.         LcdWriteCom(0x01);  //清屏
  70.         for(data1=0;data1<PassWord_Length+2;data1++)
  71.         {
  72.                 a=At24c02Read(data1)+0x30;
  73.                  LcdWriteData(a);        
  74.           delay(1000);        
  75.   }
  76.         
  77.         delay(1000);
  78.         LcdInit();
  79.         delay(1000);
  80.         Step=0;
  81.         Step5=0;
  82.         Error_Num=0x00;
  83.   Read_Password();
  84.         
  85.     //保存 密碼長度
  86. //                for(j=0;j<10;j++)
  87. //                {
  88. //                        At24c02Write(j,j);
  89. //                        delay(100);        
  90. //                }
  91. //        

  92.         
  93.         while(1)
  94.                                 {        
  95.                                                                 key_num=KeyDown();                   //讀取輸入值

  96.                                                                                 switch(Step)
  97.                                                                                 {
  98.                                                                                                 case 0:
  99.                                                                                                  {Step_0();break;}
  100.                                                                                                 case 1:
  101.                                                                                                  {Step_1();break;}
  102.                                                                                                 case 2:
  103.                                                                                                  {Step_2();break;}
  104.                                                                                                 case 3:
  105.                                                                                                  {Step_3();break;}        
  106.                                                                                                 case 4:
  107.                                                                                                  {Step_4();break;}        
  108.                                                                                                 case 5:
  109.                                                                                                  {Step_5();break;}        
  110.                                                                                                 case 6:
  111.                                                                                                  {Step_6();break;}        
  112.                                                                                                   
  113.                                                                                 }

  114.                                  }                                
  115. }

  116. /*****************************************************************************/

  117. /*******************************************************************************/
  118. void Step_0()
  119. {
  120.                                         LcdInit();
  121.                                         ShowString(0x00," Pechin Science ");                           //第一行顯示Pechin Science
  122.                 ShowString(0x10,"    WELCOME!    ");                           // 第二行顯示 WELCOME!  
  123.         
  124.                                         while(KeyDown()==0xff)Step=1;                                  //  有按鍵按下進入下一步  
  125.               
  126.                                        
  127. }
  128. /*****************************************************************************/

  129. /*******************************************************************************/
  130. void Step_1()
  131. {
  132.                 LcdWriteCom(0x01);                                           //清屏
  133.           ShowString(0x00,"Unlock");
  134.                 ShowString(0x0f,"<");                                               //1602第一行顯示unlock
  135.           ShowString(0x10,"Change Password");
  136.                 ShowString(0x1f," ");                                                // 1602第二行顯示Change Password                                                                                    
  137.           Step=2;                                                              //
  138. }
  139. /*****************************************************************************/

  140. /*******************************************************************************/
  141. void Step_2()
  142. {

  143.         if(key_num!=0x0b)  
  144.                 {
  145.                                         if((key_num==0x01) ||( key_num==0x09))                    //1鍵或9鍵按下
  146.                                         {
  147.                                                                 List1=~List1;                           //Change Password
  148.                                                                 if(List1==0)
  149.                                                                         {                                                  
  150.                                                                         ShowString(0x0f,"<");                           // Unlock            <
  151.                                                                         ShowString(0x1f," ");                                  // Change Password  
  152.                                                                 }
  153.                                                                 else
  154.                                                                 {
  155.                                                                         ShowString(0x0f," ");                           // Unlock            
  156.                                                                         ShowString(0x1f,"<");                                  // Change Password   <
  157.                                                                 }
  158.                                         }
  159.                 }
  160.         else                                                           //確認鍵按下
  161.         {
  162.                                         if(List1==0){Step=3;}
  163.                                         else        {Step=5;List1=0;}
  164.         }
  165. }
  166. /*****************************************************************************/

  167. /*******************************************************************************/
  168. void Step_3()                                             //
  169. {
  170.                                                                 Step=4;
  171.                       pw_num=0;
  172.                                                                 LcdInit();
  173.                                                                 ShowString(0x00,"Pass Word:  ");
  174.                
  175.                                                 
  176. }
  177. /*****************************************************************************/

  178. /*******************************************************************************/
  179. void Step_4()                                                
  180. {
  181.            input_password(0);                                              //輸入密碼并以*顯示
  182.            if(Input_suc_flag==1){Step=6;}                                  //密碼輸入完成進入下一步
  183.       Input_suc_flag=0;                                              //清除密碼輸入完成標志
  184. }
  185. /*****************************************************************************/

  186. /*******************************************************************************/
  187. void Step_5()                                                        //修改密碼
  188. {
  189.         switch(Step5)
  190.         {
  191.                
  192.                         case 0: {Step5_0();}  break;
  193.                         case 1: {Step5_1();}  break;
  194.                         case 2: {Step5_2();}  break;
  195.                         case 3: {Step5_3();}  break;
  196.                   case 4: {Step5_4();}  break;
  197.                         case 5:        {Step5_5();}        break;

  198.         }
  199. }
  200. /*****************************************************************************/

  201. /*******************************************************************************/
  202. void Step_6()
  203. {
  204.         CipherComparison();                                //密碼比對
  205.         if(result_flag==1)                                 //密碼正確
  206.                 {
  207.                                 LcdInit();
  208.                                 ShowString(0x00,"    WELCOME!");
  209.                                 AS=0;                                         //開繼電器
  210.                                 delay(60000);
  211.                                 delay(60000);
  212.                                 AS=1;                                                //關繼電器
  213.                 }
  214.         else                                                //密碼錯誤
  215.                 {
  216.                                 LcdInit();
  217.                                 ShowString(0x00,"Error 01!");
  218.                 }
  219.                
  220.                 Step=0;
  221.         

  222. }

  223. /****************************************************************************************
  224. 密碼輸入函數
  225. 密碼長度:pw_num
  226. 密碼輸入完成標志:Input_suc_flag
  227. *****************************************************************************************/

  228. void Step5_0()                 
  229. {
  230.                 LcdWriteCom(0x01);  //清屏
  231.           ShowString (0x00,"Input PassWord:");     //1602顯示:輸入密碼
  232.           Step5=1;
  233.           pw_num=0;
  234. }
  235. void Step5_1()               
  236. {
  237.                 input_password(0);                  //   輸入密碼并以*顯示
  238.                 if(Input_suc_flag==1)               //密碼輸入完成
  239.                         {
  240.                                                         Step5=2;                  //
  241.                                                         Input_suc_flag=0;         //清除密碼輸入完成標志
  242.                         }
  243. }
  244. void Step5_2()                //
  245. {
  246.      CipherComparison();                //密碼比對
  247.            Step5=3;
  248. }
  249. void Step5_3()                //
  250. {
  251.     if(result_flag==0)         //        密碼錯誤
  252.                                 {
  253.                                                         if(Error_Num<3)             //輸出錯誤次數小于3
  254.                                                         {
  255.                                                                 Error_Num++;
  256.                                                                 LcdInit();
  257.                                                                 ShowString (0x00,"Error 01");
  258.                                                                 delay(20000);
  259.                                                                 Step5=0;
  260.                                                         }
  261.                                                         else                          //密碼錯誤次數大于3
  262.                                                         {
  263.                                                                 Error_Num=0;
  264.                                                                 Step=0;
  265.                                                         }
  266.                                        
  267.                                 }
  268.                 else                                                                                                     //密碼正確
  269.                                 {
  270.                                         LcdInit();
  271.                                         ShowString (0x00,"New PassWord:");        
  272.                                         pw_num=0;
  273.                                         Step5=4;
  274.                                 }
  275.                         
  276.                                        
  277. }
  278. void Step5_4()
  279. {
  280.                 input_password(1);                                                    //輸入密碼并顯示
  281.                 if(Input_suc_flag==1)                  //輸入完成
  282.                         {
  283.                                 Step5=5;
  284.                                 Input_suc_flag=0;
  285.                                 LcdWriteCom(0x01);  //清屏
  286.               ShowString (0x00,"      OK!");
  287.                         }
  288. }
  289. void Step5_5()
  290. {
  291.         unsigned char j;
  292.         
  293.         PassWord_Length=pw_num;                         //讀取輸入密碼長度
  294.         At24c02Write(0,Load_first_flag);        
  295.   delay(100);        
  296.         At24c02Write(1,PassWord_Length);                //保存 密碼長度
  297.         delay(100);
  298.         for(j=0;j<PassWord_Length;j++)         
  299.         {
  300.                 PASSWORD[j]=INPUT_PW_Tab[j];                                //讀取密碼
  301.                 At24c02Write(j+2,INPUT_PW_Tab[j]);                          //保存密碼至EEPROM
  302.                 delay(100);
  303. }
  304.         Step5=0;
  305.         Step=0;
  306. }


  307. void Read_Password()
  308. {
  309.         unsigned char j;

  310.         Load_first_flag=At24c02Read(0x00);
  311.         if(Load_first_flag==0)                          //初次運行
  312.         {
  313.         
  314.                 Load_first_flag=1;
  315.                 At24c02Write(0,0x01);
  316.                 delay(100);
  317.                 At24c02Write(1,0x06);           //寫默認密碼長度6至EEPROM
  318.                 delay(100);
  319.                 for(j=0;j<PassWord_Length;j++)
  320.                 {
  321.                         At24c02Write(j+2,8);              //寫默認密碼888888至EEPROM
  322.                         PASSWORD[j]=INPUT_PW_Tab[j];     //讀密碼
  323.                         delay(100);
  324.                 }
  325.         }
  326.         
  327.         Load_first_flag=At24c02Read(0x00);
  328.         PassWord_Length=At24c02Read(0x01);  //讀取密碼長度
  329.         for(j=0;j<PassWord_Length;j++)       //讀取密碼
  330.         {
  331.                 PASSWORD[j]=At24c02Read(j+2);
  332.         }
  333.         
  334. }
  335. void input_password(bit m)
  336. {
  337.         unsigned char j;
  338.         if(key_num!=0x0b)                                      //ok鍵沒有按下
  339.                 {
  340.                                         if(key_num<0x0a)                               //1-9按下
  341.                                         {
  342.                                                 INPUT_PW_Tab[pw_num]=key_num;                //保存至輸入密碼數組
  343.                                                 pw_num=pw_num+1;                              //密碼長度+1
  344.                                                 
  345.                                                  LcdWriteCom(0xc0);
  346.                                                  for(j=0;j<pw_num;j++)
  347.                                                                 {
  348.                                                                                                 if(m==0) {LcdWriteData('*');        }                        //密碼隱藏
  349.                                                                                                 else     {LcdWriteData(INPUT_PW_Tab[j]+0x30);}         //顯示密碼
  350.                                                                 }
  351.                                                                                        
  352.                                         }
  353.                                         if(key_num==0x0a)                              //返回鍵按下
  354.                                         {
  355.                                                 if(pw_num!=0) {pw_num=pw_num-1;}
  356.                                                 else          {Step=0;}
  357.                                                 
  358.                                                          
  359.                                                 // ShowString (0x00,"Pass Word:");  
  360.                     LcdWriteCom(0xc0);                                                
  361.                                                                                 for(j=0;j<pw_num;j++)
  362.                                                                                         {
  363.                                                                                                                 if(m==0) {LcdWriteData('*');        }                   //密碼隱藏
  364.                                                                                                                 else     {LcdWriteData(INPUT_PW_Tab[j]+0x30);}    //顯示密碼        
  365.                                                                                    }
  366.                                                                                         LcdWriteData(' ');
  367.                                         }
  368.                 }
  369.         else                          //ok鍵按下
  370.           {
  371.                         if(pw_num==0)         
  372.                                         {
  373.                                                         Step=0;
  374.                                                   LcdWriteCom(0x01);
  375.                                                   ShowString (0x00,"Error 02!");
  376.                                                         delay(10000);
  377.                                         }
  378.                
  379.                         else{               
  380.                                                         Input_suc_flag=1;
  381.                                         }
  382.                                          //AS=0;                        
  383.                 }               
  384. }
  385. /*******************************************************
  386.                 密碼比對
  387. ********************************************************/
  388. void CipherComparison()
  389. {
  390.         u8 i,j=0;

  391.         if(PassWord_Length==pw_num)                       //密碼長度比對
  392.         {
  393.                 for(i=0;i<PassWord_Length;i++)                  //密碼比對
  394.                 {
  395.                         
  396.                                 if(PASSWORD[i]!=INPUT_PW_Tab[i])
  397.                                         {
  398.                                                 result_flag=0;break;                     //密碼錯誤
  399.                                         }
  400.                                 else
  401.                                         {
  402.                                                 result_flag=1;                          //密碼正確
  403.                                         }
  404.                                           INPUT_PW_Tab[i]=0XFF;                   //清除密碼緩存數組
  405.                 }
  406.         }
  407.         else
  408.         {result_flag=0;}
  409.         
  410. }
復制代碼

所有資料51hei提供下載:
電子密碼鎖.zip (1.95 MB, 下載次數: 237)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:581274 發表于 2019-7-11 10:49 | 只看該作者
非常棒
回復

使用道具 舉報

板凳
ID:682365 發表于 2020-2-3 22:16 | 只看該作者
有錯誤 顯示 main函數開頭幾行用處不大
回復

使用道具 舉報

地板
ID:688561 發表于 2020-2-4 20:29 | 只看該作者
非常的教程,太厲害了
回復

使用道具 舉報

5#
ID:197531 發表于 2020-2-19 10:21 | 只看該作者
你好,我使用你的程序下載到我的普中開發板上,其他功能都正常,但是就是輸入密碼后一直是顯示ERROR 01,我想問下是不是你的按鍵掃描方式是不是和普中有所區別,才會出現的這種情況
回復

使用道具 舉報

6#
ID:711778 發表于 2020-3-19 18:15 | 只看該作者
全力 發表于 2020-2-19 10:21
你好,我使用你的程序下載到我的普中開發板上,其他功能都正常,但是就是輸入密碼后一直是顯示ERROR 01,我想問 ...

我也是這樣,您解決了么,我用的是a2單核的那個開發板
回復

使用道具 舉報

7#
ID:711778 發表于 2020-3-19 18:22 | 只看該作者
全力 發表于 2020-2-19 10:21
你好,我使用你的程序下載到我的普中開發板上,其他功能都正常,但是就是輸入密碼后一直是顯示ERROR 01,我想問 ...

介意留個聯系方式探討一下嘛,他好像代碼有問題,按鍵設定的是沒問題的,他是0代替1,依次類推都小了1
回復

使用道具 舉報

8#
ID:711778 發表于 2020-3-19 18:24 | 只看該作者
同樓上,也是報錯,c516和c52開發的板子應該通的吧
回復

使用道具 舉報

9#
ID:110278 發表于 2020-3-20 10:30 | 只看該作者
清楚明了。
回復

使用道具 舉報

10#
ID:727106 發表于 2020-4-13 18:20 | 只看該作者
MAIN.C(80) : error C267: " LcdWriteCom' : requires ANSI- style prototype 您好,請問我用您的程序做練習 出現第80行 的錯誤這是因為什么 可以幫我修改一下嗎  非常感謝
回復

使用道具 舉報

11#
ID:735456 發表于 2020-5-22 10:52 | 只看該作者
12313156 發表于 2020-3-19 18:22
介意留個聯系方式探討一下嘛,他好像代碼有問題,按鍵設定的是沒問題的,他是0代替1,依次類推都小了1

請問有解決嗎?
回復

使用道具 舉報

12#
ID:757105 發表于 2020-5-22 15:21 | 只看該作者
新手看不太懂
回復

使用道具 舉報

13#
ID:771824 發表于 2020-6-8 21:11 | 只看該作者
12313156 發表于 2020-3-19 18:22
介意留個聯系方式探討一下嘛,他好像代碼有問題,按鍵設定的是沒問題的,他是0代替1,依次類推都小了1

我也是初始輸入密碼有問題 我有點其他資料
不知道您現在是否解決了這個問題?
回復

使用道具 舉報

14#
ID:775010 發表于 2020-6-11 21:47 | 只看該作者
感謝大佬
回復

使用道具 舉報

15#
ID:757976 發表于 2020-6-12 07:15 來自手機 | 只看該作者
謝謝分享,下載來學習
回復

使用道具 舉報

16#
ID:235055 發表于 2020-7-29 21:32 | 只看該作者
現在正在學習液晶顯示,剛好可以拿來學習
回復

使用道具 舉報

17#
ID:692835 發表于 2023-2-8 22:33 | 只看該作者
全力 發表于 2020-2-19 10:21
你好,我使用你的程序下載到我的普中開發板上,其他功能都正常,但是就是輸入密碼后一直是顯示ERROR 01,我想問 ...

解決了嗎?想具體探討一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产电影一区二区三区爱妃记 | 久久九九免费 | 亚洲精品视频在线看 | 国产亚洲精品精品国产亚洲综合 | 色久影院 | 欧美日韩高清在线一区 | 亚洲乱码国产乱码精品精98午夜 | 国产在线一区二区 | 国产精品欧美一区二区 | 国产中文视频 | 亚洲国产中文字幕 | 国产ts人妖系列高潮 | 国产视频一区二区在线观看 | 久久香焦 | 麻豆久久久久久 | 免费av在线网站 | 精品欧美色视频网站在线观看 | 欧美精品久久久 | 一区二区三区四区在线免费观看 | 亚洲成人一区二区在线 | 精品国产一区二区三区性色av | 日韩精品免费一区二区在线观看 | 久久久久久成人 | 国产一级黄色网 | 日日日干干干 | 欧美日韩国产免费 | 一区二区三区不卡视频 | 国产偷录视频叫床高潮对白 | 日韩美女一区二区三区在线观看 | 久久久不卡网国产精品一区 | 一区二区av| 亚洲欧美中文日韩在线v日本 | 激情五月综合网 | 国产精品高潮呻吟 | www.99热.com | 成年人在线 | 国产高清精品一区二区三区 | 人人做人人澡人人爽欧美 | 精品一区电影 | 日韩欧美中文 | 日韩中文字幕视频在线观看 |