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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5139|回復(fù): 5
收起左側(cè)

基于51單片機的密碼鎖Proteus仿真程序設(shè)計 LCD1602顯示 超過三次輸入錯誤自動鎖定

  [復(fù)制鏈接]
ID:652483 發(fā)表于 2020-11-13 23:23 | 顯示全部樓層 |閱讀模式
第一次發(fā)帖,難免有錯請指出  

由STC89C52單片機系統(tǒng)(主要是STC89C52單片機最小系統(tǒng))、4×4矩陣鍵盤、LCD1602顯示和報警系統(tǒng)等組成一個密碼鎖,具有設(shè)置、修改六位用戶密碼、超次報警、超次鎖定、密碼錯誤報警等功能。
密碼正確顯示OPEN! 密碼錯誤顯示error!超過三次輸入錯誤自動鎖定。
輸入密碼時在LCD屏幕上顯示*號,若密碼輸入錯誤次數(shù)超過3次,蜂
鳴器報警并且鎖定鍵盤。
對輸入的6位密碼進行隱藏;通過發(fā)光二極管和蜂鳴器,對解密正確或者錯誤進行聲光報警;

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
捕獲.PNG

單片機源程序如下:
  1. //<font style="background-color:rgb(255, 255, 255)">
  2. #include <reg51.h>
  3. #include<intrins.h>
  4. #define LCM_Data  P0
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. #define w 6                                                        //定義密碼位數(shù)
  8. sbit lcd1602_rs=P2^7;
  9. sbit lcd1602_rw=P2^6;
  10. sbit lcd1602_en=P2^5;

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

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

  15. sbit open_led=P2^2;                            //開鎖指示燈

  16. bit  operation=0;                            //操作標(biāo)志位
  17. bit  pass=0;                                          //密碼正確標(biāo)志
  18. bit  ReInputEn=0;                            //重置輸入充許標(biāo)志            
  19. bit  s3_keydown=0;                            //3秒按鍵標(biāo)志位
  20. bit  key_disable=0;                            //鎖定鍵盤標(biāo)志

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

  22. void Delay5Ms(void);

  23. unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};                                              //控盤掃描控制表

  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]={1,3,1,4,2,0};                          //當(dāng)前密碼值
  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};

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

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

  61. //=============================================================================================
  62. //================================24C02========================================================
  63. //=============================================================================================

  64. void mDelay(uint t) //延時
  65. {
  66.               uchar i;
  67.                  while(t--)
  68.                  {
  69.                                for(i=0;i<125;i++)
  70.                                {;}
  71.                  }
  72. }
  73.    void Nop(void)                              //空操作
  74. {
  75.               _nop_();
  76.               _nop_();
  77.               _nop_();
  78.               _nop_();
  79. }


  80. /*起始條件*/

  81. void Start(void)
  82. {
  83.               Sda=1;
  84.               Scl=1;
  85.               Nop();
  86.               Sda=0;
  87.               Nop();
  88. }


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

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

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

  116. /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/
  117. void Send(uchar Data)
  118. {
  119.                  uchar BitCounter=8;
  120.                  uchar temp;
  121.                  do
  122.                  {
  123.                                temp=Data;
  124.                                Scl=0;
  125.                                Nop();
  126.                                if((temp&0x80)==0x80)
  127.                                Sda=1;
  128.                                else
  129.                                Sda=0;
  130.                                Scl=1;
  131.                                temp=Data<<1;
  132.                                Data=temp;
  133.                                BitCounter--;
  134.                  }
  135.                  while(BitCounter);
  136.                  Scl=0;
  137. }

  138. /*讀一字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/
  139. uchar Read(void)
  140. {
  141.     uchar temp=0;
  142.               uchar temp1=0;
  143.               uchar BitCounter=8;
  144.               Sda=1;
  145.               do{
  146.               Scl=0;
  147.               Nop();
  148.               Scl=1;
  149.               Nop();
  150.               if(Sda)
  151.               temp=temp|0x01;
  152.               else
  153.               temp=temp&0xfe;
  154.               if(BitCounter-1)
  155.               {
  156.               temp1=temp<<1;
  157.               temp=temp1;
  158.               }
  159.               BitCounter--;
  160.               }
  161.               while(BitCounter);
  162.               return(temp);
  163.               }

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

  182. void RdFromROM(uchar Data[],uchar Address,uchar Num)
  183. {
  184.   uchar i;
  185.   uchar *PData;
  186.   PData=Data;
  187.   for(i=0;i<Num;i++)
  188.   {
  189.   Start();
  190.   Send(0xa0);
  191.   Ack();
  192.   Send(Address+i);
  193.   Ack();
  194.   Start();
  195.   Send(0xa1);
  196.   Ack();
  197.   *(PData+i)=Read();
  198.   Scl=0;
  199.   NoAck();
  200.   Stop();
  201.   }
  202. }
  203. //==================================================================================================
  204. //=======================================LCD1602====================================================
  205. //==================================================================================================

  206. #define yi 0x80 //LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)
  207. #define er 0x80+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)


  208. //----------------延時函數(shù),后面經(jīng)常調(diào)用----------------------
  209. void delay(uint xms)//延時函數(shù),有參函數(shù)
  210. {
  211.               uint x,y;
  212.               for(x=xms;x>0;x--)
  213.               for(y=110;y>0;y--);
  214. }

  215. //--------------------------寫指令---------------------------
  216. write_1602com(uchar com)//****液晶寫入指令函數(shù)****
  217. {
  218.               lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令
  219.               lcd1602_rw=0; //讀寫選擇置為寫
  220.               P0=com;//送入數(shù)據(jù)
  221.               delay(1);
  222.               lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備
  223.               delay(1);
  224.               lcd1602_en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
  225. }

  226. //-------------------------寫數(shù)據(jù)-----------------------------
  227. write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)****
  228. {
  229.               lcd1602_rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)
  230.               lcd1602_rw=0; //讀寫選擇置為寫
  231.               P0=dat;//送入數(shù)據(jù)
  232.               delay(1);
  233.               lcd1602_en=1; //en置高電平,為制造下降沿做準(zhǔn)備
  234.               delay(1);
  235.               lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
  236. }

  237. //-------------------------初始化-------------------------
  238. void lcd_init(void)
  239. {
  240.               write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)
  241.               write_1602com(0x0c);//開顯示不顯示光標(biāo)
  242.               write_1602com(0x06);//整屏不移動,光標(biāo)自動右移
  243.               write_1602com(0x01);//清顯示
  244. }
  245. //========================================================================================
  246. //=========================================================================================

  247. //==============將按鍵值編碼為數(shù)值=========================
  248. unsigned char coding(unsigned char m)            
  249. {
  250.               unsigned char k;
  251.             
  252.               switch(m)
  253.               {
  254.                             case (0x11): k=1;break;
  255.                             case (0x21): k=2;break;
  256.                             case (0x41): k=3;break;
  257.                             case (0x81): k='A';break;
  258.                             case (0x12): k=4;break;
  259.                             case (0x22): k=5;break;
  260.                             case (0x42): k=6;break;
  261.                             case (0x82): k='B';break;
  262.                             case (0x14): k=7;break;
  263.                             case (0x24): k=8;break;
  264.                             case (0x44): k=9;break;
  265.                             case (0x84): k='C';break;
  266.                             case (0x18): k='*';break;
  267.                             case (0x28): k=0;break;
  268.                             case (0x48): k='#';break;
  269.                             case (0x88): k='D';break;
  270.               }
  271.               return(k);
  272. }


  273. //=====================按鍵檢測并返回按鍵值===============================
  274. unsigned char keynum(void)
  275. {
  276.               unsigned char row,col,i;
  277.               P1=0xf0;
  278.               if((P1&0xf0)!=0xf0)
  279.               {
  280.                                Delay5Ms();
  281.         Delay5Ms();
  282.                                if((P1&0xf0)!=0xf0)
  283.                             {
  284.                                 row=P1^0xf0;          //確定行線
  285.                                           i=0;
  286.                                           P1=a[i];                        //精確定位
  287.                                           while(i<4)
  288.                                           {
  289.                                                         if((P1&0xf0)!=0xf0)
  290.                                                           {
  291.                                                                          col=~(P1&0xff);                //確定列線
  292.                                                                          break;            //已定位后提前退出  
  293.                                                           }
  294.                                                         else
  295.                                                           {
  296.                                                                          i++;
  297.                                                                          P1=a[i];
  298.                                                           }
  299.                                           }
  300.                             }
  301.                             else
  302.                             {
  303.                                           return 0;
  304.                             }
  305.             
  306.                             while((P1&0xf0)!=0xf0);
  307.        return (row|col);                                          //行線與列線組合后返回
  308.               }
  309.               else return 0;                                                   //無鍵按下時返回0
  310. }
  311. //=======================一聲提示音,表示有效輸入========================
  312. void OneAlam(void)
  313. {
  314.               ALAM=0;
  315.               Delay5Ms();
  316.     ALAM=1;
  317. }
  318. //========================二聲提示音,表示操作成功========================
  319. void TwoAlam(void)
  320. {
  321.               ALAM=0;
  322.               Delay5Ms();
  323.     ALAM=1;
  324.     Delay5Ms();
  325.               ALAM=0;
  326.               Delay5Ms();
  327.     ALAM=1;
  328. }
  329. //========================三聲提示音,表示錯誤========================
  330. void ThreeAlam(void)
  331. {
  332.               ALAM=0;
  333.               Delay5Ms();
  334.     ALAM=1;
  335.     Delay5Ms();
  336.               ALAM=0;
  337.               Delay5Ms();
  338.     ALAM=1;
  339.     Delay5Ms();
  340.               ALAM=0;
  341.               Delay5Ms();
  342.     ALAM=1;

  343. }
  344. //=====================顯示輸入的N個數(shù)字,用H代替以便隱藏============================
  345. void DisplayOne(void)
  346. {
  347. //              DisplayOneChar(9+N,1,'*');
  348.               write_1602com(yi+5+N);
  349.               write_1602dat('*');
  350. }
  351. //=======================顯示提示輸入=========================
  352. void DisplayChar(void)
  353. {
  354.               unsigned char i;
  355.               if(pass==1)
  356.               {
  357.                             //DisplayListChar(0,1,LockOpen);
  358.                             write_1602com(er);
  359.                             for(i=0;i<16;i++)
  360.                             {
  361.                                           write_1602dat(LockOpen[i]);            
  362.                             }
  363.               }
  364.               else
  365.               {
  366.                             if(N==0)
  367.                             {
  368.                                           //DisplayListChar(0,1,Error);
  369.                                           write_1602com(er);
  370.                                           for(i=0;i<16;i++)
  371.                                           {
  372.                                                         write_1602dat(Error[i]);            
  373.                                           }
  374.                             }
  375.                             else
  376.                             {
  377.                                           //DisplayListChar(0,1,start_line);            
  378.                                           write_1602com(er);
  379.                                           for(i=0;i<16;i++)
  380.                                           {
  381.                                                         write_1602dat(start_line[i]);            
  382.                                           }
  383.                             }
  384.               }
  385. }

  386. void DisplayInput(void)
  387. {
  388.               unsigned char i;
  389.               if(CorrectCont==1)
  390.               {
  391.                             //DisplayListChar(0,0,Input);
  392.                             write_1602com(er);
  393.                             for(i=0;i<16;i++)
  394.                             {
  395.                                           write_1602dat(Input[i]);            
  396.                             }
  397.               }
  398. }


  399. //========================重置密碼==================================================
  400. //==================================================================================
  401. void ResetPassword(void)
  402. {
  403.               unsigned char i;            
  404.               unsigned char j;
  405.               if(pass==0)
  406.               {
  407.                             pass=0;
  408.                             DisplayChar();
  409.                             ThreeAlam();
  410.               }
  411.               else
  412.               {
  413.                   if(ReInputEn==1)
  414.                             {
  415.                                           if(N==6)
  416.                                           {
  417.                                                         ReInputCont++;                                                      
  418.                                                         if(ReInputCont==2)
  419.                                                         {
  420.                                                                       for(i=0;i<6;)
  421.                                                                       {
  422.                                                                                     if(TempPassword[i]==InputData[i])              //將兩次輸入的新密碼作對比
  423.                                                                                                   i++;
  424.                                                                                     else
  425.                                                                                     {
  426.                                                                                                   //DisplayListChar(0,1,Error);
  427.                                                                                                   write_1602com(er);
  428.                                                                                                   for(j=0;j<16;j++)
  429.                                                                                                   {
  430.                                                                                                                 write_1602dat(Error[j]);            
  431.                                                                                                   }
  432.                                                                                                   ThreeAlam();          //錯誤提示            
  433.                                                                                                   pass=0;
  434.                                                                                                   ReInputEn=0;        //關(guān)閉重置功能,
  435.                                                                                                   ReInputCont=0;
  436.                                                                                                   DisplayChar();
  437.                                                                                                   break;
  438.                                                                                     }
  439.                                                                       }
  440.                                                                       if(i==6)
  441.                                                                       {
  442.                                                                                     //DisplayListChar(0,1,ResetOK);
  443.                                                                                     write_1602com(er);
  444.                                                                                     for(j=0;j<16;j++)
  445.                                                                                     {
  446.                                                                                                   write_1602dat(ResetOK[j]);            
  447.                                                                                     }

  448.                                                                                     TwoAlam();                     //操作成功提示
  449.                                                                                     WrToROM(TempPassword,0,6);     //將新密碼寫入24C02存儲
  450.                                                                                     ReInputEn=0;
  451.                                                                       }
  452.                                                                       ReInputCont=0;
  453.                                                                       CorrectCont=0;
  454.                                                         }
  455.                                                         else
  456.                                                         {
  457.                                                                       OneAlam();
  458.                                                                       //DisplayListChar(0, 1, again);  //顯示再次輸入一次
  459.                                                                       write_1602com(er);
  460.                                                                       for(j=0;j<16;j++)
  461.                                                                       {
  462.                                                                                     write_1602dat(again[j]);            
  463.                                                                       }                                                                     
  464.                                                                       for(i=0;i<6;i++)
  465.                                                                       {
  466.                                                                                     TempPassword[i]=InputData[i];     //將第一次輸入的數(shù)據(jù)暫存起來                                                                                   
  467.                                                                       }
  468.                                                         }

  469.                                           N=0;                        //輸入數(shù)據(jù)位數(shù)計數(shù)器清零
  470.                                }
  471.                   }
  472.               }

  473. }



  474. //=======================輸入密碼錯誤超過三過,報警并鎖死鍵盤======================
  475. void Alam_KeyUnable(void)
  476. {
  477.               P1=0x00;
  478.               {
  479.                             ALAM=~ALAM;
  480.                             Delay5Ms();
  481.               }
  482. }


  483. //=======================取消所有操作============================================
  484. void Cancel(void)
  485. {            
  486.               unsigned char i;
  487.               unsigned char j;
  488.               //DisplayListChar(0, 1, start_line);
  489.               write_1602com(er);
  490.               for(j=0;j<16;j++)
  491.               {
  492.                             write_1602dat(start_line[j]);            
  493.               }
  494.               TwoAlam();                                                        //提示音
  495.               for(i=0;i<6;i++)
  496.               {
  497.                             InputData[i]=0;
  498.               }
  499.               KEY=1;                                                                      //關(guān)閉鎖
  500.               ALAM=1;                                                                      //報警關(guān)
  501.               operation=0;                                          //操作標(biāo)志位清零
  502.               pass=0;                                                                      //密碼正確標(biāo)志清零
  503.               ReInputEn=0;                                          //重置輸入充許標(biāo)志清零
  504.               ErrorCont=0;                                          //密碼錯誤輸入次數(shù)清零
  505.               CorrectCont=0;                                          //密碼正確輸入次數(shù)清零
  506.               ReInputCont=0;                                          //重置密碼輸入次數(shù)清零
  507.               open_led=1;
  508.               s3_keydown=0;
  509.               key_disable=0;
  510.               N=0;                                                                      //輸入位數(shù)計數(shù)器清零
  511. }


  512. //==========================確認(rèn)鍵,并通過相應(yīng)標(biāo)志位執(zhí)行相應(yīng)功能===============================
  513. void Ensure(void)
  514. {            
  515.               unsigned char i,j;
  516.               RdFromROM(CurrentPassword,0,6);                              //從24C02里讀出存儲密碼
  517.     if(N==6)
  518.               {
  519.                   if(ReInputEn==0)                                              //重置密碼功能未開啟
  520.                             {
  521.                                           for(i=0;i<6;)
  522.                                              {                                                                     
  523.                                                         if(CurrentPassword[i]==InputData[i])
  524.                                                         {
  525.                                                                       i++;
  526.                                                         }
  527.                                                         else
  528.                                                         {                                         
  529.                                                                       ErrorCont++;
  530.                                                                       if(ErrorCont==3)      //錯誤輸入計數(shù)達(dá)三次時,報警并鎖定鍵盤
  531.                                                                       {
  532.                                                                                     write_1602com(er);
  533.                                                                                     for(i=0;i<16;i++)
  534.                                                                                     {
  535.                                                                                                   write_1602dat(Error[i]);            
  536.                                                                                     }
  537.                                                                                     do
  538.                                                                                     Alam_KeyUnable();
  539.                                                                                     while(1);
  540.                                                                       }
  541.                                                                       else
  542.                                                                       {
  543.                                                                                     TR0=1;               //開啟定時
  544.                                                                                     key_disable=1;   //鎖定鍵盤
  545.                                                                                     pass=0;
  546.                                                                                     break;
  547.                                                                       }
  548.                                                         }
  549.                                           }

  550.                                           if(i==6)
  551.                                           {
  552.                                                         CorrectCont++;
  553.                                                         if(CorrectCont==1)         //正確輸入計數(shù),當(dāng)只有一次正確輸入時,開鎖,
  554.                                                         {
  555.                                                                       //DisplayListChar(0,1,LockOpen);
  556.                                                                       write_1602com(er);
  557.                                                                       for(j=0;j<16;j++)
  558.                                                                       {
  559.                                                                                     write_1602dat(LockOpen[j]);            
  560.                                                                       }
  561.                                                                       TwoAlam();                                          //操作成功提示音
  562.                                                                       KEY=0;              //開鎖
  563.                                                                       pass=1;             //置正確標(biāo)志位
  564.                                                                       TR0=1;                //開啟定時
  565.                                                                       open_led=0;        //開鎖指示燈亮
  566.                                                                       for(j=0;j<6;j++)      //將輸入清除
  567.                                                                       {
  568.                                                                                     InputData[i]=0;
  569.                                                                       }
  570.                                                         }            
  571.                                                         else                                                //當(dāng)兩次正確輸入時,開啟重置密碼功能
  572.                                                         {
  573.                                                                       //DisplayListChar(0,1,SetNew);
  574.                                                                       write_1602com(er);
  575.                                                                       for(j=0;j<16;j++)
  576.                                                                       {
  577.                                                                                     write_1602dat(SetNew[j]);            
  578.                                                                       }
  579.                                                                       TwoAlam();                                 //操作成功提示
  580.                                                                       ReInputEn=1;                               //允許重置密碼輸入
  581.                                                                       CorrectCont=0;                              //正確計數(shù)器清零
  582.                                                         }
  583.                                             }
  584.             
  585.                                           else                           //=========================當(dāng)?shù)谝淮问褂没蛲浢艽a時可以用131420對其密碼初始化============
  586.                                           {
  587.                                                         if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0))
  588.                                                           {
  589.                                                                       WrToROM(initpassword,0,6);            //強制將初始密碼寫入24C02存儲
  590.                                                                       //DisplayListChar(0,1,initword);       //顯示初始化密碼
  591.                                                                       write_1602com(er);
  592.                                                                       for(j=0;j<16;j++)
  593.                                                                       {
  594.                                                                                     write_1602dat(initword[j]);            
  595.                                                                       }
  596.                                                                       TwoAlam();
  597.                                                                       Delay400Ms();
  598.                                                                       TwoAlam();
  599.                                                                       N=0;
  600.                                                         }
  601.                                                         else
  602.                                                         {
  603.                                                                       //DisplayListChar(0,1,Error);
  604.                                                                       write_1602com(er);
  605.                                                                       for(j=0;j<16;j++)
  606.                                                                       {
  607.                                                                                     write_1602dat(Error[j]);            
  608.                                                                       }
  609.                                                                       ThreeAlam();     //錯誤提示音
  610.                                                                       pass=0;            
  611.                                                         }
  612.                                           }
  613.                             }

  614.                             else        //當(dāng)已經(jīng)開啟重置密碼功能時,而按下開鎖鍵,
  615.                             {
  616.                                           //DisplayListChar(0,1,Er_try);
  617.                                           write_1602com(er);
  618.                                           for(j=0;j<16;j++)
  619.                                           {
  620.                                                         write_1602dat(Er_try[j]);            
  621.                                           }
  622.                                           ThreeAlam();
  623.                             }
  624.               }

  625.               else
  626.               {
  627.                             //DisplayListChar(0,1,Error);
  628.                             write_1602com(er);
  629.                             for(j=0;j<16;j++)
  630.                             {
  631.                                           write_1602dat(Error[j]);            
  632.                             }

  633.                             ThreeAlam();                                                                              //錯誤提示音
  634.                             pass=0;            
  635.               }
  636.               N=0;                                                                                               //將輸入數(shù)據(jù)計數(shù)器清零,為下一次輸入作準(zhǔn)備
  637.   operation=1;
  638. }
  639. //==============================主函數(shù)===============================
  640. void main(void)
  641. {
  642.               unsigned char KEY,num;
  643.               unsigned char i,j;
  644.               P1=0xF0;
  645.               TMOD=0x11;
  646.               TL0=0xB0;
  647.               TH0=0x3C;
  648.               EA=1;
  649.               ET0=1;            
  650.               TR0=0;
  651.               Delay400Ms();               //啟動等待,等LCM講入工作狀態(tài)
  652.               lcd_init();               //LCD初始化
  653.               write_1602com(yi);//日歷顯示固定符號從第一行第0個位置之后開始顯示
  654.               for(i=0;i<16;i++)
  655.               {
  656.                             write_1602dat(name[i]);//向液晶屏寫日歷顯示的固定符號部分
  657.               }
  658.               write_1602com(er);//時間顯示固定符號寫入位置,從第2個位置后開始顯示
  659.               for(i=0;i<16;i++)
  660.               {
  661.                             write_1602dat(start_line[i]);//寫顯示時間固定符號,兩個冒號
  662.               }
  663.               write_1602com(er+9);              //設(shè)置光標(biāo)位置
  664.               write_1602com(0x0f);              //設(shè)置光標(biāo)為閃爍
  665.               Delay5Ms(); //延時片刻(可不要)
  666.               N=0;                      //初始化數(shù)據(jù)輸入位數(shù)
  667.               while(1)
  668.               {
  669.              if(key_disable==1)
  670.               Alam_KeyUnable();
  671.               else
  672.               ALAM=1;
  673.                          num++;
  674.              if(num>20)
  675.              {
  676.                  num=0;
  677.              }
  678.               KEY=keynum();
  679.                           if(KEY!=0)
  680.                           {
  681.               if(key_disable==1)
  682.                           {
  683.               second=0;
  684.                           }
  685.               else
  686. ……………………

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

所有資料51hei提供下載:
密碼鎖.zip (29.3 KB, 下載次數(shù): 141)
回復(fù)

使用道具 舉報

ID:849218 發(fā)表于 2020-11-27 18:44 | 顯示全部樓層
仿真是proteus那個版本啊?
回復(fù)

使用道具 舉報

ID:849218 發(fā)表于 2020-11-27 19:04 | 顯示全部樓層
老哥 重置密碼的兩次具體怎么操作欸
回復(fù)

使用道具 舉報

ID:858605 發(fā)表于 2020-12-15 15:04 | 顯示全部樓層
樓主您好,有物料清單嗎
回復(fù)

使用道具 舉報

ID:866685 發(fā)表于 2020-12-27 10:52 | 顯示全部樓層
仿真成功,謝謝樓主
回復(fù)

使用道具 舉報

ID:1142224 發(fā)表于 2025-1-2 22:03 | 顯示全部樓層
初始密碼是啥呀
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩亚洲视频 | 亚洲国产成人精品一区二区 | 日韩在线一区二区 | 久久国 | 夏同学福利网 | 蜜桃视频在线观看免费视频网站www | 欧美午夜激情在线 | 日韩三级免费观看 | 国产精品麻 | 国产三级大片 | www.成人久久 | 美女亚洲一区 | 中文字幕在线电影观看 | 超碰人人爱| 热99精品视频 | jizz18国产| 日本成人在线免费视频 | 欧美黑人激情 | 午夜免费观看网站 | 成人性视频免费网站 | 国产视频第一页 | 五月天国产视频 | xx性欧美肥妇精品久久久久久 | 俺去俺来也www色官网cms | 免费观看黄色片视频 | 国产精品视频97 | 久久国产香蕉 | 黑人精品 | 91精品国产综合久久久动漫日韩 | 亚洲国产精品网站 | tube国产 | 自拍视频国产 | 99久久电影 | 久久久亚洲| 久久在线| 五月婷六月丁香 | 亚洲一区二区高清 | www视频在线观看 | 伊人手机在线视频 | 国产一级大片 | 成人久久久久 |