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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數字密碼鎖(源代碼)

[復制鏈接]
跳轉到指定樓層
樓主
單片機數字密碼鎖:


程序源代碼:
  1. //************************************************************************************************************************************
  2. //庫調用.宏類型定義.位定義//
  3. //************************************************************************************************************************************
  4. #include <reg52.h>                                   
  5. #include <intrins.h>
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. #define ushort unsigned short

  9. #define GPIO_KEY P1                 //矩陣鍵盤燒掃描端口
  10. sbit RS = P2^2;                                       //液晶顯示器控制端口
  11. sbit RW = P2^3;
  12. sbit E = P3^7;
  13. sbit shuchu=P2^0;                                      //繼電器控制端口
  14. sbit beep=P2^1;                                              //報警器端口
  15. sbit DoorBell=P3^6;                                    //門鈴端口
  16. sbit SCL = P2^6;                    //AT24C04的時鐘
  17. sbit SDA = P2^7;                    //AT24C04的數據

  18. uchar idata upxs[16]={"Password:"}; //上排存放數組
  19. uchar idata dwxs[16]={""};          //下排存放數組
  20. uint idata tempword[6]={0};                     //臨時密碼數組
  21. uint idata password[6]={1,1,1,1,1,1};//初始密碼
  22. uint idata now=0;                                                  //數組偽指針
  23. uint idata key=0;                   //密鑰
  24. uint idata keyboard=0;              //鍵盤鎖定標志
  25. uint idata key1=0;                                          //用于密碼修改
  26. uint idata KeyValue=16;             //用來存放讀取到的鍵值
  27. uint idata warn=0;                                          //錯誤累計
  28. uint idata time=0;                                          //用于定時
  29. uint idata time1=0;                 //用于定時
  30. uint idata time2=0;                 //用于定時
  31. uint idata moshi=0;                                          //定時器內部模式
  32. uchar idata BUF[8];                 //掉電數據緩存區
  33. uchar idata TESTDATA[8]={0};        //掉電新密碼存儲
  34. uint idata menu=0;                                    //menu用于密碼修改
  35. uint idata tempword1[8]={0};        //用于密碼修改
  36. //*********************************************************************************************************************************
  37. //函數聲明//
  38. //*********************************************************************************************************************************
  39. void delete(void);
  40. //*********************************************************************************************************************************
  41. /*模塊名稱:液晶驅動顯示模塊*/
  42. /*模塊功能:驅動LCD1602的顯示,并時時顯示按鍵值*/
  43. //*********************************************************************************************************************************
  44. void delay(uint dell)//毫秒延時//
  45. {
  46.      uchar x;
  47.      for(dell;dell>0;dell--)
  48.      for(x=110;x>0;x--);
  49. }
  50. void wr_com(uchar temp)//寫指令//
  51. {
  52.      RS=0;
  53.      RW=0;
  54.      P0=temp;
  55.      E=1;
  56.      E=0;
  57. }
  58. void wr_data(uchar num)//寫數據//
  59. {
  60.      RS=1;
  61.      RW=0;
  62.      P0=num;
  63.      E=1;
  64.      E=0;
  65. }
  66. void disp_lcd(uchar addr,char *templ)//顯示函數//
  67. {
  68.      uchar i;
  69.      wr_com(addr);
  70.            delay(50);
  71.      for(i=0;i<16;i++)
  72.     {
  73.      wr_data(templ[i]);
  74.            delay(50);
  75.     }         
  76. }
  77. void lcd_init()//初始化液晶//
  78. {
  79.      wr_com(0x30);
  80.       delay(50);
  81.      wr_com(0x38);
  82.       delay(50);
  83.      wr_com(0x01);
  84.       delay(50);
  85.      wr_com(0x06);
  86.       delay(50);
  87.      wr_com(0x0c);
  88.       delay(50);
  89. }
  90. void lcdxianshi(void)//液晶總顯示//
  91. {
  92.      disp_lcd(0x80,upxs);
  93.      disp_lcd(0xc0,dwxs);
  94. }
  95. //*********************************************************************************************************************************
  96. /*模塊名稱:矩陣鍵盤掃描模塊*/
  97. /*模塊功能:時時掃描按鍵值*/
  98. //*********************************************************************************************************************************
  99. void Delay10ms(void)//延時函數//
  100. {
  101.     unsigned char a,b,c;
  102.     for(c=1;c>0;c--)
  103.         for(b=38;b>0;b--)
  104.             for(a=130;a>0;a--);
  105. }
  106. void KeyDown(void)//鍵盤檢測函數//
  107. {
  108.         char a=0;
  109.         GPIO_KEY=0x0f;
  110.         if(GPIO_KEY!=0x0f)     //讀取按鍵是否按下
  111.         {
  112.                 Delay10ms();         //延時10ms進行消抖
  113.                 if(GPIO_KEY!=0x0f)   //再次檢測鍵盤是否按下
  114.                 {
  115.                        
  116.                         //掃描列
  117.                         GPIO_KEY=0X0F;
  118.                         switch(GPIO_KEY)
  119.                         {
  120.                                 case(0X07):        KeyValue=0;break;
  121.                                 case(0X0b):        KeyValue=1;break;
  122.                                 case(0X0d): KeyValue=2;break;
  123.                                 case(0X0e):        KeyValue=3;break;
  124.                         }
  125.                         //掃描行
  126.                         GPIO_KEY=0XF0;
  127.                         switch(GPIO_KEY)
  128.                         {
  129.                                 case(0X70):        KeyValue=KeyValue;break;
  130.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  131.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  132.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  133.                         }
  134.                         while((a<10)&&(GPIO_KEY!=0xf0))//按鍵松手檢測
  135.                         {
  136.                                 Delay10ms();
  137.                                 a++;
  138.                         }
  139.                 }
  140.         }
  141. }
  142. //*******************************************************************************************************************************
  143. /*模塊名稱:數據處理模塊*/
  144. /*模塊功能:(1)將按鍵值傳遞給各種緩存數祝(2)包含數據清除函數*/
  145. //*******************************************************************************************************************************
  146. void keysend(void)//鍵值傳遞//
  147. {
  148.                  switch(KeyValue)
  149.            {
  150.              case 0:{dwxs[now]='0';tempword[now]=0;TESTDATA[now]=0;now++;break;}
  151.                    case 1:{dwxs[now]='1';tempword[now]=1;TESTDATA[now]=1;now++;break;}
  152.                    case 2:{dwxs[now]='2';tempword[now]=2;TESTDATA[now]=2;now++;break;}
  153.                    case 3:{dwxs[now]='3';tempword[now]=3;TESTDATA[now]=3;now++;break;}
  154.                    case 4:{dwxs[now]='4';tempword[now]=4;TESTDATA[now]=4;now++;break;}
  155.                    case 5:{dwxs[now]='5';tempword[now]=5;TESTDATA[now]=5;now++;break;}
  156.                    case 6:{dwxs[now]='6';tempword[now]=6;TESTDATA[now]=6;now++;break;}
  157.                    case 7:{dwxs[now]='7';tempword[now]=7;TESTDATA[now]=7;now++;break;}
  158.                    case 8:{dwxs[now]='8';tempword[now]=8;TESTDATA[now]=8;now++;break;}
  159.                    case 9:{dwxs[now]='9';tempword[now]=9;TESTDATA[now]=9;now++;break;}
  160.                    case 11:{
  161.                                         upxs[12]='S';
  162.                                        upxs[13]='U';
  163.                                        upxs[14]='R';
  164.                                        upxs[15]='E'; break;
  165.                    }
  166.                    case 14:{
  167.                            menu++;                         //密碼修改模式啟動模式一
  168.                                   if(menu>1)                     //再次按下跳出密碼修改模式
  169.                                   {
  170.                                            upxs[0]='P';           //顯示“password”
  171.                              upxs[1]='a';
  172.                              upxs[2]='s';
  173.                              upxs[3]='s';
  174.                              upxs[4]='w';
  175.                              upxs[5]='o';
  176.                              upxs[6]='r';
  177.                              upxs[7]='d';
  178.                                  upxs[8]=':';
  179.                                          delete();
  180.                                          menu=0;
  181.                                   }
  182.                                   break;
  183.                    }
  184.                    case 15:{
  185.                           TR0=1;                     //定時器0打開
  186.                                      moshi=1;                           //模式1為門鈴模式
  187.                                   KeyValue=16; break;//鍵值緩存清零
  188.                    }
  189.                   }
  190.                   if(now==6) now=0;      //只存儲8位,只顯示八位
  191. }
  192. void delete(void)//清除函數//
  193. {
  194.      uchar i;
  195.              for(i=0;i<16;i++)
  196.                  {
  197.                     dwxs[i]=0x20;            //密碼字符清零
  198.                  }
  199.                  for(i=0;i<6;i++)
  200.                  {
  201.                     tempword[i]=0;         //密碼緩存數組清零
  202.                  }
  203.                   upxs[11]=0x20;
  204.                   upxs[12]=0x20;   //SURE顯示清零
  205.                         upxs[13]=0x20;
  206.                         upxs[14]=0x20;
  207.                         upxs[15]=0x20;
  208.                  now=0;                                       //偽指針復位
  209.                  key=0;                                       //密鑰清零
  210.                  KeyValue=16;                     //鍵值緩存初始
  211. }
  212. void condition_delete(void) //條件清除
  213. {
  214.      if(KeyValue==10)
  215.          {
  216.                 delete();            //按下DELE鍵清除數據
  217.          }
  218.          KeyValue=16;                             //鍵值緩存清零
  219. }
  220. //*********************************************************************************************************************************
  221. /*模塊名稱:定時器模塊*/
  222. /*模塊功能:定時器0用于產生門鈴效果,定時器1用于各種倒計時*/
  223. //*********************************************************************************************************************************
  224. void timer0() interrupt 1    //定時器0用于門鈴
  225. {
  226.     switch(moshi)
  227.    {
  228.       case 1:{
  229.                 DoorBell=~DoorBell;
  230.             time++;
  231.              if(time<400)             //若需要拖長聲音,可以調整 400 和 800
  232.             {
  233.                TH0=(8192-700)/32;     //700us 定時
  234.                TL0=(8192-700)%32;
  235.             }
  236.              else if(time<800)
  237.             {
  238.                TH0=(8192-1000)/32;    //1ms 定時
  239.                TL0=(8192-1000)%32;
  240.             }
  241.              else
  242.             {
  243.                time=0;                                  //計數清零
  244.                TR0=0;                                  //關閉定時器
  245.                            moshi=0;                                     //跳出模式1
  246.             }
  247.                         break;
  248.           }
  249.           case 2:{
  250.                            beep=~beep;
  251.                          time++;
  252.                          if(time<400)             //若需要拖長聲音,調整 400
  253.             {
  254.                TH0=(8192-700)/32;     //700us 定時
  255.                TL0=(8192-700)%32;
  256.             }
  257.                         else
  258.                         {
  259.                            time=0;                                  //計數清零
  260.                         }
  261.                         break;
  262.           }
  263.    }
  264. }
  265. void timer1() interrupt 3          //定時器1用于自動關門
  266. {  
  267.     TH0=(65536-50000)/256;  
  268.     TL0=(65536-50000)%256;  
  269.     time1++;   
  270.     if(time1==20)//一秒  
  271.     {      
  272.       time2++;
  273.             time1=0;  
  274.     }
  275. }
  276. //**********************************************************************************************************************************
  277. /*模塊名稱幟:掉電模塊*/
  278. /*模塊功能:支持門鎖掉電后密碼可保存而不丟失*/
  279. //**********************************************************************************************************************************
  280. //延時5微秒(STC90C52RC@12M),此延時對于12M晶振
  281. void Delay5us()
  282. {
  283.     _nop_();
  284.     _nop_();
  285. }
  286. //延時5毫秒(STC90C52RC@12M)
  287. void Delay5ms()
  288. {
  289.     ushort n = 560;
  290.     while (n--);
  291. }
  292. //起始信號
  293. void AT24C04_Start()
  294. {
  295.     SDA = 1;                    //拉高數據線
  296.     SCL = 1;                    //拉高時鐘線
  297.     Delay5us();                 //延時
  298.     SDA = 0;                    //產生下降沿
  299.     Delay5us();                 //延時
  300.     SCL = 0;                    //拉低時鐘線
  301. }
  302. //停止信號
  303. void AT24C04_Stop()
  304. {
  305.     SDA = 0;                    //拉低數據線
  306.     SCL = 1;                    //拉高時鐘線
  307.     Delay5us();                 //延時
  308.     SDA = 1;                    //產生上升沿
  309.     Delay5us();                 //延時
  310. }
  311. //發送應答信號
  312. void AT24C04_SendACK(bit ack)
  313. {
  314.     SDA = ack;                  //寫應答信號
  315.     SCL = 1;                    //拉高時鐘線
  316.     Delay5us();                 //延時
  317.     SCL = 0;                    //拉低時鐘線
  318.     Delay5us();                 //延時
  319. }
  320. //接收應答信號
  321. bit AT24C04_RecvACK()
  322. {
  323.     SCL = 1;                    //拉高時鐘線
  324.     Delay5us();                 //延時
  325.     CY = SDA;                   //讀應答信號
  326.     SCL = 0;                    //拉低時鐘線
  327.     Delay5us();                 //延時

  328.     return CY;
  329. }
  330. //向IIC總線發送一個字節數據
  331. void AT24C04_SendByte(uchar dat)
  332. {
  333.     uchar i;

  334.     for (i=0; i<8; i++)         //8位計數器
  335.     {
  336.         dat <<= 1;              //移出數據的最高位
  337.         SDA = CY;               //送數據口
  338.         SCL = 1;                //拉高時鐘線
  339.         Delay5us();             //延時
  340.         SCL = 0;                //拉低時鐘線
  341.         Delay5us();             //延時
  342.     }
  343.     AT24C04_RecvACK();
  344. }
  345. //向AT24C04寫1頁(16字節)數據,將TESTDATA開始的16個測試數據寫如設備的00~0F地址中
  346. void AT24C04_WritePage()
  347. {
  348.     uchar i;

  349.     AT24C04_Start();            //起始信號
  350.     AT24C04_SendByte(0xa0);     //發送設備地址+寫信號
  351.     AT24C04_SendByte(0x00);     //發送存儲單元地址
  352.     for (i=0; i<16; i++)
  353.     {
  354.         AT24C04_SendByte(TESTDATA[i]);
  355.     }
  356.     AT24C04_Stop();             //停止信號
  357. }
  358. //從IIC總線接收一個字節數據
  359. uchar AT24C04_RecvByte()
  360. {
  361.     uchar i;
  362.     uchar dat = 0;

  363.     SDA = 1;                    //使能內部上拉,準備讀取數據
  364.     for (i=0; i<8; i++)         //8位計數器
  365.     {
  366.         dat <<= 1;
  367.         SCL = 1;                //拉高時鐘線
  368.         Delay5us();             //延時
  369.         dat |= SDA;             //讀數據
  370.         SCL = 0;                //拉低時鐘線
  371.         Delay5us();             //延時
  372.     }

  373.     return dat;
  374. }
  375. //從AT24C04讀取1頁(16字節)數據,將設備的00~0F地址中的數據讀出存放在DATA區的BUF中
  376. void AT24C04_ReadPage()
  377. {
  378.     uchar i;

  379.     AT24C04_Start();            //起始信號
  380.     AT24C04_SendByte(0xa0);     //發送設備地址+寫信號
  381.     AT24C04_SendByte(0x00);     //發送存儲單元地址
  382.     AT24C04_Start();            //起始信號
  383.     AT24C04_SendByte(0xa1);     //發送設備地址+讀信號
  384.     for (i=0; i<8; i++)
  385.     {
  386.         BUF[i] = AT24C04_RecvByte();
  387.         if (i == 7)
  388.         {
  389.             AT24C04_SendACK(1); //最后一個數據需要會NAK
  390.         }
  391.         else
  392.         {
  393.             AT24C04_SendACK(0); //回應ACK
  394.         }
  395.     }
  396.     AT24C04_Stop();             //停止信號
  397. }
  398. //********************************************************************************************************************************
  399. /*模塊名稱:菜單模塊*/
  400. /*模塊功能:用于密碼修改,先輸入舊密碼,密碼正確兩次輸入新密碼*/
  401. //********************************************************************************************************************************
  402. void new_password(void)//密碼修改函數
  403. {
  404.      uchar i,j;
  405.            uchar tempxs1[]={"old mima   MENUi"};//提示:輸入舊密碼
  406.      uchar tempxs2[]={"new mima   FIRST"};//提示:輸入新密碼一次
  407.      uchar tempxs3[]={"new mima   AGAIN"};//提示:輸入新密碼二次
  408.      uchar tempxs4[]={"password:       "};//password顯示
  409.      uchar tempxs5[]={"success  change "};//修改成功顯示
  410.      switch(menu)
  411.          {
  412.           case 1:{
  413.                 for(j=0;j<16;j++){
  414.     upxs[j]=tempxs1[j];
  415.    }
  416.                 if(tempword[5]!=0)
  417.                 {
  418.                   AT24C04_ReadPage();//讀取密碼
  419.                   for(i=0;i<8;i++)
  420.                   {
  421.                          if(BUF[i]!=0)//對比密碼,判斷是不是第一次使用
  422.                         {
  423.                             key1++;
  424.                         }
  425.                   }
  426.                   if(key1==0)//如果是第一次使用
  427.                   {
  428.                      for(i=0;i<6;i++)
  429.                     {
  430.                              if(password[i]!=tempword[i])//對比初始密碼
  431.                            {
  432.                             key++;
  433.                            }
  434.                     }
  435.                         if(key==0)//密碼正確進入菜單二輸入新密碼
  436.                     {
  437.                        delete();
  438.                            for(i=0;i<8;i++)
  439.                            {
  440.                                      tempword[i]=0;//清空緩存數組
  441.                            }
  442.                            key=0;
  443.                            key1=0;
  444.                        menu=2;
  445.                     }
  446.                   }
  447.                   if(key1!=0)//如果不是第一次使用
  448.                   {
  449.                           for(i=0;i<8;i++)
  450.                     {
  451.                             password[i]=BUF[i];
  452.                              if(password[i]!=tempword[i])//對比密碼
  453.                             {
  454.                                key++;
  455.                             }
  456.                     }
  457.                         if(key==0)//密碼正確進入菜單二輸入新密碼
  458.                     {
  459.                        delete();
  460.                            for(i=0;i<8;i++)
  461.                            {
  462.                                      tempword[i]=0;//清空緩存數組
  463.                            }
  464.                            key=0;
  465.                            key1=0;
  466.                        menu=2;
  467.                     }
  468.                   }
  469.                 }
  470.                 break;
  471.                 }
  472.           case 2:{
  473.           for(j=0;j<16;j++){
  474.     upxs[j]=tempxs2[j];
  475.    }
  476.                 if(tempword[5]!=0)
  477.                 {
  478.                    for(i=0;i<8;i++)
  479.                    {
  480.                        tempword1[i]=tempword[i];
  481.                    }
  482.                    delete();
  483.                            for(i=0;i<8;i++)
  484.                            {
  485.                                      tempword[i]=0;//清空緩存數組
  486.                            }
  487.                        menu=3;                        //進入菜單三再次輸入新密碼
  488.                 }
  489.                 break;
  490.                 }
  491.           case 3:{
  492.           for(j=0;j<16;j++){
  493.     upxs[j]=tempxs3[j];
  494.    }
  495.                 if(tempword[5]!=0)
  496.                 {
  497.                    for(i=0;i<8;i++)
  498.                    {
  499.                       if(tempword1[i]!=tempword[i])//對比密碼
  500.                          {
  501.                              key++;
  502.                          }
  503.                    }
  504.                    if(key==0)//如果第二次輸入的密碼與第一次相同
  505.                    {
  506.                        AT24C04_WritePage();  //寫入新密碼
  507.                            for(i=0;i<8;i++)
  508.                            {
  509.                                      tempword[i]=0;//清空緩存數組
  510.                                   tempword1[i]=0;//清空緩存數組
  511.                            }
  512.                           for(j=0;j<16;j++){
  513.     upxs[j]=tempxs4[j];
  514.                 dwxs[j]=tempxs5[j];
  515.    }
  516.                         key=0;
  517.                         menu=0;      //跳出密碼修改菜單
  518.                   TR1=1;
  519.                         if(time2==2)                 //顯示2秒
  520.                  {
  521.                          delete();
  522.                    TR1=0;                    //關閉定時器1
  523.                  }       
  524.                    }
  525.                    if(key!=0)//如果第二次輸入的密碼與第一次不同
  526.                    {
  527.                               for(i=0;i<8;i++)
  528.                            {
  529.                                      tempword[i]=0;//清空緩存數組
  530.                                   tempword1[i]=0;//清空緩存數組
  531.                            }
  532.                            dwxs[15]='n';
  533.                            dwxs[14]='i';
  534.                               dwxs[13]='a';
  535.                            dwxs[12]='g';
  536.                            dwxs[11]='a';
  537.                           key=0;
  538.                           menu=2;             //跳轉到菜單2
  539.                    }
  540.                 }
  541.                 }
  542.          }
  543.          KeyValue=16;             //鍵值初始
  544. }
  545. //********************************************************************************************************************************
  546. /*模塊名稱:單函數區*/
  547. /*模塊功能:一些單獨功能的函數*/
  548. //********************************************************************************************************************************
  549. void sure(void)//密碼認證函數//
  550. {
  551.      uchar i;
  552.     if(KeyValue==11)
  553.          {          
  554.          AT24C04_ReadPage();
  555.              for(i=0;i<6;i++)
  556.                  {        password[i]=BUF[i];
  557.                          if(password[i]!=tempword[i])//對比密碼
  558.                         {
  559.                             key++;
  560.                         }
  561.                  }                   
  562.                  if(key==0)                //密碼正確,輸出OK
  563.                            {
  564.                                 dwxs[13]='O';
  565.                                 dwxs[14]='K';
  566.                           shuchu=1;                    //開門
  567.                                 TR1=1;            //定時器1打開,啟動倒計時
  568.                                 moshi=0;          //輸入正確密碼可關閉報警模式
  569.                                 beep=0;           //蜂鳴器復位
  570.                                 TR0=0;                              //并且關閉定時器0
  571.                            }
  572.                  if(key!=0)           //密碼錯誤,次數累加
  573.                         {
  574.                                 dwxs[12]='E';
  575.                                 dwxs[13]='R';
  576.                                 dwxs[14]='O';
  577.                                 dwxs[15]='R';
  578.                                 warn++;
  579.                                 if(warn==3)                    //輸入錯誤3次,報警
  580.                                 {
  581.                                          keyboard=1;    //三次錯誤則鍵盤鎖住
  582.                                    TR0=1;                      //定時器0啟動
  583.                              moshi=2;                    //模式2啟動蜂鳴器報警
  584.                                    warn=0;                    //累計清零
  585.                                          TR1=1;                //啟動鍵盤鎖定倒計時
  586.                                 }
  587.                         }
  588.          }
  589. }
  590. //************************************************************************************************************************************
  591. //附功能函數//
  592. //************************************************************************************************************************************
  593. void Add_Function(void)
  594. {
  595.           switch(time2)
  596.         {
  597.     case 4:{                     //門鎖打開后4秒關閉
  598.                    shuchu=0;           //關閉門鎖電源
  599.                    delete();                       //自動清除
  600.                    if(keyboard==0)     //如果不是密碼錯誤開啟的定時器則關閉定時器1
  601.                         {
  602.                                  time2 =0;         //time2復位
  603.                                  TR1=0;            //定時器1關閉
  604.       }
  605.       break;                       
  606.                 }
  607.     case 60:{                     //鍵盤鎖定一分鐘
  608.                          keyboard=0;         //鍵盤解鎖
  609.                          time2 =0;           //time2復位
  610.                    TR1=0;                    //定時器1關閉
  611.                         break;
  612.                 }
  613.         }
  614. }
  615. //************************************************************************************************************************************
  616. //系統初始化函數//
  617. //************************************************************************************************************************************
  618. void System_init(void)
  619. {
  620.     TMOD=0x10;                                       //0001 0000//定時器1方式1,定時器0方式0
  621.           TH0=(8192-700)/32;                  //定時器0 700us 定時
  622.     TL0=(8192-700)%32;
  623.     TH1=(65536-50000)/256;  //定時器1 50ms
  624.     TL1=(65536-50000)%256;  
  625.     EA=1;  
  626.     ET0=1;
  627.           ET1=1;
  628.     shuchu=0;                                 //門鎖初始化
  629.           beep=0;                                         //警報初始化
  630.           DoorBell=0;                                     //門鈴初始化
  631.     lcd_init();                               //液晶初始化
  632. }
  633. //************************************************************************************************************************************
  634. /*模塊名稱:主函數*/
  635. /*模塊功能:程序入口*/
  636. //************************************************************************************************************************************
  637. void main(void)//主函數
  638. {
  639.    
  640.         //AT24C04_WritePage();   //密碼初始化(只需使用一次寫入初始密碼)
  641.         System_init();           //系統初始化
  642.         while(1)
  643.         {            
  644.                 if(keyboard==0)        //如果密碼錯誤三次則鎖定鍵盤
  645.          {
  646.                   KeyDown();                       //按鍵檢測
  647.          }
  648.                 keysend();                         //數據傳遞
  649.                 lcdxianshi();                 //輸入顯示
  650.                 sure();                                   //密碼認證
  651.                 condition_delete();    //按鍵清除
  652.                 new_password();        //密碼修改
  653.     Add_Function();               //附功能函數
  654.         }                               
  655. }
  656. //************************************************************************************************************************************
  657. //結束
  658. //************************************************************************************************************************************
