国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機定時器中斷按鍵消抖(無延時)

這篇具有很好參考價值的文章主要介紹了51單片機定時器中斷按鍵消抖(無延時)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

單片機入門學習記錄(二)

在機械按鍵的觸點閉合和斷開時,都會產(chǎn)生抖動,為了保證系統(tǒng)能正確識別按鍵的開關,就必須對按鍵的抖動進行處理。按鍵的抖動對于人類來說是感覺不到的,但對單片機來說,則是完全可以感應到的,而且還是一個很“漫長”的過程,因為單片機處理的速度在“微秒”級,而按鍵抖動的時間至少在“毫秒”級。單片機如果在觸點抖動期間檢測按鍵的通斷狀態(tài),則可能導致判斷出錯,即按鍵一次按下或釋放被錯誤地認為是多次操作,從而引起誤處理。因此,為了確保單片機對一次按鍵動作只作一次響應,就必須考慮如何消除按鍵抖動的影響。———————————————————————————(來自百度百科)

為了實現(xiàn)按鍵消抖通常有軟件消抖和硬件消抖的方法。

軟件消抖有采用delay()的延遲消抖,雖然代碼簡單,但是在函數(shù)執(zhí)行時CPU無法執(zhí)行其他指令,直到函數(shù)執(zhí)行完畢,影響程序運行。

定時器消抖則是采用定時器中斷的方法,把按鍵掃描程序放置在定時器中斷中,可以使得掃描程序減少對于cpu的占用,但是會占用一個定時器,雖然不及硬件消抖但是對于軟件消抖來說已是很高效的方法。因此采用的此方法。


通過定時器中斷以5ms的速度掃描一次當前的按鍵值,中斷程序時間設置如下,

void int_time0() interrupt 1
{
    TH0=(65536-5000)/256;
    TL0=(65536-5000)%256;
    i++;
    if(i>3)
        i=0;
    key();
}

key_flag 為按鍵是否按下的標志位,其初始化為0。當key按下為0,high開始加一,只有按鍵值被定時器掃描到2次即持續(xù)為10ms以上時,判定key0按鍵確實按下了,key_flag置為1。開始松手檢測,檢測key0為1的時間達到10ms以上時,判定key0按鍵是完全松開,到此為一次完整的按鍵動作。所以P2的狀態(tài)值改變。(下面程序為單按鈕示例,多個按鈕可以通過放置多個標志位來實現(xiàn)相同效果)

void key()
{
    if(key0==0&&key_flag==0)    //按鍵按下
    {
        high++;
        if(high>1)        //按下消抖
        {
            high=0;
            key_flag=1;
        }
    }
    else if(key0==1&&key_flag==1)    //松手檢測
    {
        low++;
        if(low>1)        //松手消抖
        {
           P2=~P2;? ? ? ? //狀態(tài)反轉(zhuǎn)
            key_flag=0;
        }
    }
}

多按鈕示例如下文章來源地址http://www.zghlxwxcb.cn/news/detail-629933.html

    if(key0==0&&key_flag1==0)    //按鍵按下
    {
        high1++;
        if(high1>1)        //按下消抖
        {
            high1=0;
            key_flag1=1;
        }
    }
    else if(key0==1&&key_flag1==1)    //松手檢測
    {
        low1++;
        if(low1>1)        //松手消抖
        {
            key_state1=~key_state1;
            key_flag1=0;
        }
    }
    if(key1==0&&key_flag2==0)        //按鍵按下
    {
        high2++;
        if(high2>1)        //按下消抖
        {
            high2=0;
            key_flag2=1;
        }
    }
    else if(key1==1&&key_flag2==1)        //松手檢測
    {
        low2++;
        if(low2>1)        //松手消抖
        {
            key_state2=~key_state2;
            key_flag2=0;
        }
    }

