<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機一般按鍵的設計

單片機一般按鍵的設計

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

本文引用地址:http://dyxdggzs.com/article/201611/322007.htm

鍵盤(pán),作為向系統操作人員的干預指令的接口,以其特定的按鍵序列代表著(zhù)各種確定的操作命令,所以,準確無(wú)誤的辨認每個(gè)鍵的動(dòng)作和其所處的狀態(tài),是系統能否正常工作的關(guān)鍵。多數鍵盤(pán)的按鍵多使用機械式彈性開(kāi)關(guān),一個(gè)電信號通過(guò)機械觸點(diǎn)的斷開(kāi),閉合過(guò)程完成高低電平的切換。由于機械觸點(diǎn)的彈性作用,一個(gè)按鍵開(kāi)關(guān)在閉合及斷開(kāi)的瞬間必然伴隨著(zhù)一連串的抖動(dòng),其波形如圖所示:


抖動(dòng)過(guò)程的長(cháng)短是由按鍵的機械特性決定,一般是10~20ms。為了使CPU對一次按鍵動(dòng)作只確認一次,必須消除抖動(dòng)的影響,可以從硬件及軟件兩個(gè)方面著(zhù)手。本文只介紹軟件方面的防抖。

軟件防抖的思路:當第一次檢測到有建按下時(shí),先用軟件延時(shí)(10~20ms),而后再確認鍵電平是否依舊維持閉合狀態(tài)的電平。若保持閉合狀態(tài)電平,則確認此間已按下,從而消除抖動(dòng)影響。

二、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
};//共陰極數碼管段碼0~F

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

void scankey(void)//按鍵掃描函數
{
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)//主函數
{
P0=0X00;//初始化P0口為低電平
while(1)
{
scankey();//檢測按鍵
P0=duan_code[i];//數碼管顯示
}
}



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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>