復制代碼

下載:
電子鎖源代碼.zip (1.7 MB, 下載次數: 42)

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

使用道具 舉報

沙發
ID:171085 發表于 2017-3-16 22:23 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

板凳
ID:171612 發表于 2017-3-17 18:35 | 只看該作者
謝謝樓主
回復

使用道具 舉報

地板
ID:171666 發表于 2017-3-17 21:53 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

5#
ID:66287 發表于 2017-4-6 10:19 | 只看該作者
仿真不成功,怎么了?
回復

使用道具 舉報

6#
ID:102963 發表于 2020-12-18 09:48 | 只看該作者
這資料亂七八糟的,根本就對不上!
回復

使用道具 舉報

7#
ID:781892 發表于 2020-12-18 16:31 來自手機 | 只看該作者
比較完美
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲三区在线观看 | 日韩欧美电影在线 | 成人免费在线视频 | 日韩伦理一区二区 | 亚洲欧美国产一区二区三区 | 99爱视频 | 午夜精品久久久久久久久久久久久 | 81精品国产乱码久久久久久 | 亚洲欧美视频一区二区 | 97狠狠干 | 久久久精品影院 | 亚洲一区播放 | 欧美极品在线视频 | 久久成人一区 | 日韩在线免费视频 | 久久国产免费 | 国产一区二区三区在线看 | 久久精品国产亚洲一区二区三区 | av手机在线免费观看 | 黄色免费网 | 欧美做暖暖视频 | 欧美日韩一二区 | 日韩区| 中文字幕一级毛片 | 91精品久久久久久久久中文字幕 | 国产精品免费视频一区 | 欧美在线一二三 | 欧美xxxx网站 | 久久午夜电影 | 久久精品 | 国产精品日日摸夜夜添夜夜av | 亚洲精品中文字幕在线 | 久久久精品国产 | 久久久视 | 久久大陆 | 久久一区二区精品 | 国产在线视频在线观看 | 久久久久成人精品亚洲国产 | 国产精品久久久久久久久久久新郎 | 欧美日韩中文在线 | 欧美男人天堂 |