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

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

QQ登錄

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

搜索
查看: 5050|回復(fù): 0
收起左側(cè)

利用單片機(jī)中斷延時(shí)消除按鍵抖動(dòng)

[復(fù)制鏈接]
ID:88481 發(fā)表于 2019-9-5 12:37 | 顯示全部樓層 |閱讀模式
利用delay()的延時(shí)消除按鍵抖動(dòng),用while(!K)等語(yǔ)句檢測(cè)松手動(dòng)作,這種按鍵處理程序,簡(jiǎn)單易懂,許多初學(xué)者喜歡使用。但如果程序端口有檢測(cè)信號(hào)的話,十幾二十毫秒的延時(shí)錯(cuò)過(guò)了不少檢測(cè)信號(hào)。如果按鍵一直按著或按鍵損壞短接了,程序就會(huì)一直停留在這里不能運(yùn)行了。設(shè)置2毫秒的中斷延時(shí),利用中斷延時(shí)避開(kāi)主程序過(guò)長(zhǎng)的周期。將按鍵檢測(cè)分為兩種狀態(tài),在檢測(cè)按鍵按下?tīng)顟B(tài)中完成延時(shí)消抖,后進(jìn)入檢測(cè)按鍵松開(kāi)。
水平有限,貼上程序大家共同探討。

