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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+1602顯示的密碼鎖設計 仿真與代碼都有

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /*
  2. 上電顯示8個*
  3. 輸入8個按鍵
  4. 按*開鎖
  5. 錯誤報警
  6. 再次按*修改密碼
  7. 輸入8個按鍵
  8. 按#保存密碼
  9. 按*返回主菜單


  10. */
  11. #include<AT89x51.h>
  12. #include"intrins.h"
  13. #include"key.h"
  14. #include"xsh.h"
  15. #include"24c02.h"
  16. #include"1602.h"
  17. #define ulong unsigned long
  18. bit  BJCB=0;//報警標志                                          
  19.      XG=0,//修改密碼標志位
  20.      BJ=0,//報警標志位
  21.      SJ=0;//鎖鍵盤標志位
  22.     // xg=0;//修改密碼標志位
  23. uchar PSWD0_0[16]={0};//密碼輸入緩存存儲單元
  24. //uchar code PSWD0_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//用戶初始密碼存儲單元
  25. //uchar PSWD1_0[16]={0};//讀出密碼緩存存儲單元
  26. uchar PSWD1_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};////管理員初始密碼存儲單元
  27. sbit OUT=P2^7;//輸出端口
  28. sbit L1=P3^2;//上電指示
  29. sbit L2=P3^1;//開鎖指示
  30. sbit L3=P3^0;//報警指示
  31. uint   mg=0,//密碼個數
  32.        KSC=0,//開鎖次數
  33.        BJC=0,//報警次數
  34.            TCNTY=0,//用戶按鍵定時次數累加
  35.            TCNTG=0,//管理員輸入密碼定時次數
  36.            yhsh,//用戶輸入標志位
  37.            glsh,//管理員輸標志位
  38.            shw;//密碼輸完標志位
  39. void yhmimaxig();//密碼修改程序
  40. void glmimaxig();//管理員修改程序
  41. void bjyin(ulong t)
  42. {
  43. ulong c;
  44. uint n;
  45. for(c=0;c<t;c++)
  46. {
  47. for(n=0;n<50;n++); //延時
  48. BEEP=~BEEP; //取反輸出到喇叭的信號
  49. }
  50. }
  51. void delay_10ms(void)
  52. {
  53.         uint i = 1000;
  54.         while(i--);
  55. }
  56. //////////////定時中斷服務函數//////////////////////////////////////
  57. void timer0() interrupt 1
  58. {
  59. uint i;
  60. TH0=(65536-50000)/256; //對TH0 TL0賦值50MS定時
  61. TL0=(65536-50000)%256; //重裝計數初值
  62. if(yhsh==1)
  63. {
  64.   TCNTY++;//用戶定時計數
  65.   if(shw==1)
  66. {
  67.   TR0=0;
  68.   TCNTY=0;
  69.   }
  70.   if(TCNTY==400)
  71.   {
  72.    TR0=0;//關閉T0定時器
  73.    TCNTY=0;
  74.     mg=0;//密碼個數清零
  75.         L1=1;
  76.         for(i=0;i<2;i++)//聲光報警電路
  77.          {
  78.                   L3=0;
  79.                   bjyin(1000);
  80.                   L3=1;
  81.                   delay(1000);
  82.           }
  83.           L1=0;
  84.      }
  85.     }
  86.         else if(glsh==1)
  87.             {
  88.                  TCNTG++;//管理員定時計數
  89.          if(shw==1)
  90.         {
  91.            TR0=0;
  92.            TCNTG=0;
  93.          }
  94.        if(TCNTG==400)
  95.        {
  96.         TR0=0;//關閉T0定時器
  97.         TCNTG=0;
  98.         mg=0;//密碼個數清零
  99.                 L1=1;
  100.              for(i=0;i<2;i++)//聲光報警電路
  101.             {
  102.                   L3=0;
  103.                   bjyin(1000);
  104.                   L3=1;
  105.                   delay(1000);
  106.                  }
  107.                  L1=0;
  108.                 }
  109.                 }          
  110.                 }                      
  111.             
  112. void main()
  113. {  uint i;///////////密碼輸入/////////////////
  114. init_1602();

  115. /////////////////////////////開鎖前顯示///////////////////////////  
  116. loop:  L1=0;//上電紅燈亮
  117.                     L2=1;//開鎖成功后綠燈亮
  118.                     L3=1;//輸錯時黃燈亮報警
  119.                     OUT=0;//開信號關閉
  120.         write_string(0,0,"qsrmm");
  121.               write_com(0xc0);
  122.               for(i=0;i<8;i++)
  123.                 {
  124.                  write_data(0x2a);
  125.                     }//開鎖前顯示
  126.             
  127.         ////////////////////密碼輸入///////////////////////////////////
  128. if(SJ==0)//鎖鍵盤標志位為0
  129. {
  130.   do
  131.    {
  132.     flag=0;//鍵盤標志位
  133.     key();

  134.            if(flag==1&&num<=9)
  135.            {
  136.             PSWD0_0[mg]=num;
  137.                         write_com(0xc0+mg);
  138.                   write_data(0x30+num);
  139.             mg++;//密碼個數
  140.             }
  141.                  //刪除未使用//
  142.           if(flag==1&&num==14&&mg>=1)//輸入錯誤刪除
  143.            {
  144.             mg=mg-1;
  145.             }
  146.           if(mg==1) //有密碼鍵按下開定時器限時
  147.            {
  148.             TR0=1;
  149.             yhsh=1;
  150.            }
  151.    }       
  152.    while(num!=11);
  153.          //////////////////密碼比較////////////////////////
  154. if(flag==1&&num==11)  
  155. { flag=0;
  156.    yhsh=0;
  157.    shw=1;
  158.    num=0;
  159.   for(i=0;i<8;i++)        //從24c02里讀出16個密碼
  160.   {
  161.     PSWD1_1[i]=i2cRead24LC16B(i);
  162.     delay_10ms;  
  163.   }
  164.   for(i=0;i<8;i++)
  165. {
  166.    if(PSWD1_1[i]!=PSWD0_0[i])
  167.    {
  168.      BJCB=1;
  169.      break;
  170.         }
  171.    else
  172.      BJCB=0;       
  173.    
  174.   }
  175. /////////////////////////////////////////////////////////////
  176. ///////////////////////////////////////////////////////////////
  177.         //////////////////////報警/////////////////////////////////
  178.    if(BJCB!=0)
  179.        {
  180.              BJC++;
  181.                  if(BJC!=3) //輸錯3次密碼         
  182.             {
  183.                  BJCB=0; //第一次和第二次報警
  184.              delay(500);
  185.                  mg=0;//密碼個數清零
  186.                  L1=1;//上電指示
  187.                  for(i=0;i<3;i++)//聲光報警電路
  188.                  {
  189.                   L3=0;//報警指示
  190.                   write_string(0,0,"mimacuowu BJ");  //顯示報警
  191.                   bjyin(1000);
  192.                   L3=1;//報警指示
  193.                   delay(1000);
  194.                   }
  195.                  goto loop;         //開鎖前顯示
  196.                 }
  197.                         //第三次輸錯密碼//
  198.           else if(BJC==3)
  199.             {
  200.                    BJC=0;
  201.              BJCB=0;
  202.              write_string(0,0,"mima3cuowu BJ");//顯示三次輸入密碼失敗,自鎖
  203.              SJ=1;//鎖鍵盤標志位
  204.              mg=0;//密碼個數清零
  205.                    L1=1;//上電
  206.                    for(i=0;i<2;i++)//聲光報警電路
  207.                    {
  208.                      L3=0;//報警
  209.                      bjyin(1000);
  210.                      L3=1;
  211.                      delay(1000);
  212.                   }
  213.              goto loop;
  214.                 }
  215.                         /////沒有報警//
  216.                 }               
  217.            else
  218.            if(BJCB==0)
  219.           {
  220.            KSC++;
  221.            write_string(0,0,"ok-KS");         //顯示開鎖ok
  222.            i2cWrite24LC16B(KSC,0X20);//寫入開鎖次數到24c01 0x20
  223.            if(KSC==100)
  224.            {
  225.             SJ=1;
  226.                  }
  227.            L2=0;//開鎖成功后綠燈亮
  228.            L1=1;
  229.            OUT=1;//開信號打開
  230.            mg=0;//密碼個數清零
  231. loop1:do           //鍵盤掃描等待功能鍵按下
  232.            {
  233.             flag=0;
  234.             key();
  235.                 if(flag)
  236.            {       
  237.              flag=0;
  238.             switch(num)
  239.            {   
  240.             case 11:         //按#開始修改密碼  
  241.                 {
  242.                                          write_string(0,0,"xg_mm");
  243.                  write_com(0xc0);
  244.                  for(i=0;i<8;i++)
  245.                  {
  246.                  write_data(0x2a);
  247.                     }//開鎖前顯示
  248.                              do
  249.             {
  250.              flag=0;//鍵盤標志位
  251.              key();
  252.                                                         //修改密碼
  253.                                                         if(flag==1&&num<=9)
  254.                       {
  255.                        PSWD0_0[mg]=num;
  256.                                    write_com(0xc0+mg);
  257.                              write_data(0x30+num);
  258.                        mg++;//密碼個數
  259.                          }
  260.                      if(mg==8)
  261.                        {
  262.                          do           //鍵盤掃描等待功能鍵按下
  263.                     {
  264.                            flag=0;
  265.                            key();
  266.                              }
  267.                          while(num!=12);
  268.                         }
  269.                  }       
  270.                while(num!=12);
  271.       if(mg!=8&&num==12)
  272.      {
  273.       for(i=mg;i<8;i++)
  274.          {
  275.            PSWD0_0[i]=0;
  276.           }
  277.          }
  278.         if(flag==1&&num==12)
  279.    {
  280.      flag=0;       
  281.          mg=0;
  282.    for(i=0;i<8;i++)        //用一次寫一個向24c02里寫
  283.   {
  284.    i2cWrite24LC16B(PSWD0_0[i],i);
  285.    delay_10ms;  
  286.   }
  287.            write_string(0,1,"XG_OK      ");         //顯示開鎖ok
  288.            delay(1000);
  289.            goto loop;
  290.        
  291.    do           //鍵盤掃描等待功能鍵按下
  292.    {
  293.          flag=0;
  294.          key();
  295.         }
  296.         while(num!=11); //按下返回鍵,鎖鎖返回
  297.         {
  298.       goto loop;
  299.         }
  300.     }
  301.         };break;
  302.                

  303.                     }
  304.                         }
  305.                         }
  306.           while(flag!=0);//如果設置密碼鍵按下
  307.           goto loop1;
  308. // i2cWrite24c02_page(0x00,PSWD1_1,mg);
  309.    }
  310.    }
  311.   }
  312. }
