A. 單片機鍵盤去抖動c語言程序!!!
使用這個到板子裡面:
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;
sbit KEY3 = P2^6;
sbit KEY4 = P2^7;
unsigned char code LedChar[] = { //數碼管顯示字元轉換表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
void delay();
void main(){
bit keybuf = 1; //按鍵值暫存,臨時保存按鍵的掃描值
bit backup = 1; //按鍵值備份,保存前一次的掃描值
unsigned char cnt = 0; //按鍵計數,記錄按鍵按下的次數
ENLED = 0; //選擇數碼管 DS1 進行顯示
ADDR3 = 1;
ADDR2 = 0;
ADDR1 = 0;
ADDR0 = 0;
P2 = 0xF7; //P2.3 置 0,即 KeyOut1 輸出低電平
P0 = LedChar[cnt]; //顯示按鍵次數初值
while (1){
keybuf = KEY4; //把當前掃描值暫存
if (keybuf != backup){ //當前值與前次值不相等說明此時按鍵有動作
delay(); //延時大約 10ms
if (keybuf == KEY4){ //判斷掃描值有沒有發生改變,即按鍵抖動
if (backup == 0){ //如果前次值為 0,則說明當前是彈起動作
cnt++; //按鍵次數+1
//只用 1 個數碼管顯示,所以加到 10 就清零重新開始
if (cnt >= 10){
cnt = 0;
}
P0 = LedChar[cnt]; //計數值顯示到數碼管上
}
backup = keybuf; //更新備份為當前值,以備進行下次比較
}
}
}
}
/* 軟體延時函數,延時約 10ms */
void delay(){
unsigned int i = 1000;
while (i--);
}
B. 單片機程序中多個按鍵的消除抖動怎麼處理呢
有個想法,不知道行不行。對100個鍵進行編碼。
先掃描一次所有的鍵,保存可能被按下的鍵碼進數組,延時,再根據保存數組中的鍵碼進行掃描,得到被按下的鍵的鍵碼
C. 單片機 按鍵去抖啥意思
單片機 按鍵去抖, 就是單片機的 按鍵 在正常操作中 在按壓過程時 不能一下 完全接通,
就是按壓抖動,單片機在接收這種 信息時 會判斷錯誤,所有要去掉這種抖動因素,
去抖 有 硬體 去抖 就是在 按鍵與單片機連接的 IO 口 加 消抖電容 。
還有 用 軟體 去抖 就是 在單片機 接收按鍵 信息時 多次 判斷 相同 才確認 是 與 否。
D. 單片機按鍵如何消抖
if (key==0)如果按鍵按下
for(i=0;i<100;i++):利用延時消除抖動
if (key==0)再次判斷按鍵,如果還是按下狀態
(要執行的語句)則執行相關語句
這是常用的軟體消抖方法
E. 單片機按鍵去抖動有哪些方法
在按鍵上增加電容去除干擾,在按鍵上串一個電阻也可以解決靜電或者是其他干擾對按鍵造成的干擾。
軟體去抖動也是一種非常常見的去抖動的方法,就是對按鍵進行多次的檢測,每次檢測都被按下,才認為按鍵被按下。軟體去抖動要採用多次採集的方法,中間的間隔可以使用延時或者使用分時的思想來進行去抖動,一般的軟體去抖中都是用分時思想去抖動。
(5)單片機消抖擴展閱讀:
注意事項:
按鍵穩定閉合時間長短是由操作人員決定的,通常都會在100ms以上,刻意快速按的話能達到40-50ms左右,很難再低了。抖動時間是由按鍵的機械特性決定的,一般都會在10ms以內。
為了確保程序對按鍵的一次閉合或者一次斷開只響應一次,必須進行按鍵的消抖處理。當檢測到按鍵狀態變化時,不是立即去響應動作,而是先等待閉合或斷開穩定後再進行處理。
利用電容的充放電特性來對抖動過程中產生的電壓毛刺進行平滑處理,從而實現消抖。但實際應用中,這種方式的效果往往不是很好,而且還增加了成本和電路復雜度,所以實際中使用的並不多。
F. 單片機的軟體消抖什麼意思
你這是用於按鍵消抖的代碼。
通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由於機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,為了不產生這種現象而作的措施就是按鍵消抖。
抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms。這是一個很重要的時間參數,在很多場合都要用到。
按鍵穩定閉合時間的長短則是由操作人員的按鍵動作決定的,一般為零點幾秒至數秒。鍵抖動會引起一次按鍵被誤讀多次。為確保CPU對鍵的一次閉合僅作一次處理,必須去除鍵抖動。在鍵閉合穩定時讀取鍵的狀態,並且必須判別到鍵釋放穩定後再作處理。
按鍵按下至松開的波形如下圖所示:
如果按鍵較多,常用軟體方法去抖,即檢測出鍵閉合後執行一個延時程序,5ms~10ms的延時,讓前沿抖動消失後再一次檢測鍵的狀態,如果仍保持閉合狀態電平,則確認為真正有鍵按下。當檢測到按鍵釋放後,也要給5ms~10ms的延時,待後沿抖動消失後才能轉入該鍵的處理程序。
G. 單片機的按鍵消除抖動的影響
你的想法是理想狀態下的,不符合實際啊,如果僅僅是實驗室預研是可以的,實際就不行了,必須加防抖。
先說說你的非機械按鈕,成本就是最大的問題,對於大規模生產來說,哪怕省一個電阻也是好的,而軟體的成本可以忽略,兩相比教,老闆肯定選成本低的。老闆也知道有技術能繞過去,但和成本一比,什麼都是浮雲。
再說,這個防抖的功能,並不僅僅在按鍵上能使用,在信號採集,數據通訊中都是非常重要的,你總不能給每個IO口都裝個高性能介面吧。對於單片機來說,是不是鍵盤還真不是關鍵,PA口能用防抖,難道PB口就不能用了?
最後,對於最終用戶平時是怎麼使用鍵盤的,操作習慣是怎麼樣,開發人員根本是控制不了的,也不應該去控制,既然不能改變用戶,那就只能改變自己。
H. 單片機中什麼是抖動如何消除抖動
單片機中抖動是按鍵所用的開關都是機械彈性開關,當機械觸點斷開、閉合時,由於機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上就穩定的接通,在斷開時也不會一下子徹底斷開,而是在閉合和斷開的瞬間伴隨了一連串的抖動。利用電容的充放電特性來對抖動過程中產生的電壓毛刺進行平滑處理,從而實現消抖。
按鍵穩定閉合時間長短是由操作人員決定的,通常都會在100ms以上,刻意快速按的話能達到40-50ms左右,很難再低了。
抖動時間是由按鍵的機械特性決定的,一般都會在10ms以內,為了確保程序對按鍵的一次閉合或者一次斷開只響應一次,必須進行按鍵的消抖處理。
當檢測到按鍵狀態變化時,不是立即去響應動作,而是先等待閉合或斷開穩定後再進行處理。按鍵消抖可分為硬體消抖和軟體消抖。
(8)單片機消抖擴展閱讀
單片機在電子技術中的開發,主要包括CPU開發、程序開發、 存儲器開發、計算機開發及C語言程序開發,同時得到開發能夠保證單片機在十分復雜的計算機與控制環境中可以正常有序的進行,這就需要相關人員採取一定的措施:
(1)CPU開發。開發單片機中的CPU匯流排寬度,能夠有效完善單片機信息處理功能緩慢的問題,提高信息處理效率與速度,開發改進中央處理器的實際結構,能夠做到同時運行2-3個CPU,從而大大提高單片機的整體性能。
(2)程序開發。嵌入式系統的合理應用得到了大力推廣,對程序進行開發時要求能夠自動執行各種指令,這樣可以快速准確地採集外部數據,提高單片機的應用效率。
(3)存儲器開發。單片機的發展應著眼於內存,加強對基於傳統內存讀寫功能的新內存的探索,使其既能實現靜態讀寫又能實現動態讀寫,從而顯著提高存儲性能。
(4)計算機開發。進一步優化和開發單機片應激即分析,並應用計算機系統,通過連接通信數據,實現數據傳遞。
I. 單片機的程序中,為什麼按鍵要去抖動
因為你單片機反應很快的,在你按下的這段時間里,會認為是按了很多下,所以要消除抖動
J. 單片機獨立按鍵去抖動問題
按鍵按下的時候加了延時,你已經知道原因了。是為了消除抖動,你的疑問是為什麼松開的時候沒有再加上延時函數,原因很簡單,看圖片。
因為進行了兩次if判斷,松開按鍵的時候無非會出現電平的跳變,理論上松開按鍵之後就一直為高電平1111111111,如果出現1110101111,中間的第一個10就發生了跳變,因為cpu的運算速度非常快,當程序又到了第一個if時,此時key1為0,那麼滿足條件,執行延時函數,後面第二個10就直接忽略了,後面的電平已經為1,所以這一個延時函數就同時起到消除按下和松開的電平抖動的作用。(如果松開按鍵之後的電平為低電平,那麼把我上面的所有的程序和電平取反就行了,再來閱讀)。