51微控制器軟體方式按鍵消抖,求51微控制器按鍵中斷消抖程式

2022-03-08 01:43:03 字數 3000 閱讀 7661

1樓:匿名使用者

原地等待10ms的話,會耽誤你的程式執行。如果你程式本身不在乎,那就為所謂。但是,微控制器都是死迴圈程式。你完全可以利用程式本身一次迴圈的時間,來模糊計算延時。

例如,程式本身迴圈一次要1ms,那麼計數10次,就是10ms,就行了

2樓:佴問

老師一般這樣教.假設沒有按鍵按下時是低電平,有按鍵按下是高電平.當程式讀取到io口為高電平時,延時一段時間,再一次讀取io口電平,如果還是高電平,則認為是有效按鍵,進入按鍵處理程式.

此時一般還有一個處理,即如果按鍵不鬆開,則不會再次處理.

3樓:做而論道

編寫消抖程式,我的思路是這樣子的:使用定時器0延時10ms程式在初始化之後,執行的就是判斷p1.0引腳電平狀態的指令,如果p1,0是低電平,那麼就啟動定時器0,開始計時,那麼此時主程式應該幹什麼呢?

是原地等待還是繼續檢測p1.0的狀態呢?

--p1.0,可以不檢測了,因為已經啟動了定時器。

--可以檢測其它介面。

--如:串列埠、ad轉換介面、溫度檢測、煙霧報警介面、紅外輸入介面...

--也可以輸出,動態數碼管顯示...

定時時間到之後,在中斷服務程式中檢測p1.0的狀態,如果是低電平,則說明按鍵按下了,就執行相應的子程式,執行完子程式之後呢?程式是否返回了中斷服務程式的位置,繼續執行呢?

--回到發生中斷的地方。

如果是高電平的話,就退出中斷服務程式,那麼退出之後怎麼辦?

--回到發生中斷的地方。

--沒有了定時,應該繼續執行檢測p1.0狀態。

4樓:

你對自己設計的框架都不是非常清晰啊……

開始計時,那麼主程式應該幹嘛——這不是你自己要設計的內容嘛,我們怎麼會知道你主程式裡面要幹嘛呢?

我建議你把設計的功能說清楚,要實現什麼說明白一些,這樣大家就好給你思路了。

或者你把你的程式弄上來,大家幫你看看你的程式有什麼樣的缺陷。

按照正常中斷來說,退出中斷後肯定是會繼續往下執行任務的,這個不用懷疑,除非你的系統跑飛了,或者存在別的bug。

求51微控制器按鍵中斷消抖程式 50

5樓:

軟體消抖就是延時而已,基本上10ms算稍差的,可以再加幾次10ms,你的程式雖然是30ms但是確定是30ms嗎?現在1t的晶片很多呢,執行效率快,防抖延時都要加大

6樓:後尋春

用if語句判斷一下唄比如 }}

7樓:匿名使用者

建議你做一個鬆手檢測,判斷按鍵鬆開後再跳出。

at89c51微控制器:簡述在使用普通按鍵的時候,為什麼要進行去抖動處理,怎麼處理?

8樓:陌路情感諮詢

從機械按鍵的結構來看,在機械按鍵接觸的瞬間,會出現接觸或者是沒有接觸的情況。在機械按鍵老化的時候,或者在其他干擾的情況下都會出現按鍵被誤觸發的情況。

去除機械按鍵這種抖動的措施有硬體方法,還有軟體方法,硬體方法就是在按鍵上增加電容去除干擾。在按鍵上串一個電阻也可以解決靜電或者是其他干擾對按鍵造成的干擾。軟體去抖動也是一種非常常見的去抖動的方法,就是對按鍵進行多次的檢測,每次檢測都被按下才認為按鍵被按下。

9樓:匿名使用者

人手在按下按鍵的時候,由於抖動和按鍵觸點的原因會產生多個上升沿和下降沿,導致微控制器誤認為按鍵受到了多次操作,所以要進行去抖處理,軟體的處理方法一般是加延時後重複判斷,硬體上可以加旁路電容保護。

10樓:修者世界

不僅僅at89c51微控制器,任何按鍵的判定都需要做去抖處理,這是為了防止干擾訊號對按鍵的影響,也為了去掉一些誤動作對正確訊號的影響。去抖處理的方法一般採用延時去抖處理:

keydel:

jb key,keyret ;無鍵按下轉keyretlcall delay ;有鍵按下延時10~30毫秒jb key,keyret ;無鍵按下,證明以前是誤操作或干擾setb c ;有鍵按下,設定標誌返回retkeyret:

clr c ;無鍵按下清楚標誌返回ret

求51微控制器利用定時器消抖的程式!!

11樓:cindere鞡

定時器消抖就是利用定時器執行一段時間以消耗一段程式執行週期達到延時目的,再關閉定時器,如果你的想法是這樣那很好辦,一般我們都用delay函式來粗虐延時,你只要將trx=1(定時器1或0的開關)去替換delay就行,然後根據定時器的初始化來確定延時長短,然後進去中斷服務函式,重灌初值後trx=0,關閉定時器就行了,然後下一次消抖又開啟,進去中斷又關閉,這樣反覆就達到了延時目的。

有其他想法可以回覆一起討論。

希望我的回答能幫助到你。

12樓:算o你o狠

#include //庫函式

void inittimer0(void)//定時器t0的初始化,12m晶振,延時10ms

void main(void)//主程式

}void timer0interrupt(void) interrupt 1

13樓:匿名使用者

在鍵盤掃瞄時加入濾波 濾波時間用定時器

51微控制器的外部中斷如何寫按鍵消抖c程式!

14樓:匿名使用者

跟外部的按鍵消抖一樣處理就可以了。

void ext0() interrupt 0}

15樓:一萬光年

在外部中斷中再判斷按鍵是否按下,且多次判斷

16樓:做而論道

消抖幹什麼?

需要消抖,就應該使用其它的 io 引腳,不要用外部中斷。

外部中斷,應該留著,用於需要緊急處理的外設。

17樓:匿名使用者

你可以把觸發方式放到按鍵掃描裡面,不過感覺這樣是多此一舉

微控制器按鍵數碼管顯示問題,微控制器C51實現按鍵一次數碼管加1程式問題。高手進。

default那句的break刪掉試試。51微控制器中如何按下按鍵時數碼管正常顯示而不閃爍,並且實現長按連續 不要檢測按鍵是否抬起即可,但為了防止連續加得太快,所以程式裡還是要加延時,這樣造成 數碼管顯示閃爍,且這個延時和閃爍是一個矛盾if key 0 display num 當然也好可以將延時函式...

51微控制器的程式是什麼意思,51微控制器的51是什麼意思?

clr c 清零進位標誌 mov a,66h 立即數66h送入ajc loop1 判斷c是否為0,c 1跳轉到loop1cpl c 取反c setb 01h 非法的指令setb只能對位操作loop1 orl c,acc.0 將a的最低位送入c中jb acc.2loop2 a中的第三位為1則跳到loo...

80C51微控制器按鍵中斷實驗(用組合語言)

語句分號後為你原先指令,前面為修改後指令。主要是標號錯誤和輸入時輸入法錯誤,要英文模式。修改後編譯通過。但沒有 按8次後重複開始狀態,你自己加入該功能。org 0000h ljmp main org 0003h ljmp iint0 ljmp int0org 0013h ljmp iint1 ljm...