到了這里,關于51單片機定時器中斷按鍵消抖(無延時)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 51單片機中斷定時器1用法

    51單片機中斷定時器1用法

    中斷為使單片機具有對內(nèi)部或外部隨機發(fā)生的事件實時處理而設置的。 中斷技術不僅解決了快速主機與I/O設備的數(shù)據(jù)傳送問題,而且還有具有如下的優(yōu)點: 1. 分時操作:CPU可以分時為多個I/O設備服務,提高了計算機的利用率。 2. 實時操作:CPU能夠及時處理應用系統(tǒng)的隨機事

    2024年02月06日
    瀏覽(25)
  • 51單片機定時器中斷TMOD

    51單片機定時器中斷TMOD

    最近在學定時器中斷TMOD,寫程序時,要對定時器進行配置 對TMOD進行賦值時,拌了好久。。。。 如何根據(jù)所用的? ? ? 定時器0/1 ,? 工作方式0/1/2/3 ? ? ?對TMOD賦值呢? 我們知道: 1.TMOD長這樣 : ?由八位組成,前四位是T1的參數(shù);后四位是T0的參數(shù);GATE 和 C/T\\\' 不用多講,

    2024年02月12日
    瀏覽(27)
  • 51單片機:中斷系統(tǒng)(外部中斷,定時器中斷,串口通信)

    51單片機:中斷系統(tǒng)(外部中斷,定時器中斷,串口通信)

    目錄 中斷系統(tǒng)簡介: 中斷的優(yōu)先級和嵌套: 8個中斷請求源及其優(yōu)先級: 中斷的分別介紹: 1、外部中斷0:INT0?? 2、外部中斷1? 3、T0和 T1:定時計數(shù)器的功能 4、串口中斷(串口為什么使用定時器后面講) 中斷寄存器 (1)中斷允許控制(IE) (2)中斷請求標志(TCON) (

    2024年01月25日
    瀏覽(20)
  • C51單片機——中斷與定時器

    C51單片機——中斷與定時器

    中斷是大多數(shù)CPU最精彩的部分之一,下面我們通過講解和編程練習學習中斷和定時器相關概念 目錄 1.1.什么是中斷 1.2.中斷的種類 1.3中斷的相關概念 1.4. 51單片機可用中斷及相關引腳 1.4.寄存器 1.5.中斷優(yōu)先級 在未進行任何關于優(yōu)先級的設置情況下,51 單片機(52 單片機)中斷

    2024年02月03日
    瀏覽(25)
  • 【51單片機】:定時器的詳解(包括對單片機定時解釋、各類定時方式,以及中斷方式)

    【51單片機】:定時器的詳解(包括對單片機定時解釋、各類定時方式,以及中斷方式)

    ? ? ? ? ? 51定時/計數(shù)器的詳解。 ? ? ? ? ? ? ? ? ? 碼字不易,如有幫助請收藏,點贊哦。 ? ? ? ? 前提:首先我們知道51單片機內(nèi)部有21~26個特殊功能寄存器: P.x口寄存器:P0、P1、P2、P3 數(shù)據(jù)指針寄存器:DP0H、DP0L、DP1H、DP1L 定時器: TH1、TL1、TH0、TL0、TMOD、TCON 串口:

    2024年02月07日
    瀏覽(51)
  • 51單片機——定時器中斷實驗,小白講解,相互學習

    51單片機——定時器中斷實驗,小白講解,相互學習

    定時器介紹 1,CPU時序的有關知識 震蕩周期:為單片機提供定時信號的震蕩源的周期(晶振周期或外加震蕩周期)。 狀態(tài)周期:2個震蕩周期為1個狀態(tài)周期,用S表示。震蕩周期又稱S周期或時鐘周期。 機器周期:1個機器周期含6個狀態(tài)周期,12個震蕩周期 指令周期:完成1條指

    2024年02月03日
    瀏覽(27)
  • 51單片機--定時器與按鍵控制流水燈模式

    51單片機--定時器與按鍵控制流水燈模式

    51單片機上的定時器是一種硬件模塊,用于計時和生成特定的時間延遲。 它的電路和運轉(zhuǎn)都在單片機內(nèi)完成 ,它是嵌入在單片機內(nèi)部的一個功能模塊,具有多種工作模式和功能。 在51單片機中,通常有兩個定時器/計數(shù)器:定時器0(Timer 0)和定時器1(Timer 1)。每個定時器都

    2024年02月13日
    瀏覽(27)
  • C51單片機按鍵控制流水燈模式(定時器版本)以及定時器時鐘

    C51單片機按鍵控制流水燈模式(定時器版本)以及定時器時鐘

    ? 上篇文章我們學了關于定時器的三大組成部分及許多寄存器的概念問題,這篇文章我們就要開始講解實操部分。 首先,我們先來看看本文最后寫成的代碼: ? ? ?以上三張是代碼的主函數(shù),此外,代碼中還需用到的獨立按鍵檢測代碼在下面: ?注意:頭文件中#ifndef和#def

    2023年04月17日
    瀏覽(26)
  • C51單片機中斷系統(tǒng)與定時器/計時器(理論部分)

    C51單片機中斷系統(tǒng)與定時器/計時器(理論部分)

    前言 文章的開始,有人可能會問,我們在前幾節(jié)課學了延時函數(shù),為什么不用延時函數(shù)來取代定時器,而必須學定時器呢?這里,有如下幾個理由: 1.使用delay函數(shù)時,單片機的cpu做不了其他事情,只能等待延時結(jié)束。 2.用了定時器cpu就可以做其他的事情,只要定時器溢出時

    2023年04月15日
    瀏覽(25)
  • 51單片機——秒表(定時器掃描獨立按鍵和數(shù)碼管)

    ????????這次實驗主要是用定時器來定時掃描獨立按鍵和數(shù)碼管,代替兩個模塊函數(shù)中的延時函數(shù)。用定時器定時掃描的好處就是,主函數(shù)中的延時并不會影響按鍵的檢測和數(shù)碼管的掃描,只會影響響應速度。因為定時器是溢出就會執(zhí)行中斷程序,是定時的掃描。 改進的

    2024年02月10日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包