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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1556|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機AT89S52 LCD 24C02密碼鎖代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:674637 發(fā)表于 2022-5-14 01:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機密碼鎖

單片機源程序如下:
  1. //包含頭文件
  2. #include <REG51.h>
  3. #include<intrins.h>
  4. //宏定義
  5. #define LCM_Data  P0                  //將P0口定義為LCM_Data
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8. //1602的控制腳
  9. sbit lcd1602_rs=P2^5;
  10. sbit lcd1602_rw=P2^6;
  11. sbit lcd1602_en=P2^7;

  12. sbit Scl=P3^4;                        //24C02串行時鐘
  13. sbit Sda=P3^5;                        //24C02串行數(shù)據(jù)

  14. sbit ALAM = P2^1;                //報警       
  15. sbit KEY = P3^6;                //開鎖

  16. bit  pass=0;                        //密碼正確標志
  17. bit  ReInputEn=0;                //重置輸入允許標志       
  18. bit  s3_keydown=0;                //3秒按鍵標志位
  19. bit  key_disable=0;                //鎖定鍵盤標志

  20. unsigned char countt0,second;        //t0中斷計數(shù)器,秒計數(shù)器

  21. void Delay5Ms(void);                //聲明延時函數(shù)

  22. unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};                                 //控盤掃描控制表
  23. //液晶顯示數(shù)據(jù)數(shù)組
  24. unsigned char code start_line[]        = {"password:       "};
  25. unsigned char code name[]                  = {"===Coded Lock==="};        //顯示名稱
  26. unsigned char code Correct[]         = {"     correct    "};                //輸入正確
  27. unsigned char code Error[]           = {"      error     "};          //輸入錯誤
  28. unsigned char code codepass[]        = {"      pass      "};
  29. unsigned char code LockOpen[]        = {"      open      "};                //OPEN
  30. unsigned char code SetNew[]         = {"SetNewWordEnable"};
  31. unsigned char code Input[]           = {"input:          "};                //INPUT
  32. unsigned char code ResetOK[]         = {"ResetPasswordOK "};
  33. unsigned char code initword[]        = {"Init password..."};
  34. unsigned char code Er_try[]                = {"error,try again!"};
  35. unsigned char code again[]                = {"input again     "};

  36. unsigned char InputData[6];                                                                        //輸入密碼暫存區(qū)
  37. unsigned char CurrentPassword[6]={0,0,0,0,0,0};                         //讀取EEPROM密碼暫存數(shù)組
  38. unsigned char TempPassword[6];
  39. unsigned char N=0;                                //密碼輸入位數(shù)記數(shù)
  40. unsigned char ErrorCont;                        //錯誤次數(shù)計數(shù)
  41. unsigned char CorrectCont;                        //正確輸入計數(shù)
  42. unsigned char ReInputCont;                         //重新輸入計數(shù)
  43. unsigned char code initpassword[6]={0,0,0,0,0,0};                        //輸入管理員密碼后將密碼初始為000000
  44. unsigned char code adminpassword[6]={1,3,1,4,2,0};                        //輸入管理員密碼后將密碼初始為000000


  45. //=====================5ms延時==============================
  46. void Delay5Ms(void)
  47. {
  48.         unsigned int TempCyc = 5552;
  49.         while(TempCyc--);
  50. }

  51. //===================400ms延時==============================
  52. void Delay400Ms(void)
  53. {
  54. unsigned char TempCycA = 5;
  55. unsigned int TempCycB;
  56. while(TempCycA--)
  57. {
  58.   TempCycB=7269;
  59.   while(TempCycB--);
  60. }
  61. }

  62. //=============================================================================================
  63. //================================24C02========================================================
  64. //=============================================================================================

  65. void mDelay(uint t) //延時
  66. {
  67.         uchar i;
  68.            while(t--)
  69.            {
  70.                    for(i=0;i<125;i++)
  71.                    {;}
  72.            }
  73. }
  74.    

  75. void Nop(void)                  //空操作
  76. {
  77.         _nop_();                  //僅作延時用一條語句大約1us
  78.         _nop_();
  79.         _nop_();
  80.         _nop_();
  81. }

  82. /*****24c02程序參照24c02時序圖*****/
  83. /*起始條件*/

  84. void Start(void)
  85. {
  86.         Sda=1;
  87.         Scl=1;
  88.         Nop();
  89.         Sda=0;
  90.         Nop();
  91. }


  92. /*停止條件*/
  93. void Stop(void)
  94. {
  95.         Sda=0;
  96.         Scl=1;
  97.         Nop();
  98.         Sda=1;
  99.         Nop();
  100. }

  101. /*應(yīng)答位*/
  102. void Ack(void)
  103. {
  104.         Sda=0;
  105.         Nop();
  106.         Scl=1;
  107.         Nop();
  108.         Scl=0;
  109. }

  110. /*反向應(yīng)答位*/
  111. void NoAck(void)
  112. {
  113.         Sda=1;
  114.         Nop();
  115.         Scl=1;
  116.         Nop();
  117.         Scl=0;
  118. }

  119. /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/
  120. void Send(uchar Data)
  121. {
  122.            uchar BitCounter=8;
  123.            uchar temp;
  124.            do
  125.            {
  126.                    temp=Data;                                           //將待發(fā)送數(shù)據(jù)暫存temp
  127.                    Scl=0;
  128.                    Nop();
  129.                    if((temp&0x80)==0x80)                   //將讀到的數(shù)據(jù)&0x80
  130.                    Sda=1;
  131.                    else
  132.                    Sda=0;
  133.                    Scl=1;
  134.                    temp=Data<<1;                                   //數(shù)據(jù)左移
  135.                    Data=temp;                                           //數(shù)據(jù)左移后重新賦值Data
  136.                    BitCounter--;                                   //該變量減到0時,數(shù)據(jù)也就傳送完成了
  137.            }
  138.            while(BitCounter);                                   //判斷是否傳送完成
  139.            Scl=0;
  140. }

  141. /*讀一字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/
  142. uchar Read(void)
  143. {
  144.     uchar temp=0;
  145.         uchar temp1=0;
  146.         uchar BitCounter=8;
  147.         Sda=1;
  148.         do
  149.         {
  150.                 Scl=0;
  151.                 Nop();
  152.                 Scl=1;
  153.                 Nop();
  154.                 if(Sda)                                   //數(shù)據(jù)位是否為1
  155.                         temp=temp|0x01;           //為1 temp的最低位為1(|0x01,就是將最低位變?yōu)?)
  156.                 else                                   //如果為0
  157.                         temp=temp&0xfe;           //temp最低位為0(&0xfe(11111110)最低位就是0)
  158.                 if(BitCounter-1)           //BitCounter減1后是否為真
  159.                 {
  160.                         temp1=temp<<1;           //temp左移
  161.                         temp=temp1;
  162.                 }
  163.                 BitCounter--;                   //BitCounter減到0時,數(shù)據(jù)就接收完了
  164.         }
  165.         while(BitCounter);                   //判斷是否接收完成
  166.         return(temp);
  167. }

  168. void WrToROM(uchar Data[],uchar Address,uchar Num)
  169. {
  170.   uchar i;
  171.   uchar *PData;
  172.   PData=Data;
  173.   for(i=0;i<Num;i++)
  174.   {
  175.   Start();
  176.   Send(0xa0);
  177.   Ack();
  178.   Send(Address+i);
  179.   Ack();
  180.   Send(*(PData+i));
  181.   Ack();
  182. ……………………

  183. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

Keil代碼與Proteus7.5仿真下載:
密碼鎖(AT89S52 LCD 24C02).zip (127.98 KB, 下載次數(shù): 31)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区视频 | 久久久久成人精品免费播放动漫 | 久久精品亚洲 | 亚洲国产精品第一区二区 | 91精品国产高清一区二区三区 | 人人人干 | 亚洲综合在线播放 | av中文字幕网站 | 久久成人一区二区三区 | 中文字幕日韩欧美一区二区三区 | 色综合色综合网色综合 | 99精品国产一区二区青青牛奶 | jav成人av免费播放 | 9191av| av一级在线观看 | 一级免费毛片 | 精品国产区 | 亚洲精品国产成人 | 精品视频成人 | 欧美精品第一页 | 国产成人精品免费 | 91日韩在线 | 国久久| 中文字幕99| 日韩欧美在线播放 | 一区二区三区国产视频 | 91佛爷在线观看 | 成人不卡| 亚洲精品一区二区三区中文字幕 | 中国黄色在线视频 | 久久宗合色 | 国产中文视频 | 精品国产乱码久久久久久闺蜜 | 黑人精品欧美一区二区蜜桃 | 欧美日韩在线精品 | 日韩一级在线 | 精品久久久久久久久久 | 偷拍第一页 | 国产精品毛片无码 | 欧美日韩精品一区二区 | 午夜天堂 |