單片機(jī)一般按鍵的設(shè)計(jì)
鍵盤,作為向系統(tǒng)操作人員的干預(yù)指令的接口,以其特定的按鍵序列代表著各種確定的操作命令,所以,準(zhǔn)確無誤的辨認(rèn)每個(gè)鍵的動作和其所處的狀態(tài),是系統(tǒng)能否正常工作的關(guān)鍵。多數(shù)鍵盤的按鍵多使用機(jī)械式彈性開關(guān),一個(gè)電信號通過機(jī)械觸點(diǎn)的斷開,閉合過程完成高低電平的切換。由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在閉合及斷開的瞬間必然伴隨著一連串的抖動,其波形如圖所示:
抖動過程的長短是由按鍵的機(jī)械特性決定,一般是10~20ms。為了使CPU對一次按鍵動作只確認(rèn)一次,必須消除抖動的影響,可以從硬件及軟件兩個(gè)方面著手。本文只介紹軟件方面的防抖。
軟件防抖的思路:當(dāng)?shù)谝淮螜z測到有建按下時(shí),先用軟件延時(shí)(10~20ms),而后再確認(rèn)鍵電平是否依舊維持閉合狀態(tài)的電平。若保持閉合狀態(tài)電平,則確認(rèn)此間已按下,從而消除抖動影響。
二、proteus仿真
源程序:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit jia_key=P2^0;
sbit jian_key=P2^1;
uint i;
uchar duan_code[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay_ms(uint z)
{
}
void scankey(void)
{
}
void main(void)
{
}
評論