国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

單片機定時器在按鍵消抖和鍵音輸出中的應用

2019-04-26 05:03徐連喜
電子技術與軟件工程 2019年4期
關鍵詞:實時控制數(shù)碼管子程序

文/徐連喜

鍵盤輸入和鍵音輸出是單片機系統(tǒng)中人機對話的常見部分。一般情況下,按鍵按下時易產(chǎn)生抖動干擾,進而使系統(tǒng)誤動作,程序員處理此問題時通常會在檢測到有鍵被按下時,加入一個延時,延時過后再檢測同一按鍵是否仍處于被按狀態(tài)?若是,就判定此鍵確實被按下,接著就開始執(zhí)行此鍵的功能;若不是,就判定為干擾,并忽略延時前的檢測結(jié)果。通常情況下,兩次檢測之間所加入的延時需要約100mS才能達到比較理想的消抖效果,而CPU是依用戶程序從頭到尾掃描執(zhí)行程序代碼,如果在長達100mS的時間里,CPU僅僅完成一次延時的功能,那么此時段內(nèi)其它任務都將被擱置,這對于那些實時控制要求較高的場所(例如數(shù)碼管動態(tài)掃描顯示)是絕對不允許的?;趯崟r控制所遇到的另外一個問題就是鍵音輸出問題,當CPU判定某個鍵被按下時,通過某個IO端口輸出鍵音,用戶就會有更加貼切的人機對話體驗,要讓人清晰地聽到清脆的鍵音,聲音的頻率一般控制在1KHz左右,而且時間不能太短,約100mS較適宜,依照前述的用戶程序的運行規(guī)則,此時若用常規(guī)的IO端口取反、延時、再取反來輸出鍵音,顯然不能滿足用戶程序的實時控制要求。為此,本文詳述了新的思路,巧妙地利用2個定時器分別去控制按鍵消抖和鍵音輸出,經(jīng)實物驗證,CPU不僅能輕松處理按鍵消抖和鍵音輸出,同時還能完成數(shù)碼管的動態(tài)掃描及各個IO端口的實時控制,取得了理想的控制效果。

1 單片機應用系統(tǒng)硬件框圖

如圖1所示。

2 鍵盤輸入硬件電路

如圖2所示。

鍵盤硬件電路,采用4X4矩陣鍵盤,用8個I/O口就能得到16個鍵值,可實現(xiàn)0~9共十個數(shù)字鍵輸入和A~F共六個功能鍵輸入。

3 鍵音輸出硬件電路

圖1:單片機應用系統(tǒng)硬件框圖

圖2:鍵盤輸入硬件電路

圖3:鍵音輸出硬件電路

如圖3所示。

鍵音的發(fā)聲器件BZ1采用線圈蜂鳴器,這樣可使得發(fā)聲器件的體積小,聲音清脆。驅(qū)動器件由限流電阻、續(xù)流二極管、開關驅(qū)動管等部分組成。 R6、R18與Q2組成簡單的開關驅(qū)動電路,為CPU有力推動BZ1提供動力,R18是快速關斷電阻,可使CPU由低電平轉(zhuǎn)高電平時快速關斷Q2,避免了Q2因關斷不及時而產(chǎn)生意想不到的雜音。D3作為續(xù)流二極管,避免在Q2關斷瞬間由BZ1線圈產(chǎn)生的負高壓損傷Q2,電阻R7既可以調(diào)節(jié)音量大小,也可以起到限流作用(當Q2導通時)。

4 矩陣鍵盤掃描及其消抖和鍵音的軟件設計

如圖4、5、6所示。

鍵盤功能由“矩陣鍵盤掃描子程序”和“按鍵消抖(T0中斷)子程序”和“鍵音(T1中斷)子程序”完成。按鍵消抖對系統(tǒng)可靠運行至關重要,如果僅僅用普通的延時消抖,延時時間短了起不到消抖作用,延時時間長了又會影響CPU的實時控制功能,特別是當應用系統(tǒng)配有數(shù)碼管動態(tài)掃描顯示時,消抖延時時間長了就會使周期內(nèi)的數(shù)碼管動態(tài)顯示時間縮短而變暗,嚴重影響數(shù)碼管顯示效果,為此,系統(tǒng)采用T0中斷方式延時消抖,消抖“開中斷”命令是被巧妙地安插在按鍵消抖子程序里,一旦有鍵被按,鍵掃描程序必定調(diào)用按鍵消抖子程序,于是開T0中斷,進入T0中斷后立即關閉鍵掃描100mS,這100mS期間CPU只掃描數(shù)碼管及其它IO端口而不掃描鍵盤,從而保證了消抖期間數(shù)碼管亮度不受影響。消抖延時結(jié)束后恢復鍵盤掃描。同消抖延時一樣,也是緣于鍵音對數(shù)碼管顯示及對其它IO端口實時控制的影響,為此,系統(tǒng)采用T1中斷方式處理鍵音,鍵音中斷的“開中斷”命令是被巧妙地安插在按鍵消抖子程序里,一旦有鍵被按,鍵掃描程序必定調(diào)用按鍵消抖子程序,從而開啟鍵音中斷,鍵音頻率由T1的初值決定,鍵音時長則由中斷次數(shù)決定。鍵音中斷子程序完成“BZ1通電與斷電切換”和“切換401次(102mS)后關閉中斷”,以及“關閉中斷期間CPU驅(qū)動腳鎖高電平”功能。

圖4:矩陣鍵盤掃描子程序

圖5:按鍵消抖(T0中斷)子程序

圖6:鍵音(T1中斷)子程序

5 結(jié)論

古老的8051單片機有T0和T1兩個定時器,若主程序有鍵盤輸入但不需用到T0和T1,則也可以用此辦法來解決消抖和鍵音問題;若主程序有時鐘或秒脈沖計時需求,也可以由外部擴展時鐘IC(例如DS1302或DS3231),利用時鐘IC的秒脈沖觸發(fā)CPU的外部中斷來引入秒脈沖計時。

加強型的STC系列單片機一般都有3個及以上數(shù)量的定時器,隨便拿其中的兩個定時器來處理消抖和鍵音問題,其余的定時器留給主程序使用。

總之,只要主程序有鍵盤輸入和鍵音輸出需求,只要能騰出兩個定時器,利用本文的方案就能完美解決消抖和鍵音問題,進而安心地處理數(shù)碼管動態(tài)掃描顯示及其它IO端口的實時控制。

猜你喜歡
實時控制數(shù)碼管子程序
Arduino編程
MC9S08FL16單片機數(shù)碼管靜態(tài)顯示分析
單片機控制的四位數(shù)碼管動態(tài)顯示編程
基于Qt的數(shù)碼管數(shù)字編碼系統(tǒng)的設計與實現(xiàn)
探討ERP系統(tǒng)環(huán)境下企業(yè)會計的實時控制
空間機器人的計算力矩實時控制方法
子程序在數(shù)控車加工槽中的應用探索
簡化編程與子程序嵌套的應用