單片機(jī)源程序如下:
  1. #include <reg52.h>

  2. typedef signed long slong;
  3. typedef signed int sint;
  4. typedef  signed char schar

  5. typedef unsigned long ulong;
  6. typedef unsigned int uint;
  7. typedef unsigned char uchar;

  8. #define SEG_DB P0                 //數(shù)碼管
  9. sbit SEG_WE = P2^7;                 //數(shù)碼管位選
  10. sbit SEG_DU = P2^6;                 //數(shù)碼管段選
  11. sbit Keyin1 = P3^4;
  12. //sbit Keyin2 = P3^5;
  13. //sbit Keyin3 = P3^6;
  14. //sbit Keyin4 = P3^7;
  15. sbit Keyout1 = P3^0;
  16. //sbit Keyout2 = P3^1;
  17. //sbit Keyout3 = P3^2;
  18. //sbit Keyout4 = P3^3;

  19. bit Keytan=1;
  20. uchar T0RH,T0RL;
  21. uchar Ledtmp[6];
  22. uint cou;
  23. uchar code Ledchar[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  24.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  25. void ConfigTimer0(uchar ms);
  26. void KeyDrive();

  27. void main()
  28. {
  29.         schar j;
  30.         uchar buf[6];

  31.         Keyout1 = 0;
  32.         ConfigTimer0(2);
  33.         Ledtmp[0] = Ledchar[2];
  34.         while (1)
  35.         {
  36.                 KeyDrive();                                         
  37.                 buf[0] = cou%10;
  38.                 buf[1] = cou/10%10;
  39.                 buf[2] = cou/100%10;                    
  40.                 buf[3] = cou/1000%10;
  41.                 buf[4] = cou/10000%10;
  42.                 buf[5] = cou/100000%10;
  43.                 for (j=5;j>=1;j--)                                                //消隱高位數(shù)的0
  44.                 {
  45.                         if (buf[j] == 0)
  46.                                 Ledtmp[j] = 0x00;
  47.                         else
  48.                                 break;
  49.                 }
  50.                 for (;j>=0;j--)
  51.                 {
  52.                         Ledtmp[j] = Ledchar[buf[j]];
  53.                 }                                                                                
  54.         }
  55. }

  56. void KeyDrive()
  57. {
  58.         static Keybuf = 1;

  59.         if (Keybuf != Keytan)
  60.         {
  61.                 if (Keybuf == 1)
  62.                 {
  63.                         cou++;               
  64.                 }
  65.                 Keybuf = Keytan;
  66.         }
  67. }

  68. void LedPlay()
  69. {
  70.         static uchar i=0;

  71.         SEG_DB = 0xff;
  72.         SEG_WE = 1;
  73.         SEG_WE = 0;
  74.         SEG_DB = Ledtmp[i];
  75.         SEG_DU = 1;
  76.         SEG_DU = 0;
  77.         SEG_DB = ~(0x20>>i);
  78.         SEG_WE = 1;
  79.         SEG_WE = 0;
  80.         i++;
  81.         if (i == 6)
  82.                 i = 0;
  83. }

  84. void KeyScan()
  85. {
  86.         static uchar kmode=0;
  87.         static uchar i;

  88.         switch (kmode)
  89.         {
  90.                 case 0:        if (Keyin1 == 0)          //檢測(cè)按鍵按下
  91.                                 {
  92.                                         i++;
  93.                                         if (i == 7)                  //7次相當(dāng)于延時(shí)2msx7=14毫秒
  94.                                         {
  95.                                                 i = 0;
  96.                                                 kmode = 1;          //按鍵穩(wěn)定,轉(zhuǎn)換進(jìn)入檢測(cè)按鍵松手模式
  97.                                                 Keytan = 0;          //按鍵動(dòng)作標(biāo)志
  98.                                         }
  99.                                 }
  100.                                 else
  101.                                         i = 0;                          //沒(méi)有7次連續(xù)檢測(cè)到按鍵按下,說(shuō)明沒(méi)有穩(wěn)定,時(shí)間清零
  102.                 case 1:        if (Keyin1 == 1)          //檢測(cè)按鍵松開(kāi)                                         
  103.                                  {
  104.                                         Keytan = 1;                 //按鍵松開(kāi)標(biāo)志
  105.                                         kmode = 0;                 //進(jìn)入檢測(cè)按鍵按下模式
  106.                                 }        
  107.         }               
  108. }

  109. void ConfigTimer0(uchar ms)
  110. {
  111.         ulong tmp;

  112.         tmp = 11059200/12;
  113.         tmp = (tmp*ms)/1000;
  114.         tmp = 65536 - tmp;
  115.         T0RH = (uchar)(tmp>>8);
  116.         T0RL = (uchar)tmp;
  117.         TH0 = T0RH;
  118.         TL0 = T0RL;
  119.         TMOD &= 0xf0;
  120.         TMOD |= 0x01;
  121.         TR0 = 1;
  122.         ET0 = 1;
  123.         EA = 1;
  124. }

  125. void InterruptTimer0() interrupt 1
  126. {
  127.         TH0 = T0RH;
  128.         TL0 = T0RH;
  129.         LedPlay();
  130.         KeyScan();
  131. }
復(fù)制代碼

全部資料51hei下載地址:
按鍵.zip (39.04 KB, 下載次數(shù): 11)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国精久久| 精品国产精品 | 欧美日韩国产一区二区三区 | 欧美色综合一区二区三区 | 精品一区二区电影 | 亚洲一区久久久 | 国产小视频在线 | 黑人久久久| 久久99精品久久久久 | 一级片成人 | 97超碰免费| 天天射天天干 | 毛片链接 | 精品一区二区不卡 | 综合精品| 日韩a在线 | 中文字幕不卡在线观看 | 日韩成人在线播放 | 精品九九在线 | 色婷婷久久久久swag精品 | 欧美日韩中文国产一区发布 | 欧美男人天堂 | 国产一区免费视频 | 91高清免费观看 | 精品91久久 | 国产精品视频网 | 久久久久久久电影 | 国产精品久久久亚洲 | 久久99精品久久久久子伦 | 久草青青草 | 国产一级在线观看 | 九九热在线观看 | 在线播放日韩 | 日本激情视频中文字幕 | 欧美久久电影 | 色综合99 | 国产亚洲精品美女久久久久久久久久 | 天天操天天天 | 久草99 | 最近最新中文字幕 | 日日操夜夜操天天操 |