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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)如何進(jìn)行按鈕抬起瞬間的防抖?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:430774 發(fā)表于 2019-5-6 16:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include "reg52.h"                        
  2. typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
  3. typedef unsigned char u8;

  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;
  7. sbit beep=P1^5;           
  8. sbit k=P3^2;
  9. u16 a,b,c;
  10. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  11.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
  12. u8 mb[2];
  13.         static u8 h;
  14. /*******************************************************************************
  15. * 函 數(shù) 名         : delay
  16. * 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
  17. *******************************************************************************/
  18. void delay(u16 j)
  19. {
  20.         while(j--);        
  21. }

  22. /*******************************************************************************
  23. * 函 數(shù) 名       : main
  24. * 函數(shù)功能                 : 主函數(shù)
  25. * 輸    入       : 無
  26. * 輸    出             : 無
  27. *******************************************************************************/
  28. void zhongduan()
  29. {
  30.          IT0=1;//下降沿有效
  31.          EX0=1;  // 哪個(gè)外部中斷有效
  32.           TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。

  33.         TH0=0XFC;        //給定時(shí)器賦初值,定時(shí)1ms
  34.         TL0=0X18;        
  35.         ET0=1;//打開定時(shí)器0中斷允許
  36.         EA=1;//打開總中斷
  37.         
  38.         b=0,c=0,beep=0,h=0;
  39. }


  40. void Timer0() interrupt 1
  41. {
  42.         static u16 h;
  43.         TH0=0XFC;        //給定時(shí)器賦初值,定時(shí)1ms
  44.         TL0=0X18;
  45.         EX0=0;
  46.         h++;
  47.         if(h==8)
  48.         {
  49.          b=1;
  50.          c++;
  51.         }        
  52.         if(h==300)
  53.         {        
  54.    h=0;               
  55.    EX0=1;
  56.          TR0=0;                                
  57.         }        
  58. }


  59. void zhong() interrupt 0
  60. {
  61.          EX0=0;
  62.          TR0=1;
  63.          
  64. }


  65. void DigDisplay()
  66. {
  67.         u8 i;
  68.         for(i=0;i<2;i++)
  69.         {
  70.                 switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,
  71.                 {
  72.                         case(0):
  73.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  74.                         case(1):
  75.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位        
  76.                 }
  77.                 P0=smgduan[mb[i]];//發(fā)送段碼
  78.                 delay(1); //間隔一段時(shí)間掃描        
  79.                 P0=0x00;//消隱
  80.         }
  81. }
  82. void fengmingqi()
  83. {
  84.         
  85. if(b==1)
  86.         {
  87.                 for(a=0;a<100;a++)
  88.                 {
  89.                         beep=~beep;
  90.                   delay(10);                        
  91.                 }        
  92.                 b=0;            //延時(shí)大約100us   通過修改此延時(shí)時(shí)間達(dá)到不同的發(fā)聲效果        
  93.   }

  94. }        


  95. void main()
  96. {        
  97.         zhongduan();
  98.         
  99.         while(1)
  100. {        
  101.           fengmingqi();
  102.       mb[0]=c%10;           //秒表個(gè)位
  103.             mb[1]=c/10;           //秒表十位  
  104.                  DigDisplay();   
  105. }
  106. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:430774 發(fā)表于 2019-5-6 16:55 | 只看該作者
有時(shí)候會(huì)連續(xù)加兩個(gè)數(shù),應(yīng)該是抬起瞬間有反應(yīng),按下的防抖處理好了,抬起的不知道怎么處理了
回復(fù)

使用道具 舉報(bào)

板凳
ID:528454 發(fā)表于 2019-5-6 18:21 | 只看該作者
加個(gè)延時(shí)程序?
回復(fù)

使用道具 舉報(bào)

地板
ID:503191 發(fā)表于 2019-5-6 18:24 | 只看該作者
按鈕兩端并個(gè)電容?
回復(fù)

使用道具 舉報(bào)

5#
ID:528454 發(fā)表于 2019-5-6 18:40 | 只看該作者
加一個(gè)電容,這是比較普遍的應(yīng)用
回復(fù)

使用道具 舉報(bào)

6#
ID:528677 發(fā)表于 2019-5-6 18:42 | 只看該作者
延時(shí)消抖,然后等待手抬起
回復(fù)

使用道具 舉報(bào)

7#
ID:528677 發(fā)表于 2019-5-6 18:49 | 只看該作者
延時(shí)消抖,然后等待手抬起例如:
if(key==0)
{   
    delay();
    while(!key);
}     進(jìn)入外部中斷也能這樣,按下鍵不松手時(shí)顯示可能會(huì)出問題,松開就好了。
回復(fù)

使用道具 舉報(bào)

8#
ID:528642 發(fā)表于 2019-5-6 21:26 | 只看該作者

RE: 單片機(jī)如何進(jìn)行按鈕抬起瞬間的防抖?

消除方法有兩種:軟件除抖和硬件除抖,其中硬件除抖是應(yīng)用了電容對(duì)高頻信號(hào)短路的原理。
軟件除抖是檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生5ms~10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。
回復(fù)

使用道具 舉報(bào)

9#
ID:486487 發(fā)表于 2019-5-6 21:58 | 只看該作者
首先:硬件設(shè)計(jì)上必須要求在入口處并一個(gè)104電容。
然后:用示波器多抓幾次按鍵按下和抬起的波形,找到按下和抬起的按鍵的干擾波形的寬度。
最后:程序再延時(shí)讀取按鍵值,延時(shí)時(shí)間為:干擾波寬度*1.5,其中1.5可以視具體情況調(diào)整。
回復(fù)

使用道具 舉報(bào)

10#
ID:529213 發(fā)表于 2019-5-7 09:47 來自手機(jī) | 只看該作者
加電容好些,在按鍵兩端并聯(lián)零點(diǎn)一到零點(diǎn)零一微法的無極性電容,千萬別別用電解電容,因?yàn)殡娊怆娙萋╇姶螅胢kp之類的薄膜電容,嚴(yán)禁并電解電容。
回復(fù)

