請利用下面的條件,做一個51單片機的鍵盤去抖動的程序,將鍵值送入數組key[10]里。
1) 要求做到程序不能延遲死等。
2) 請繼續發揮,當按下鍵不放2秒后,自動變為連按狀態,每200ms便送入1次到key[]里。
假如一個按鍵接在8051的P1.0口上,同時原程序已經有了基本的時間節拍,即10ms信號(是用定時器循環計算和定時中斷完成的),每隔10ms后,標志位“one_tick”被置1,見如下程序:
Void main( )
{
Ini( ); //相關的初始化不用你寫
While(1)
{
If(one_tick)
{//10ms到
one_tick=0;//清0
//你的程序放在這里
}
}
}
不太理解你的題目要求。是不是這樣的,就是有一個按鍵,這個按鍵如果按下的話,他的鍵值是在不斷增加的。增加間隔是沒2秒,加一個值。
1) 要求做到程序不能延遲死等。
我的理解認為是判斷按鍵松開的程序,這樣程序就會一直停留在判斷按鍵松開的死循環上了。產生了延遲死等,
如果采用的方式是行列掃描,但是在按鍵檢測、鍵值判斷的時候可以采用標志位的方式,按鍵一次后判置位標志位,其實只是執行一次按鍵判斷,當響應后在松開后,釋放標志位。當標志位沒有釋放之前,不會按鍵判斷,這樣程序就不會一直停留在判斷按鍵松開的死循環上了。
2) 請繼續發揮,當按下鍵不放2秒后,自動變為連按狀態,每200ms便送入1次到key[]里。
當按鍵被按下是就放映,之后再判斷按鍵松開的時間程序。
要是我理解對了,這程序應該不難。
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |