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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的模擬輸入密碼錯誤后續處理設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:365788 發表于 2018-7-7 22:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
模擬輸入密碼錯誤處理系統,用一個按鍵K3模擬密碼字符的輸入
用一個按鍵K4模擬密碼輸入確認,用一個LED來模擬報警,此時默認K3輸入的密碼都是錯的,想要去自己去另外設計密碼的可以自己去加功能,這里只是拋磚引玉,
基本要求:(1)當輸入密碼錯誤5次,則回收報警指示燈D0點亮20秒;
                (2)在回收報警指示燈D0亮起的20秒鐘內,不接收按鍵上輸入的密碼信息。
                (3)20秒以后,可以重復之前的操作
說明:(1)本實驗的每一次按鍵都寫了松手檢測,導致篇幅很長,有好的算法的朋友請告訴我有什么辦法可以直接寫一個函數就直接把十次按鍵都按下和松手都確定了,
          (2)本實驗已經在硬件上測試過,穩定無誤。
由于篇幅所限,下面只貼部分代碼,具體代碼請看附件

單片機源程序如下:


  1. #include<reg52.h>
  2. sbit K3 = P3^2; //外部中斷0對應的按鍵變量
  3. sbit K4 = P3^3; //外部中斷?對應的按鍵變量
  4. sbit led = P2^0;

  5. unsigned int Timercnt;
  6. unsigned char smguan[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7c,0x39,0x5E,0x79,0x71};
  7. unsigned char daojishigewei;
  8. unsigned char daojishishiwei;
  9. void MimaFun( );
  10. unsigned char JishuFun();

  11. unsigned int TouchTimeK3;
  12. unsigned int TouchTimeK4;
  13. unsigned int i;
  14. unsigned int  signal1,signal2,signal3,signal4,signal5;
  15. unsigned int signal6,signal7,signal8,signal9,signal10;
  16. void delay8(unsigned int t)
  17. {
  18.         while (--t);

  19. }



  20. void IntFun() interrupt 1     //中斷函數
  21. {
  22.     Timercnt ++;                //計數次數

  23.     TH0=0xFC;                   //重裝定時器初始值
  24.     TL0=0x17;

  25.     if(Timercnt == 1000)        //1000*1000us=1s
  26.     {   

  27.             
  28.         JishuFun();
  29.                
  30.         Timercnt = 0;

  31.     }
  32. }

  33. unsigned char JishuFun()                //20秒時間倒計時程序
  34. {
  35.         if((daojishigewei==0)&&(daojishishiwei!=0))
  36.         {
  37.                 daojishishiwei--;
  38.                 daojishigewei=9;
  39.                 return 0;
  40.         }
  41.         if(daojishigewei!=0)
  42.         {
  43.                 daojishigewei--;
  44.         }
  45.         if(daojishigewei==0&&(daojishishiwei==0))
  46.         {
  47.                 P0=0xfe;
  48.         
  49.         }
  50. }




  51. void main( )
  52. {
  53.     /*中斷系統的定義*/
  54.     IT0 = 1;   //外部中斷0的邊沿信號
  55.     EX0 = 1;   //外部中斷0的中斷允許
  56.     EA  = 1;   //CPU的中斷總允許

  57.     TR0 = 0;   //定時器0的開啟
  58.     ET0 = 1;   //定時器0的中斷允許
  59.     EA  = 1;   //CPU的中斷總允許

  60.     TMOD=0x01;      //定時器T0,方式一,16位
  61.     TH0=0xFC;       //計1000次,每次1000微秒,計數初始值64535
  62.     TL0=0x17;  

  63.     daojishigewei=9;        //倒計時初始化,此處從19開始是因為0~1也算是一秒
  64.         daojishishiwei=1;   

  65.     TouchTimeK3=0;
  66.     TouchTimeK4=0;

  67.         

  68.     while(1)     //動態停機,等待中斷信號
  69.         {   
  70.         //第一次按下K3,K4按鍵
  71.         if(TouchTimeK3==0  && K3==0)      //第一次按下K3按鍵
  72.         {
  73.                 delay8(1000);  //消抖
  74.                 if(K3==0)       //確認第一次K3按鍵已經按下
  75.                 {  
  76.                     
  77.                     signal1=1;

  78.                         
  79.                 }
  80.         }
  81.         if(signal1==1 && K3==1)    //第一次K3按鍵松手
  82.             {
  83.                 delay8(1000);
  84.                 if(K3==1)           //確認第一次K3按鍵已經松手
  85.                 {
  86.                     TouchTimeK3=1;    //第一次按鍵成功,按鍵次數記為1
  87.                
  88.                     signal1=0;   //標志位回0,以免誤操作
  89.                 }
  90.             }

  91.         if(TouchTimeK4==0  && K4==0)      //第一次按下K4按鍵
  92.         {
  93.                 delay8(1000);  //消抖
  94.                 if(K4==0)       //確認第一次K4按鍵已經按下
  95.                 {  
  96.                     
  97.                     signal2=1;

  98.                         
  99.                 }
  100.             }
  101.         if(signal2==1 && K4==1)    //第一次K4按鍵松手
  102.             {
  103.                 delay8(1000);
  104.                 if(K4==1)           //確認第一次K4按鍵已經松手
  105.                 {
  106.                     TouchTimeK4=1;    //第一次K4按鍵成功,按鍵次數記為1
  107.                
  108.                     signal2=0;   //標志位回0,以免誤操作
  109.                 }
  110.             }
  111.         
  112.         //第二次按下K3,K4按鍵
  113.         if(TouchTimeK3==1  && K3==0)      //第二次按下K3按鍵
  114.         {
  115.                 delay8(1000);  //消抖
  116.                 if(K3==0)       //確認第二次K3按鍵已經按下
  117.                 {  
  118.                     
  119.                     signal3=1;

  120.                         
  121.                 }
  122.         }
  123.      if(signal3==1 && K3==1)    //第二次K3按鍵松手
  124.         {
  125.             delay8(1000);
  126.             if(K3==1)           //確認第二次K3按鍵已經松手
  127.             {
  128.                 TouchTimeK3=2;    //第二次按鍵成功,按鍵次數記為1
  129.                
  130.                 signal3=0;   //標志位回0,以免誤操作
  131.             }
  132.         }

  133.         if(TouchTimeK4==1  && K4==0)      //第二次按下K4按鍵
  134.         {
  135.                 delay8(1000);  //消抖
  136.                 if(K4==0)       //確認第二次K4按鍵已經按下
  137.                 {  
  138.                     
  139.                     signal4=1;

  140.                         
  141.                 }
  142.             }
  143.         if(signal4==1 && K4==1)    //第一次K4按鍵松手
  144.             {
  145.                 delay8(1000);
  146.                 if(K4==1)           //確認第一次K4按鍵已經松手
  147.                 {
  148.                     TouchTimeK4=2;    //第一次K4按鍵成功,按鍵次數記為1
  149.                
  150.                     signal4=0;   //標志位回0,以免誤操作
  151.                 }
  152.             }

  153.             //第三次按下K3,K4按鍵
  154.             if(TouchTimeK3==2  && K3==0)      //第三次按下K3按鍵
  155.             {
  156.                     delay8(1000);  //消抖
  157.                     if(K3==0)       //確認第三次K3按鍵已經按下
  158.                     {  
  159.                         
  160.                         signal5=1;

  161.                            
  162.                     }
  163.             }
  164.             if(signal5==1 && K3==1)    //第三次K3按鍵松手
  165.                 {
  166.                     delay8(1000);
  167.                     if(K3==1)           //確認第三次K3按鍵已經松手
  168.                     {
  169.                         TouchTimeK3=3;    //第三次按鍵成功,按鍵次數記為1
  170.                     
  171.                         signal5=0;   //標志位回0,以免誤操作
  172.                     }
  173.                 }

  174.             if(TouchTimeK4==2  && K4==0)      //第三次按下K4按鍵
  175.             {
  176.                     delay8(1000);  //消抖
  177.                     if(K4==0)       //確認第一次K4按鍵已經按下
  178.                     {  
  179.                         
  180.                         signal6=1;

  181.                            
  182.                     }
  183.                 }
  184.         if(signal6==1 && K4==1)    //第一次K4按鍵松手
  185.             {
  186.                 delay8(1000);
  187.                 if(K4==1)           //確認第一次K4按鍵已經松手
  188.                 {
  189.                     TouchTimeK4=3;    //第一次K4按鍵成功,按鍵次數記為1
  190.                
  191.                     signal6=0;   //標志位回0,以免誤操作
  192.                 }
  193.             }
  194.         //第四次按下K3,K4按鍵
  195.         if(TouchTimeK3==3  && K3==0)      //第四次按下K3按鍵
  196.         {
  197.                 delay8(1000);  //消抖
  198.                 if(K3==0)       //確認第四次K3按鍵已經按下
  199.                 {  
  200.                     
  201.                     signal7=1;

  202.                         
  203.                 }
  204.         }
  205.      if(signal7==1 && K3==1)    //第四次K3按鍵松手
  206.         {
  207.             delay8(1000);
  208.             if(K3==1)           //確認第四次K3按鍵已經松手
  209.             {
  210.                 TouchTimeK3=4;    //第四次K3按鍵成功,按鍵次數記為1
  211.                
  212.                 signal7=0;   //標志位回0,以免誤操作
  213.             }
  214.         }

  215.         if(TouchTimeK4==3  && K4==0)      //第四次按下K4按鍵
  216.         {
  217.                 delay8(1000);  //消抖
  218.                 if(K4==0)       //確認第四次K4按鍵已經按下
  219.                 {  
  220.                     
  221.                     signal8=1;

  222.                         
  223.                 }
  224.             }
  225.         if(signal8==1 && K4==1)    //第四次K4按鍵松手
  226.             {
  227.                 delay8(1000);
  228.                 if(K4==1)           //確認第四次K4按鍵已經松手
  229.                 {
  230.                     TouchTimeK4=4;    //第四次K4按鍵成功,按鍵次數記為1
  231.                
  232.                     signal8=0;   //標志位回0,以免誤操作
  233.                 }
  234.             }
  235.         //第五次按下K3,K4按鍵
  236.         if(TouchTimeK3==4  && K3==0)      //第五次按下K3按鍵
  237.         {
  238.                 delay8(1000);  //消抖
  239.                 if(K3==0)       //確認第五次K3按鍵已經按下
  240.                 {  
  241.                     
  242.                     signal9=1;

  243.                         
  244.                 }
  245.         }
  246.         if(signal9==1 && K3==1)    //第五次K3按鍵松手
  247.         {
  248.             delay8(1000);
  249.             if(K3==1)           //確認第五次K3按鍵已經松手
  250.             {
  251.                 TouchTimeK3=5;    //第五次按鍵成功,按鍵次數記為1
  252.                
  253.                 signal9=0;   //標志位回0,以免誤操作
  254.             }
  255.         }

  256.         if(TouchTimeK4==1  && K4==0)      //第五次按下K4按鍵
  257.         {
  258.                 delay8(1000);  //消抖
  259.                 if(K4==0)       //確認第五次K4按鍵已經按下
  260.                 {  
  261.                     
  262.                     signal10=1;

  263.                         
  264.                 }
  265.             }
  266.         if(signal10==1 && K4==1)    //第五次K4按鍵松手
  267.             {
  268.                 delay8(1000);
  269.                 if(K4==1)           //確認第五次K4按鍵已經松手
  270.                 {
  271.                     TouchTimeK4=5;    //第五次K4按鍵成功,按鍵次數記為1
  272.                
  273.                     signal10=0;   //標志位回0,以免誤操作
  274.                 }
  275.             }

  276.         
  277.         if(K3!=0 && K4!=0 && TouchTimeK3==5  && TouchTimeK4==5) //k3和k4都分別已經按下5次
  278.         {   
  279.                         TR0=1;                       //k3、k4都分別已經按下5次之后就使定時器T0開啟,開始計時
  280.                                        

  281.                         for(i=0;i<=19;i++)  //循環語句使數碼管從19到0都點亮
  282.                         {

  283.             led=0;  // 輸出的指示小燈,用來模擬回收報警


  284.             P2=0x18;     //數碼管顯示從19倒數到0的20s倒計時
  285.             P0=smguan[daojishigewei];
  286.             delay8(500);

  287.             P2=0x1c;
  288.             P0=smguan[daojishishiwei];
  289.             delay8(500);
  290.             
  291.             P0=smguan[0x00];

  292.         
  293.                     }

  294.             if(i>19)
  295.             {
  296.                 led=1;  //20s結束,LED小燈熄滅
  297.             }

  298.                         

  299.         }
  300.    
  301.         }


  302. }
