新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)一般按鍵的設(shè)計(jì)

單片機(jī)一般按鍵的設(shè)計(jì)

作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
一、機(jī)械按鍵的抖動

本文引用地址:http://m.butianyuan.cn/article/201611/322007.htm

鍵盤,作為向系統(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;//定義要顯示的數(shù)字、字符
uchar duan_code[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};//共陰極數(shù)碼管段碼0~F

void delay_ms(uint z)//ms級延遲函數(shù),z表示形參,是幾就是幾ms延遲
{
uint x,y;
for(x=z;x>0;x--)
for(y=99;y>0;y--)
{ _nop_();
_nop_();
}
}

void scankey(void)//按鍵掃描函數(shù)
{
if(jia_key==0)//加按鍵檢測
{
delay_ms(150);//延遲防抖
if(jia_key==0)//加按鍵檢測
i++;
if(i>15)
i=15;
}

if(jian_key==0)//減按鍵檢測
{
delay_ms(150);//延遲防抖
if(jian_key==0)//減按鍵檢測
i--;
if(i<0)
i=0;
}

}
void main(void)//主函數(shù)
{
P0=0X00;//初始化P0口為低電平
while(1)
{
scankey();//檢測按鍵
P0=duan_code[i];//數(shù)碼管顯示
}
}



關(guān)鍵詞: 單片機(jī)一般按

評論


技術(shù)專區(qū)

關(guān)閉