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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4128|回復: 9
收起左側

分享一個單片機按鍵抬起不用死等的代碼

  [復制鏈接]
ID:101869 發表于 2021-5-23 18:03 | 顯示全部樓層 |閱讀模式
我們經常用到按鍵抬起檢測,很多人用while(!key)程序走到這里會死等,影響效率。分享一個不用死等的代碼,實際用著還不錯。代碼如下
if(key==0&&key_sign==0) //檢測輸入如果為0(按鍵按下)并且按鍵標志為0.
        {
                   delay(10);  //抗抖延時                  

                      key_sign=1; //按鍵狀態標志置1。        

        }
              if(key==1&&key_sign==1)//如果松開按鍵
              {
                 key_sign=0;//按鍵狀態標志置0。
                           //寫執行的程序。
                                                      
                }        

回復

使用道具 舉報

ID:907675 發表于 2021-5-23 18:27 | 顯示全部樓層
好思路
回復

使用道具 舉報

ID:584814 發表于 2021-5-23 18:35 | 顯示全部樓層
為何不在中斷中用 ?
回復

使用道具 舉報

ID:47286 發表于 2021-5-24 01:22 來自觸屏版 | 顯示全部樓層
man1234567 發表于 2021-5-23 18:35
為何不在中斷中用 ?

因為中斷資源少 而且按鍵沒必要
回復

使用道具 舉報

ID:451718 發表于 2021-5-24 16:32 | 顯示全部樓層
在按鍵檢測過程中用delay 有很多弊端,如下解決方法,即可防止抖動,又可調節按鍵手感,更加不會出現while(!key)的尷尬。  而且資源占用少。
switch(key)
{
    case 0:
        if((Systick-Tpress)<100) break;
        //------------按鍵響應操作
        Tpress = Systick;
    break;
    case 1:
        Tpress = Systick;
    break;
}
Systick和Tpress是什么變量? 不做解釋了,不懂的看多點例程就知道了。
回復

使用道具 舉報

ID:299626 發表于 2021-5-26 00:09 | 顯示全部樓層
mark,如果可以的話,按鍵用帶中斷的IO是最方便的,
回復

使用道具 舉報

ID:47286 發表于 2021-5-26 10:26 來自觸屏版 | 顯示全部樓層
我還是覺得用定時器好點 一個定時器中斷可以給多個變量累加 中斷只有2 擴展了也沒幾個 相比中斷資源比定時器寶貴 一個按鍵就用中斷有點可惜
回復

使用道具 舉報

ID:951974 發表于 2021-8-30 20:24 | 顯示全部樓層
  delay(10);  //抗抖延時  這就是瞎胡鬧
回復

使用道具 舉報

ID:624769 發表于 2021-9-1 20:49 | 顯示全部樓層
delay(10) 抗抖這個,和 While 等按鍵抬起,半斤八兩。不管你括號里的10代表什么,真要達到消抖的效果至少需要10毫秒。用死等消抖,和等按鍵抬起其實是同根同源。
真要不死等,就是定時器計數,連續5次為0表示確實按下,為1的時候就是釋放,計數到200就標記為長按。
回復

使用道具 舉報

ID:119977 發表于 2021-9-7 10:15 | 顯示全部樓層
我見過的 大師板子都是硬件加個104電容消抖  不差那幾分錢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表