復制代碼


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

使用道具 舉報

沙發
ID:383374 發表于 2019-1-22 20:37 來自手機 | 只看該作者
不錯的東西
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久三级 | 久久丝袜| 九九热免费看 | 国产精品久久久久一区二区三区 | 在线视频成人 | 中文字幕动漫成人 | 美女福利视频 | 午夜播放器在线观看 | 在线观看免费观看在线91 | 日韩一区二区三区四区五区 | 在线观看免费福利 | 国产精品久久777777 | 九九热这里只有精品在线观看 | 久久精品亚洲欧美日韩久久 | 免费看的黄网站 | 国产精品久久久久久久久免费桃花 | 国产精品久久久久久久久久久久 | 亚洲精品一区在线观看 | 538在线精品| 日韩精品成人在线 | 精品视频一区二区三区在线观看 | 日本三级网址 | 国产一区电影 | 国产精品成人在线 | 久久久久久一区 | 亚州av| 最新国产精品 | 日韩欧美一区二区三区免费观看 | 成人精品国产一区二区4080 | 亚洲国产成人精品女人久久久 | 亚洲精品一区二区三区蜜桃久 | 欧美一区二区在线播放 | 欧美性网 | 国产激情一区二区三区 | 精品福利在线 | 成人午夜免费福利视频 | 日韩一级不卡 | 99pao成人国产永久免费视频 | 国产一级视频在线观看 | 欧产日产国产精品v | 超碰美女在线 |