使用道具 舉報(bào)

11#
ID:123289 發(fā)表于 2019-5-7 11:09 | 只看該作者
消抖不分上下沿:
例如:
每間隔4ms檢測(cè)一次,連續(xù)8次檢測(cè)結(jié)果一樣,則可判定為穩(wěn)定。
回復(fù)

使用道具 舉報(bào)

12#
ID:430774 發(fā)表于 2019-5-7 13:49 | 只看該作者
yzwzfyz 發(fā)表于 2019-5-7 11:09
消抖不分上下沿:
例如:
每間隔4ms檢測(cè)一次,連續(xù)8次檢測(cè)結(jié)果一樣,則可判定為穩(wěn)定。

我現(xiàn)在用的就是這種,定時(shí)器里檢測(cè)5毫秒一直是按下狀態(tài)就+1
回復(fù)

使用道具 舉報(bào)

13#
ID:123289 發(fā)表于 2019-5-8 14:20 | 只看該作者
這樣也只是可以知道狀態(tài)穩(wěn)定了。
穩(wěn)定了,有以下幾種狀態(tài)況,需要你進(jìn)行一下甄別:
1、一直未按。
2、按下了還未松開。
3、松開后的穩(wěn)定(與1同類,需要你區(qū)分)。
……
這是難點(diǎn)!!有技巧,自己想想。(提示:將各種可能情況做標(biāo)記,進(jìn)行分析。)
回復(fù)

使用道具 舉報(bào)

14#
ID:530796 發(fā)表于 2019-5-8 17:06 | 只看該作者
改善硬件
回復(fù)

使用道具 舉報(bào)

15#
ID:162317 發(fā)表于 2019-5-9 09:52 | 只看該作者
unsigned char key_ret = 0;//外部文件調(diào)用需申明 extern unsigned char key_ret;

unsigned char Key_Scan(void)
{
static unsigned char key_num = 0;
static unsigned char del_count,tim_count;
static bit key_flag = 0;
/////////////////////////////////////////////////////
if(KEY==1) key_ret = 0;       
if(KEY==0) /*判斷是否有鍵按下可以是多個(gè)按鍵,例:if((KEY1==0)||(KEY2==0)||(KEY3==0))*/
   {
          if(++del_count>25)/*計(jì)數(shù)消抖(一般放在中斷里,計(jì)數(shù)完大于20ms即可)*/
          {
            del_count = 0;
                  if(++tim_count>25)/*長(zhǎng)按識(shí)別*/
                   {
                                        key_flag = 0;/*短按無效*/
                                        tim_count = 25;/*鎖定長(zhǎng)按*/
                                        switch(key_num)
                                                {
                                                 case 1:key_ret = 2;break;
                                                }                   
                        }                       
                 else/*短按有效*/
                   {
                          key_flag = 1;/*短按標(biāo)志位*/
                          if(KEY==0) { key_num = 1;}/*一下用于識(shí)別按鍵*/                
                       
                    }        
                }       
        }                                           
        else/*松手之后*/
          {
                        tim_count = 0;
                        del_count = 0;
                        if(key_flag)/*松手*/
                                {
                                        key_flag = 0;
                                        switch(key_num)
                                                {
                                                case 1:key_ret = 1;break;
                                                }  
                                }                                        
          }                                               
        return key_ret;
                                        }
///////使用方法//
/*                                       
if(key_ret==1)
{
        key_ret=0;
        要執(zhí)行的程序
}               

*/

回復(fù)

使用道具 舉報(bào)

16#
ID:531713 發(fā)表于 2019-5-9 16:38 | 只看該作者
延時(shí)消抖
   if(S1==0) {
            Delay10ms();
             if(S1==0) {      
                //要做的事
            }
}
回復(fù)

使用道具 舉報(bào)

17#
ID:505065 發(fā)表于 2019-5-9 21:29 | 只看該作者
一個(gè)是用延時(shí)消抖,另一個(gè)就是用外部中斷
回復(fù)

使用道具 舉報(bào)

18#
ID:514901 發(fā)表于 2019-5-10 00:13 | 只看該作者
延時(shí)消抖有時(shí)候不管用,這時(shí)候要用暴力消抖
if(key==0)
{
while(!key);
……
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 婷婷二区| 久久久成 | 男女在线网站 | 有码在线 | 有码一区| 91久久久www播放日本观看 | 国产伦精品一区二区三区高清 | 久久久久久a | 国产精品国产a | 欧美精品99 | 毛片免费在线 | 精品久久国产视频 | 国产区视频在线观看 | 日本一道本视频 | 日韩在线精品强乱中文字幕 | 91精品国产一区二区三区 | 日日淫 | 一级免费视频 | 九一国产精品 | 99热热热热 | 国产精品久久久久无码av | 亚洲免费成人 | 国产精品国产三级国产播12软件 | 中文字幕视频一区二区 | 免费中文字幕日韩欧美 | 免费激情网站 | 九九视频在线观看视频6 | 午夜免费在线 | 成人午夜高清 | 亚洲一级毛片 | 91大神在线资源观看无广告 | 一级黄色淫片 | 羞羞视频网站在线观看 | 久草免费在线视频 | www久久久 | 成人在线黄色 | 538在线精品 | 欧美一级大黄 | 国产精品自产拍 | 国产欧美性成人精品午夜 | 99精品视频一区二区三区 |