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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10582|回復: 0
打印 上一主題 下一主題
收起左側(cè)

獨立按鍵密碼鎖程序+流程圖

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70976 發(fā)表于 2014-12-27 16:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 daniu 于 2014-12-27 16:55 編輯

這是流程圖

  1. //===============================================================
  2. //程序編寫人:蘭建文
  3. //編寫地點
  4. //時間7月9日晚上  星期四
  5. //功能:本程序?qū)崿F(xiàn)任意四個按鍵長按3S,連按3次(兩次按鍵間隔不得等
  6. //于1S),再按一下密碼確認鍵,正確顯示“GOOD”,不正確顯示“BAD”,
  7. //實現(xiàn)獨立按鍵密碼鎖功能。利用定時器實現(xiàn)按鍵消抖。數(shù)碼管為共陽極,
  8. //低電平點亮.
  9. //===============================================================
  10. #include <reg51.h>      //定義8051單片機所有I/O口
  11. #define  uchar  unsigned char
  12. #define  Key    P1      //定義按鍵輸入口
  13. #define  OutPut P2      //定義輸出口
  14. #define  PianXuan P3              //定義片選口
  15. bit    Bt0;              //節(jié)拍標志位
  16. bit    AnJian1;       //按鍵標志位
  17. bit    AnJian2;       //有按鍵按下標志位
  18. bit    ChangAn;       //長按標志位
  19. bit    LianAn;       //連按標志位      
  20. uchar  TimeCount1;      //長按計時1S變量
  21. uchar  TimeCount2;      //連按間隔計時1S變量
  22. uchar  LianAnCount;      //連按次數(shù)變量
  23. uchar code  tempt1[]={0x0c0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90};//共陽數(shù)據(jù)代碼
  24. uchar code  tempt2[]={0x90,0xc0,0xc0,0xa1};           //“GOOD”代碼
  25. uchar code  tempt3[]={0x83,0x88,0xa1};            //“BAD”代碼
  26. void DeLayMS(uchar N);    //聲明延時函數(shù)
  27. main()        //主函數(shù)
  28. {                  
  29. TMOD=0x01;                      //開定時器及開定時器中斷
  30. TH0=0xb1;
  31. TL0=0xe0;
  32.     TR0=1;
  33.     EA=1;
  34.     ET0=1;         
  35. LianAn=0;      //標志位復位
  36. ChangAn=0;
  37. Bt0=0;
  38. TimeCount1=150;
  39. TimeCount2=50;
  40. AnJian1=0;
  41. AnJian2=0;
  42. LianAnCount=0;      
  43. while(1)      //死循環(huán)
  44. {
  45.   if((Key&0x10)==0x10)  //判斷確認密碼按鍵是否按下
  46.   {
  47.    OutPut=0xbf;   //沒按下就顯示“------”
  48.    PianXuan=0xff;
  49.   }
  50.   else
  51.   {
  52.    if(ChangAn&&LianAn)  //按下了,判斷是否有長按和連按
  53.    {
  54.     while(1)    //有長按和連按,則顯示“GOOD”
  55.     {
  56.      uchar i,b=0x02;
  57.      for(i=0;i<4;i++)
  58.      {
  59.       OutPut=tempt2;
  60.       PianXuan=b;
  61.       DeLayMS(1);
  62.       PianXuan=0x00;
  63.       b=b<<1;
  64.      }
  65.     }
  66.    }
  67.    else       //沒長按和連按,則顯示“BAD”
  68.    {
  69.     while(1)
  70.     {
  71.      uchar i,b=0x02;
  72.      for(i=0;i<3;i++)
  73.      {
  74.       OutPut=tempt3;
  75.       PianXuan=b;
  76.       DeLayMS(1);
  77.       PianXuan=0x00;
  78.       b=b<<1;
  79.      }
  80.     }
  81.    }
  82.   }
  83.   if(Bt0==1)        //等待節(jié)拍
  84.   {         
  85.    Bt0=0;        //節(jié)拍標志位清零
  86.    if(AnJian2==1)      //判斷是否有鍵按下
  87.    {
  88.     if(TimeCount2--==0)    //判斷下一次按鍵間隔是否為1S
  89.     {
  90.      LianAnCount=0;    //為1S,復位
  91.      TimeCount2=50;
  92.      AnJian2=0;
  93.     }
  94.     else
  95.     {
  96.      if(LianAnCount==3) //不為1S,則判斷是否連續(xù)按鍵3次
  97.      {
  98.       LianAn=1;  //有3次則連按標志位置1
  99.       TimeCount2=50;
  100.       AnJian2=0;
  101.       LianAnCount=0;
  102.      }
  103.     }
  104.    }
  105.    if((Key&0x0f)!=0x0f)  //判斷是否有鍵按下
  106.    {
  107.     if(AnJian1==0)   //有鍵按下,判斷按鍵標志位是否為0,20MS消抖作用
  108.     {
  109.      AnJian1=1;   //為1,則按鍵標志位置1
  110.      AnJian2=1;   //有鍵按下標志位置1
  111.      TimeCount2=50;  //連按計時復位
  112.      LianAnCount++;     //按鍵次數(shù)加1
  113.     }
  114.     else   
  115.     {
  116.      if(TimeCount1--==0)  //為1判斷按鍵是否一直按了3S
  117.       ChangAn=1;   //按了3S,則長按標志位置1
  118.      if((Key&0x0f)==0x0f) //判斷按鍵是否還按著
  119.      {
  120.       TimeCount1=150;  //抬起了,則長按計時復位
  121.       AnJian1=0;   //按鍵標志位清0
  122.      }
  123.     }
  124.    }
  125.    else
  126.    {
  127.     if((Key&0x0f)==0x0f)
  128.     {
  129.      TimeCount1=150;
  130.      AnJian1=0;
  131.     }
  132.    }
  133.   }
  134. }
  135. }
  136. void T0Ser(void) interrupt 1 using 0   //定時器服務函數(shù)
  137. {
  138. TH0=0xb1;
  139.     TL0=0xe0;
  140. Bt0=1;
  141. }
  142. void DeLayMS(uchar N)       //延時函數(shù)
  143. {
  144. uchar i,j;
  145. for(i=N;i>0;i--)
  146.   for(j=50;j>0;j--);  
  147. }
復制代碼




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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品欧美精品日韩精品 | 精品视频一区二区三区在线观看 | 在线国产一区 | 国产一区 | 国产日韩av一区二区 | 四虎影院新网址 | av免费看在线 | 五月婷婷视频 | 成人h动漫精品一区二区器材 | 久久久久黄色 | www.se91| 成人av免费网站 | 中文字幕一区二区三区在线乱码 | 亚洲国产成人精品一区二区 | 性欧美精品一区二区三区在线播放 | 欧美久久一级 | 国产伦精品一区二区三区高清 | 国产欧美一区二区三区久久人妖 | 色资源站 | 日韩三级免费网站 | 国产精品久久久久久久久久久久 | 淫片一级国产 | 日韩久久精品电影 | 色综合一区二区三区 | 超碰电影 | 国产午夜精品理论片a大结局 | 中文字幕日韩一区二区 | 亚洲日韩欧美一区二区在线 | 日本一区二区在线视频 | 国产精品久久久久aaaa樱花 | 精品欧美一区二区中文字幕视频 | 黄色片网此 | 亚洲国产成人久久久 | 亚洲综合在线一区 | 中文字幕一区二区三区乱码在线 | 欧州一区 | k8久久久一区二区三区 | 欧美亚洲另类丝袜综合网动图 | 欧美看片| 人碰人操 | 99pao成人国产永久免费视频 |