專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
十年專注單片機方案開發(fā)的方案公司英銳恩,與您探討按鍵處理的C程序。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。
//**********************************************
//********** 鍵程序 *************************
//**********************************************
//判斷鍵是否松開
void keyoff(void)
{
unsigned char temp;
while(1)
{
delayms(200); //延時200ms,以保證按確認鍵,開停鍵松開后才進入程序
temp=PORTD;
//判斷健是否松開,如果松開,則退出循環(huán)
if(temp==keytemp)
{ break;}
}
}
//******************************************
//判斷鍵是否連續(xù)按下
void keykey(unsigned char tmp)
{
unsigned char temp;
delayms(5); //延時5ms
temp=PORTD; //再讀鍵值
//如果松開
if(temp!=tmp)
{keynum=0;}
//沒松開
else
{
keynum++;
if(keynum>=20)
{ keynum=20;}
if(keynum<=5)
{delayms(250);delayms(250);delayms(250);}
else if(keynum<=10)
{delayms(250);delayms(250);}
else if(keynum<=15)
{delayms(50);}
else
{delayms(10);}
}
}
//*********************************************
//鍵盤鍵值判斷
unsigned char keysub(void)
{ //傳回鍵值
unsigned char temp1,temp2;//存儲PORTD值
unsigned char key; //設(shè)定鍵值
temp1=PORTD; //讀PORTD口
delayms(10); //延時10ms,防抖動
temp2=PORTD;
if((temp1==temp2)&&(temp2!=keytemp))
{//有鍵按下
if((temp2&0X40)==0)
{
key=1; //確認鍵---第6位
keyoff(); /鍵松開
}
else if((temp2&0X20)==0)
{
key=2; //增---第5位
keykey(temp2); //連續(xù)增
}
else if((temp2&0X10)==0)
{
key=3; //減---第4位
keykey(temp2); //連續(xù)減
}
else if((temp2&0X80)==0)
{
key=4; //開/停鍵---第7位
keyoff();
}
}//有鍵按下
else
{ //無鍵按下
key=9;
keynum=0; //恢復(fù)keynum為0,取消連續(xù)鍵值
}
return(key); //返回鍵值
}
//鍵程序結(jié)束
(文源網(wǎng)絡(luò),侵刪)