欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

獨(dú)立按鍵密碼鎖程序+流程圖

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

這是流程圖

  1. //===============================================================
  2. //程序編寫(xiě)人:蘭建文
  3. //編寫(xiě)地點(diǎn)
  4. //時(shí)間7月9日晚上  星期四
  5. //功能:本程序?qū)崿F(xiàn)任意四個(gè)按鍵長(zhǎng)按3S,連按3次(兩次按鍵間隔不得等
  6. //于1S),再按一下密碼確認(rèn)鍵,正確顯示“GOOD”,不正確顯示“BAD”,
  7. //實(shí)現(xiàn)獨(dú)立按鍵密碼鎖功能。利用定時(shí)器實(shí)現(xiàn)按鍵消抖。數(shù)碼管為共陽(yáng)極,
  8. //低電平點(diǎn)亮.
  9. //===============================================================
  10. #include <reg51.h>      //定義8051單片機(jī)所有I/O口
  11. #define  uchar  unsigned char
  12. #define  Key    P1      //定義按鍵輸入口
  13. #define  OutPut P2      //定義輸出口
  14. #define  PianXuan P3              //定義片選口
  15. bit    Bt0;              //節(jié)拍標(biāo)志位
  16. bit    AnJian1;       //按鍵標(biāo)志位
  17. bit    AnJian2;       //有按鍵按下標(biāo)志位
  18. bit    ChangAn;       //長(zhǎng)按標(biāo)志位
  19. bit    LianAn;       //連按標(biāo)志位      
  20. uchar  TimeCount1;      //長(zhǎng)按計(jì)時(shí)1S變量
  21. uchar  TimeCount2;      //連按間隔計(jì)時(shí)1S變量
  22. uchar  LianAnCount;      //連按次數(shù)變量
  23. uchar code  tempt1[]={0x0c0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90};//共陽(yáng)數(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í)函數(shù)
  27. main()        //主函數(shù)
  28. {                  
  29. TMOD=0x01;                      //開(kāi)定時(shí)器及開(kāi)定時(shí)器中斷
  30. TH0=0xb1;
  31. TL0=0xe0;
  32.     TR0=1;
  33.     EA=1;
  34.     ET0=1;         
  35. LianAn=0;      //標(biāo)志位復(fù)位
  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)  //判斷確認(rèn)密碼按鍵是否按下
  46.   {
  47.    OutPut=0xbf;   //沒(méi)按下就顯示“------”
  48.    PianXuan=0xff;
  49.   }
  50.   else
  51.   {
  52.    if(ChangAn&&LianAn)  //按下了,判斷是否有長(zhǎng)按和連按
  53.    {
  54.     while(1)    //有長(zhǎng)按和連按,則顯示“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       //沒(méi)長(zhǎng)按和連按,則顯示“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é)拍標(biāo)志位清零
  86.    if(AnJian2==1)      //判斷是否有鍵按下
  87.    {
  88.     if(TimeCount2--==0)    //判斷下一次按鍵間隔是否為1S
  89.     {
  90.      LianAnCount=0;    //為1S,復(fù)位
  91.      TimeCount2=50;
  92.      AnJian2=0;
  93.     }
  94.     else
  95.     {
  96.      if(LianAnCount==3) //不為1S,則判斷是否連續(xù)按鍵3次
  97.      {
  98.       LianAn=1;  //有3次則連按標(biāo)志位置1
  99.       TimeCount2=50;
  100.       AnJian2=0;
  101.       LianAnCount=0;
  102.      }
  103.     }
  104.    }
  105.    if((Key&0x0f)!=0x0f)  //判斷是否有鍵按下
  106.    {
  107.     if(AnJian1==0)   //有鍵按下,判斷按鍵標(biāo)志位是否為0,20MS消抖作用
  108.     {
  109.      AnJian1=1;   //為1,則按鍵標(biāo)志位置1
  110.      AnJian2=1;   //有鍵按下標(biāo)志位置1
  111.      TimeCount2=50;  //連按計(jì)時(shí)復(fù)位
  112.      LianAnCount++;     //按鍵次數(shù)加1
  113.     }
  114.     else   
  115.     {
  116.      if(TimeCount1--==0)  //為1判斷按鍵是否一直按了3S
  117.       ChangAn=1;   //按了3S,則長(zhǎng)按標(biāo)志位置1
  118.      if((Key&0x0f)==0x0f) //判斷按鍵是否還按著
  119.      {
  120.       TimeCount1=150;  //抬起了,則長(zhǎng)按計(jì)時(shí)復(fù)位
  121.       AnJian1=0;   //按鍵標(biāo)志位清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í)器服務(wù)函數(shù)
  137. {
  138. TH0=0xb1;
  139.     TL0=0xe0;
  140. Bt0=1;
  141. }
  142. void DeLayMS(uchar N)       //延時(shí)函數(shù)
  143. {
  144. uchar i,j;
  145. for(i=N;i>0;i--)
  146.   for(j=50;j>0;j--);  
  147. }
復(fù)制代碼




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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表