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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用24c04與1602液晶屏設計的簡易加密電子鎖 程序+原理圖+仿真下載

  [復制鏈接]
跳轉到指定樓層
樓主
ID:93915 發表于 2015-11-1 17:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用24c04與1602液晶屏設計的簡易加密電子鎖源程序+仿真文件下載: 用24c04與1602液晶屏設計的簡易加密電子鎖.rar (96 KB, 下載次數: 228)

主程序預覽:
  1. #include"LCD1602.h"
  2. #include"AT24C04.h"

  3. //上次按鍵和當前按鍵序號,該矩陣中序號范圍為0~15,16表示無按鍵
  4. INT8U Key_Value = 0xFF, Pre_KeyNo = 0xFF;
  5. INT8U DSY_BUFFER[10]= "";           //顯示緩沖區
  6. INT8U UserPassword[7];                            //用戶輸入密碼
  7. INT8U I2C_Password[7];              //從I2C存儲器讀取的密碼

  8. sbit LED_OPEN = P2^7;                            //開鎖亮燈
  9. sbit BEEP = P3^7;                                   //蜂鳴器

  10. void Beep();
  11. void Clear_Pwd();
  12. void Read_I2C_Pwd();
  13. void Write_I2C_Pwd();
  14. void Keys_Scan();
  15. //----------主程序------------
  16. void main()
  17. {
  18.         INT8U i = 0;
  19.         INT8U IS_Valid_User = 0;
  20.         P0 = 0xFF; P1 = 0xFF; P2 = 0xFF;
  21.         Delay_ms(10);
  22.         Init_LCD();        //初始化LCD
  23.         Write_LCD_String(0, 0, "Your Password...");
  24.         Read_I2C_Pwd();     //將密碼讀入I2C         
  25.         while(1)
  26.         {
  27.                 P1 = 0x0F;
  28.                 while(P1 == 0x0F);        Keys_Scan();                  
  29.                 Pre_KeyNo = Key_Value;  //掃描鍵盤獲取鍵序號
  30.                 switch(Pre_KeyNo)
  31.                 {
  32.                         case 0: case 1: case 2: case 3: case 4:
  33.                         case 5: case 6: case 7: case 8: case 9:
  34.                                         if(i <= 5)
  35.                                         {
  36.                                                 //如果i為0則執行一次清屏
  37.                                                 if(i == 0) Write_LCD_String(1, 0, "              ");
  38.                                                 UserPassword[i] = Pre_KeyNo + '0';
  39.                                                 UserPassword[i+1] = '\0';
  40.                                                 DSY_BUFFER[i] = '*';
  41.                                                 DSY_BUFFER[i+1] = '\0'; i++;
  42.                                                 Write_LCD_String(1, 0,DSY_BUFFER );
  43.                                         }   break;
  44.                         case 10: //按A鍵開鎖
  45.                                          Read_I2C_Pwd();    //從I2C存儲器讀回密碼
  46.                                          if(strcmp(UserPassword,I2C_Password) == 0)
  47.                                          {
  48.                                                  LED_OPEN = 0;  //點亮LED
  49.                                                 Clear_Pwd();
  50.                                                 Write_LCD_String(1, 0, "Unlock OK!        ");
  51.                                                 IS_Valid_User = 1;
  52.                                          }
  53.                                          else
  54.                                          {
  55.                                                  LED_OPEN = 1;  //關閉LED
  56.                                                 Clear_Pwd();
  57.                                                 Write_LCD_String(1, 0, "ERROR !         ");
  58.                                                 IS_Valid_User = 0;                                               
  59.                                          }
  60.                                          i = 0; break;
  61.                         case 11: //按B鍵上鎖
  62.                                         LED_OPEN = 1;
  63.                                         Clear_Pwd();
  64.                                         Write_LCD_String(0, 0, "Your Password... ");
  65.                                         Write_LCD_String(1, 0, "              ");
  66.                                         i = 0;        IS_Valid_User = 0; break;
  67.                         case 12: //按C鍵設置新密碼
  68.                                          //如果是合法用戶則提示輸入新密碼
  69.                                          if(!IS_Valid_User)
  70.                                                  Write_LCD_String(1, 0, "No right ! ");
  71.                                          else
  72.                                          {
  73.                                                  i = 0;  //密碼輸入緩沖索引歸零
  74.                                                 Write_LCD_String(0, 0, "New Password:... ");
  75.                                                 Write_LCD_String(1, 0, "                 ");
  76.                                          } break;
  77.                         case 13: //按D鍵保存新密碼
  78.                                         if(!IS_Valid_User)
  79.                                                 Write_LCD_String(1, 0, "No right ! ");
  80.                                         else
  81.                                         {
  82.                                                 //寫入新設置的密碼,并重新讀回
  83.                                                 Write_I2C_Pwd(); Delay_ms(5); Read_I2C_Pwd();
  84.                                                 i = 0; //密碼輸入緩沖索引歸零
  85.                                                 Write_LCD_String(0, 0, "Your Password ... ");
  86.                                             Write_LCD_String(1, 0, "Password Saved !  ");
  87.                                         } break;
  88.                         case 14: //按E鍵消除所有輸入
  89.                                         i = 0; Clear_Pwd();
  90.                                         Write_LCD_String(0, 0, "Your Password... ");
  91.                                         Write_LCD_String(1, 0, "                  ");       

  92.                 }
  93.                 Beep(); Delay_ms(100);
  94.                 while(P1 != 0xF0);                //如果有鍵未釋放則等待
  95.         }
  96.        
  97. }

  98. //-----------蜂鳴器子程序------------
  99. void Beep()
  100. {
  101.         INT8U i;
  102.         for(i = 0; i < 100; i++)
  103.         {
  104.                 Delay_ms(1);
  105.                 BEEP = ~BEEP;
  106.         }
  107.         BEEP = 0;
  108. }
  109. //------------清除密碼--------------
  110. void Clear_Pwd()
  111. {
  112.         UserPassword[0] = '\0';
  113.         DSY_BUFFER[0]='\0';
  114. }
  115. //----------讀取密碼字符串(以'\0'為結束標志)----------
  116. void Read_I2C_Pwd()
  117. {
  118.         INT8U i = -1; //只限于讀取存儲器前半部分
  119.         do {        i++;        I2C_Password[i] = Random_Read(0xA0,(INT16U)i); }
  120.         while(I2C_Password[i] != '\0' && i < 6);
  121.         //如果循環結束后未遇到結束標志,則直接在字符串末尾補上結束標志
  122.         if(I2C_Password[i] != '\0')  I2C_Password[i] = '\0';
  123. }

  124. //----------寫密碼字符串(結束標志'\0'注意一并寫入)---------
  125. void Write_I2C_Pwd()
  126. {
  127.         INT8U i = 0;
  128.         //循環寫入密碼字符,字符串末尾的'\0'也要寫入,最多7個字符
  129.         while(i <= 6)
  130.         {
  131.                 Random_Write(0xA0, i,UserPassword[i]); Delay_ms(5);
  132.                 if(UserPassword[i] == '\0') break;
  133.                 i++;
  134.         }
  135.         //如果循環結束時密碼字符串末尾未遇到'\0'則直接向I2C補充寫入'\0'
  136.         if(UserPassword[i] != '\0')  Random_Write(0xA0, i,'\0');
  137. }
  138. //-----------------鍵掃描------------------------------------
  139. void Keys_Scan()
  140. {
  141.         /*列判斷*/
  142.         P1 = 0x0F; Delay_ms(1);                       
  143.         if(P1 == 0x0F)        
  144.         {
  145.                 Key_Value = 0xFF; return;       
  146.         }
  147.         switch(P1)
  148.         {
  149.                 case 0x0E: Key_Value = 0; break;
  150.                 case 0x0D: Key_Value = 1; break;
  151.                 case 0x0B: Key_Value = 2; break;
  152.                 case 0x07: Key_Value = 3; break;
  153.                 default : Key_Value = 0xFF; return;
  154.         }
  155.         /*行判斷*/
  156.         P1 = 0xF0; Delay_ms(1);
  157.         switch(P1)
  158.         {
  159.                 case 0xE0: Key_Value += 0; break;
  160.                 case 0xD0: Key_Value += 4; break;
  161.                 case 0xB0: Key_Value += 8; break;
  162.                 case 0x70: Key_Value += 12; break;
  163.                 default : Key_Value = 0xFF;   
  164.         }       

  165. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:183554 發表于 2017-3-26 16:24 | 只看該作者
66666厲害額大神6666
回復

使用道具 舉報

板凳
ID:448152 發表于 2018-12-18 09:55 | 只看該作者
y有沒有點h文件
回復

使用道具 舉報

地板
ID:204748 發表于 2018-12-18 11:03 來自手機 | 只看該作者
可以,玩玩。
回復

使用道具 舉報

5#
ID:1015923 發表于 2022-4-5 19:15 | 只看該作者
666簡直是寶地
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲精品a | 久久久久久综合 | 欧美日本韩国一区二区三区 | 国产高清一区二区三区 | 理论片87福利理论电影 | av在线二区 | 国产成人精品区一区二区不卡 | 91国内外精品自在线播放 | 成人免费激情视频 | 福利久久| 欧美另类视频在线 | 99国内精品久久久久久久 | 国产成人精品免高潮在线观看 | 日韩欧美在线一区 | 日韩av第一页 | 久久久久久久电影 | 真人一级毛片 | 国产精品777一区二区 | 看一级毛片| 一区二区三区四区不卡视频 | 嫩草最新网址 | 亚洲 中文 欧美 日韩 在线观看 | 午夜电影日韩 | 欧美日韩在线国产 | 成人在线影视 | 成人网视频| 国产精品久久久久久久岛一牛影视 | 欧美一区二区三区,视频 | 成人精品网 | 欧美一极视频 | 色婷婷一区二区三区四区 | 精品久久久久久亚洲国产800 | 欧美激情一区 | 国产一级在线观看 | 91激情电影 | 亚洲免费精品 | 日韩在线视频网址 | 欧美a在线 | 性一交一乱一伦视频免费观看 | 黄色免费观看网站 | 欧美 日韩 综合 |