復制代碼

所有資料51hei提供下載:
8位密碼鎖ok.rar (128.59 KB, 下載次數: 37)

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品丝袜日韩 | 国产日韩一区二区三区 | 久久久www成人免费精品张筱雨 | 欧美男人天堂 | 操亚洲 | www.日韩| 久久99精品久久久久婷婷 | 日韩欧美操 | 超碰天天| 狠狠爱免费视频 | 久国产精品 | 日韩在线视频一区 | 九九伦理片 | 99免费精品视频 | 日韩在线中文字幕 | 精产国产伦理一二三区 | 精品久久久网站 | 91欧美精品成人综合在线观看 | 一级片视频免费观看 | 久草免费电影 | 黄a大片 | 成人av观看 | 黄色在线免费播放 | 两性午夜视频 | 久久国产美女视频 | 黄在线免费观看 | 91视频国产精品 | 亚洲精品一区久久久久久 | 国产精品欧美一区二区三区不卡 | 久久久免费 | 人人鲁人人莫人人爱精品 | 国产亚洲成av人在线观看导航 | a毛片| 亚洲精品在线看 | 精品国产31久久久久久 | 免费看日韩视频 | 男女搞网站 | 亚洲天堂999 | 亚洲精品短视频 | 亚洲精品久久久久久宅男 | 日本不卡免费新一二三区 |