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

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

QQ登錄

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

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

如何用單片機(jī)定時(shí)器進(jìn)行按鍵消抖

  [復(fù)制鏈接]
ID:219181 發(fā)表于 2017-8-27 16:06 | 顯示全部樓層 |閱讀模式
我這個(gè)是0~9999的循環(huán)按鍵加減,按一下加/減一,長(zhǎng)按連續(xù)加減,但是短按加的時(shí)候會(huì)連續(xù)加幾下,減的話(huà)會(huì)反應(yīng)慢很多。不確定是不是消抖沒(méi)做好,求各位大神指教!!!!!

  1. #includ<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit Seg_W1  = P2^1;               
  5. sbit Seg_W4  = P2^2;
  6. sbit Seg_W3  = P2^3;
  7. sbit Seg_W2  = P1^7;

  8. sbit key1    =  P3^4;//加
  9. sbit key2    =  P2^6;//減

  10. code uint biao[]=        {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};      
  11. uint array[]={0,1,2,3,4,5,6,7,8,9};

  12. uchar displayDelayCount = 0;
  13. uchar displayIndex = 0;
  14. uint displayData =240;
  15. uint delay = 0;

  16. void delayms(unsigned int x)                              
  17. {
  18. unsigned int i;
  19. while(x--)
  20. {
  21. for(i=0;i<113;i++);
  22. }
  23. }
  24. void xianshi(void
  25. {
  26.       
  27.         if(displayDelayCount >0
  28.         {
  29.                 displayDelayCount = 0;
  30.                 if(displayIndex < 3)
  31.                 {
  32.                         displayIndex ++;
  33.                 }
  34.                 else
  35.                 {
  36.                         displayIndex = 0;               
  37.                 }
  38.                 if(displayIndex == 0)      
  39.                 {      
  40.                         Seg_W1 = Seg_W2 = Seg_W3 = Seg_W4 = 0        ;
  41.                         P1=0X7F;
  42.                         P1=biao[displayData%10]
  43.                         Seg_W1=1;
  44.                 }

  45.                 if(displayIndex == 1)      
  46.                 {
  47.                         Seg_W1 = Seg_W2 = Seg_W3 = Seg_W4 = 0        ;
  48.                         P1=0X7F;
  49.                         P1=biao[displayData/10%10];
  50.                         Seg_W2=1;                       
  51.                 }

  52.                 if(displayIndex == 2)               
  53.                 {
  54.                         Seg_W1 = Seg_W2 = Seg_W3 = Seg_W4 = 0        ;
  55.                         P1=0X7F;
  56.                         P1=biao[displayData/100%10];
  57.                         Seg_W3=1;                       
  58.                 }
  59.                
  60.                 if(displayIndex == 3)
  61.                 {
  62.                         Seg_W1 = Seg_W2 = Seg_W3 = Seg_W4 = 0        ;
  63.                         P1=0X7F;
  64.                         P1=biao[displayData/1000%10];
  65.                         Seg_W4=1;
  66.                 }
  67.         }
  68. }

  69. #define         NO_AJ  1
  70. #define         UP     2
  71. #define         DOWM   3

  72. uchar anjian_yansi = 0;
  73. uchar anjianhuoqu(void)
  74. {
  75.         {
  76.                 if(!key1)
  77.                 {
  78.                 }
  79.                 else if(!key2)
  80.                 {
  81.                 }
  82.                 else
  83.                         anjian_yansi = 0;               
  84.         }
  85.       
  86.         if(anjian_yansi == 0)
  87.         {
  88.                 if(!key1)
  89.                 {
  90.                         anjian_yansi = 100;
  91.                         return UP;
  92.                 }
  93.                 else if(!key2)
  94.                 {
  95.                         anjian_yansi = 100;
  96.                         return DOWM;
  97.                 }
  98.                 else
  99.                         return NO_AJ;
  100.         }
  101.         else
  102.                         return NO_AJ;
  103. }

  104. void anjian ()
  105. {      
  106.         if(anjianhuoqu() == UP)
  107.         {
  108.                 displayData++;
  109.         }
  110.         else if(anjianhuoqu() == DOWM)
  111.         {
  112.                 displayData--;
  113.         }
  114. }      
  115. void time0()interrupt 1     //¶¨ê±¼ÆêyÆ÷£¬èë¿ú1
  116. {
  117.         TH0=(65535-5000)/256;
  118.         TL0=(65535-5000)%256;
  119.         displayDelayCount++;
  120.         delay++;
  121.          if(anjian_yansi > 0)
  122.                         anjian_yansi --;
  123. }

  124. void main()
  125. {
  126.         EA=1;     
  127.         ET0=1;     
  128.         TMOD=0X01;
  129.         TH0=(65535-5000)/256;
  130.         TL0=(65535-5000)%256;   
  131.         TR0=1;
  132.       
  133.         while(1)
  134.         {        key1=key2=key3=key4=1;
  135.                 xianshi();
  136.                 anjian ();
  137.         }      
  138. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:190832 發(fā)表于 2017-8-27 21:44 | 顯示全部樓層
你的29行少了一個(gè)‘)’

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:229626 發(fā)表于 2017-8-28 00:52 | 顯示全部樓層
外部可以加個(gè)104電容

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-8-28 08:07 | 顯示全部樓層

回帖獎(jiǎng)勵(lì) +2

消抖期間,是不需要執(zhí)行其他任務(wù)的,因此用延時(shí)程序,而不是用寶貴的定時(shí)器資源。
回復(fù)

使用道具 舉報(bào)

ID:219181 發(fā)表于 2017-8-28 10:58 | 顯示全部樓層
zl2168 發(fā)表于 2017-8-28 08:07
消抖期間,是不需要執(zhí)行其他任務(wù)的,因此用延時(shí)程序,而不是用寶貴的定時(shí)器資源。

可以說(shuō)說(shuō)具體該怎么做嗎?謝謝大神
回復(fù)

使用道具 舉報(bào)

ID:198530 發(fā)表于 2017-8-28 11:45 | 顯示全部樓層
一般都是延時(shí)消抖,就檢測(cè)一次如果按鍵按下就延時(shí)然后再檢測(cè)一下按鍵還是按下就執(zhí)行

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:229690 發(fā)表于 2017-8-28 14:08 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:229711 發(fā)表于 2017-8-28 15:59 | 顯示全部樓層
消抖用條延時(shí)函數(shù)就可以實(shí)現(xiàn)了
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-8-28 16:46 | 顯示全部樓層
本帖最后由 zl2168 于 2017-8-28 16:53 編輯
sinho 發(fā)表于 2017-8-28 10:58
可以說(shuō)說(shuō)具體該怎么做嗎?謝謝大神

介紹你一本書(shū):《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行。其中:
第6章  鍵盤(pán)
6.1  獨(dú)立式按鍵
實(shí)例69  74HC373并行輸入8位按鍵狀態(tài)
實(shí)例70  74HC165串行輸入8位按鍵狀態(tài)
實(shí)例71  CC4021串行輸入8位按鍵狀態(tài)
實(shí)例72  CC4014串行輸入8位按鍵狀態(tài)
實(shí)例73  74HC148編碼輸入8位按鍵狀態(tài)
實(shí)例74  按鍵擴(kuò)展shif t功能
6.2  矩陣式鍵盤(pán)
實(shí)例75  4×4矩陣式鍵盤(pán)
實(shí)例76  8279擴(kuò)展8×8鍵盤(pán)
實(shí)例63 8279擴(kuò)展鍵盤(pán)和顯示.rar (63.08 KB, 下載次數(shù): 11)
回復(fù)

使用道具 舉報(bào)

ID:219181 發(fā)表于 2017-8-28 18:07 | 顯示全部樓層
zl2168 發(fā)表于 2017-8-28 16:46
介紹你一本書(shū):《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41 ...

好的!謝謝
回復(fù)

使用道具 舉報(bào)

ID:225822 發(fā)表于 2017-8-29 11:41 | 顯示全部樓層
if(p34==0)
{
     delay(200);        //延時(shí)消抖
   if(p34==0)
     {
         while(!p34);        /////等待按鍵松手
      SendByte(5);
      }
}

void delay (unsigned int Z)//延時(shí)程序    Z倍    MS
{
        unsigned int  x,y;
        for(x=Z;x>0;x--)
        for(y=110;y>0;y--) ;
}

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:229889 發(fā)表于 2017-8-29 16:02 | 顯示全部樓層
用一個(gè)延時(shí)就行
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2017-8-31 21:19 | 顯示全部樓層
不同意地板的觀點(diǎn)!
做了許許多多產(chǎn)品,所有鍵的消抖,沒(méi)有一次是用延時(shí)做的,全部用定時(shí)器。
1、用延時(shí)會(huì)占用CPU時(shí)間。
2、用定時(shí)器,只需在順便“插一個(gè)掃鍵”即可,還不耽誤其它任務(wù)對(duì)此定時(shí)器的使用。
回復(fù)

使用道具 舉報(bào)

ID:230352 發(fā)表于 2017-9-1 09:42 | 顯示全部樓層
像這樣        if(key==0)         {                 delay(10);                 if(key==0)                         {                                 wela=1;                                 P0=0xc0;                              wela=0;                                 dula=1;                                 P0=0x01;                                 dula=0;                         }         }

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:219181 發(fā)表于 2017-9-4 23:37 | 顯示全部樓層
yzwzfyz 發(fā)表于 2017-8-31 21:19
不同意地板的觀點(diǎn)!
做了許許多多產(chǎn)品,所有鍵的消抖,沒(méi)有一次是用延時(shí)做的,全部用定時(shí)器。
1、用延時(shí) ...

教我的人也是這么說(shuō)的,所以大神知道怎么消嗎?是在中斷加個(gè)變量?
回復(fù)

使用道具 舉報(bào)

ID:231116 發(fā)表于 2017-9-5 13:10 | 顯示全部樓層
使用延時(shí)消抖.不要用定時(shí)器
回復(fù)

使用道具 舉報(bào)

ID:231116 發(fā)表于 2017-9-5 13:14 | 顯示全部樓層
sinho 發(fā)表于 2017-9-4 23:37
教我的人也是這么說(shuō)的,所以大神知道怎么消嗎?是在中斷加個(gè)變量?

在中斷中加入一個(gè)比較按鍵狀態(tài)的程序就行
回復(fù)

使用道具 舉報(bào)

ID:230915 發(fā)表于 2017-9-5 14:22 | 顯示全部樓層
我是新手,前幾天也狠狠搞了下消抖,感覺(jué)效果還行,代碼不在這,說(shuō)下當(dāng)初的思路,請(qǐng)指教:

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:230915 發(fā)表于 2017-9-5 15:11 | 顯示全部樓層
我是新手,前幾天剛搞過(guò)消抖,代碼不在這,說(shuō)下思路,請(qǐng)大家指教:
1.  不用延時(shí)函數(shù),這不是個(gè)好東西;
2.  I/O口變低一定是按鍵被按下,啟動(dòng)計(jì)數(shù)器,我是以10ms計(jì)一次數(shù);
3.  賦第一次健值,我用的5個(gè)鍵,第一個(gè)鍵按下就是10,第三個(gè)按下就是30,判別是哪個(gè)鍵按下;
3、啟動(dòng)計(jì)數(shù)器后再檢測(cè)按鍵是否釋放,按鍵釋放后,取計(jì)數(shù)值,按計(jì)數(shù)值時(shí)間長(zhǎng)短做區(qū)分。
4.  關(guān)閉計(jì)數(shù)器,第二次賦健值,比如第二個(gè)短按是21,第二個(gè)長(zhǎng)按是22;
5、該清零的變量都清零。等待按鍵再次按下;
6、給不同健值分配事件。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:231182 發(fā)表于 2017-9-5 16:28 來(lái)自手機(jī) | 顯示全部樓層
加一個(gè)延時(shí)函數(shù)消抖試一下

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:219181 發(fā)表于 2017-9-5 17:50 | 顯示全部樓層
gaochang000000 發(fā)表于 2017-9-5 15:11
我是新手,前幾天剛搞過(guò)消抖,代碼不在這,說(shuō)下思路,請(qǐng)大家指教:
1.  不用延時(shí)函數(shù),這不是個(gè)好東西;
...

不錯(cuò),受教了,待會(huì)嘗試一下
回復(fù)

使用道具 舉報(bào)

ID:231291 發(fā)表于 2017-9-6 01:09 | 顯示全部樓層
可以使用程序消抖,這個(gè)程序不難找,就不復(fù)述了,也可以用大電容,在硬件方面消抖

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:231444 發(fā)表于 2017-9-6 17:04 | 顯示全部樓層
liang ci yanshi jiu ke yi le
回復(fù)

使用道具 舉報(bào)

ID:230667 發(fā)表于 2017-9-6 17:56 | 顯示全部樓層
這有個(gè)硬件消抖的電路

硬件消抖電路

硬件消抖電路

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:219181 發(fā)表于 2017-9-9 12:57 | 顯示全部樓層
tiexiedaqin 發(fā)表于 2017-9-6 17:56
這有個(gè)硬件消抖的電路

好的,謝謝
回復(fù)

使用道具 舉報(bào)

ID:454000 發(fā)表于 2019-1-31 20:48 | 顯示全部樓層

能用軟件解決的問(wèn)題最好不要用硬件來(lái)解決

評(píng)分

參與人數(shù) 5黑幣 +175 收起 理由
Trump1438 + 35
#include51.h + 35
刀刀見(jiàn)紅 + 35
areyouok + 35
jinsheng7533967 + 35

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:660895 發(fā)表于 2021-6-9 17:48 | 顯示全部樓層
zl2168 發(fā)表于 2017-8-28 08:07
消抖期間,是不需要執(zhí)行其他任務(wù)的,因此用延時(shí)程序,而不是用寶貴的定時(shí)器資源。

兄弟是不是寫(xiě)反了,沒(méi)有的話(huà)好好回去翻翻書(shū)
回復(fù)

使用道具 舉報(bào)

ID:160500 發(fā)表于 2021-6-10 12:40 | 顯示全部樓層
按鍵消抖動(dòng),完全看你自己的程序來(lái)決定使用軟件延時(shí)還是定時(shí)器,或者中斷。要根據(jù)你的程序要求決定。首先你要做好程序規(guī)劃
回復(fù)

使用道具 舉報(bào)

ID:916624 發(fā)表于 2021-6-13 15:18 | 顯示全部樓層
可以看一下我寫(xiě)的獨(dú)立按鍵和矩陣按鍵的程序

按鍵.7z

21.88 KB, 下載次數(shù): 13

回復(fù)

使用道具 舉報(bào)

ID:937124 發(fā)表于 2021-6-13 17:49 | 顯示全部樓層
覺(jué)得是長(zhǎng)按短按的區(qū)分問(wèn)題;
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2021-6-14 13:45 | 顯示全部樓層
定時(shí)器中斷檢測(cè)按鍵是否按住并進(jìn)行毫秒計(jì)數(shù),松開(kāi)清0。
25毫秒為有效按鍵,1000毫秒為長(zhǎng)按按鍵。
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2021-6-15 09:18 | 顯示全部樓層
做一個(gè)20ms或者再大點(diǎn)的定時(shí)器,每中斷一次檢測(cè)一下按鍵狀態(tài),不用軟件延時(shí)也可以。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费视频在线观看 | 国产在线观看一区二区 | 99免费在线视频 | 精品国产91久久久久久 | 欧美日日 | 成人黄页在线观看 | 熟女毛片| 欧美91| 夜夜爽99久久国产综合精品女不卡 | 欧美三级电影在线播放 | 一区二区三区不卡视频 | 一区二区免费在线观看 | 在线观看视频91 | 九九热免费在线观看 | 三极网站 | 涩涩鲁亚洲精品一区二区 | 欧美影院| 大久| 密乳av| 亚洲一区二区在线免费观看 | 福利视频一区二区三区 | 九九九视频精品 | 中文天堂在线一区 | 91在线资源 | 午夜无码国产理论在线 | 亚洲精品自在在线观看 | 色综合色综合色综合 | 久久精品国产精品青草 | 欧美久久久久久久 | 欧美偷偷 | 亚洲午夜精品一区二区三区他趣 | 日韩在线欧美 | 欧美激情一区二区 | 国产欧美在线观看 | 欧美一级免费看 | 四虎影院在线观看免费视频 | 夜夜爽99久久国产综合精品女不卡 | 国产真实精品久久二三区 | 特黄av| 国产精品一级在线观看 | 国产999精品久久久久久 |