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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1652|回復: 0
收起左側

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

[復制鏈接]
ID:674637 發表于 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串行數據

  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中斷計數器,秒計數器

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

  22. unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};                                 //控盤掃描控制表
  23. //液晶顯示數據數組
  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];                                                                        //輸入密碼暫存區
  37. unsigned char CurrentPassword[6]={0,0,0,0,0,0};                         //讀取EEPROM密碼暫存數組
  38. unsigned char TempPassword[6];
  39. unsigned char N=0;                                //密碼輸入位數記數
  40. unsigned char ErrorCont;                        //錯誤次數計數
  41. unsigned char CorrectCont;                        //正確輸入計數
  42. unsigned char ReInputCont;                         //重新輸入計數
  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. /*應答位*/
  102. void Ack(void)
  103. {
  104.         Sda=0;
  105.         Nop();
  106.         Scl=1;
  107.         Nop();
  108.         Scl=0;
  109. }

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

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

  141. /*讀一字節的數據,并返回該字節值*/
  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)                                   //數據位是否為1
  155.                         temp=temp|0x01;           //為1 temp的最低位為1(|0x01,就是將最低位變為1)
  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時,數據就接收完了
  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黑下載附件…………
復制代碼

Keil代碼與Proteus7.5仿真下載:
密碼鎖(AT89S52 LCD 24C02).zip (127.98 KB, 下載次數: 31)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一级免费视频 | 中文字字幕在线 | 免费理论片 | 96久久| 国产精品美女在线 | 亚洲精品网址 | 成人欧美在线 | 免费国产一区 | 青久久| 特级特黄aaaa免费看 | 精品久久久一区二区 | 黄色一级片黄色一级片 | 综合在线视频 | 伊人久久中文字幕 | 天天干少妇 | 国产中文字幕视频 | 91av在线看| 国产午夜在线观看 | 国产精品欧美精品 | 男男成人高潮片免费网站 | 黄色大片免费在线观看 | 日韩一二三 | 三级在线观看 | 成年视频在线观看 | 欧美资源在线 | 毛片aaa| 久久国产影院 | 午夜大片 | 香蕉视频在线观看网站 | 欧美性受xxxx黑人xyx性爽 | 午夜免费观看视频 | 亚洲成人免费观看 | 青娱乐99| 国产午夜小视频 | 午夜激情在线 | 日韩精品视频一区二区三区 | 日韩精品一区二区在线 | 欧美大片91 | 亚洲一级黄色片 | 91精品在线免费观看 | 中国女人真人一级毛片 |