專(zhuān)注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力
提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)
//**********************************************
//********** 鍵程序 *************************
//**********************************************
//判斷鍵是否松開(kāi)
void keyoff(void)
{
unsigned char temp;
while(1)
{
delayms(200); //延時(shí)200ms,以保證按確認(rèn)鍵,開(kāi)停鍵松開(kāi)后才進(jìn)入程序
temp=PORTD;
//判斷健是否松開(kāi),如果松開(kāi),則退出循環(huán)
if(temp==keytemp)
{ break;}
}
}
//******************************************
//判斷鍵是否連續(xù)按下
void keykey(unsigned char tmp)
{
unsigned char temp;
delayms(5); //延時(shí)5ms
temp=PORTD; //再讀鍵值
//如果松開(kāi)
if(temp!=tmp)
{keynum=0;}
//沒(méi)松開(kāi)
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);}
}
}
//*********************************************
//鍵盤(pán)鍵值判斷
unsigned char keysub(void)
{ //傳回鍵值
unsigned char temp1,temp2;//存儲(chǔ)PORTD值
unsigned char key; //設(shè)定鍵值
temp1=PORTD; //讀PORTD口
delayms(10); //延時(shí)10ms,防抖動(dòng)
temp2=PORTD;
if((temp1==temp2)&&(temp2!=keytemp))
{//有鍵按下
if((temp2&0X40)==0)
{
key=1; //確認(rèn)鍵---第6位
keyoff(); /鍵松開(kāi)
}
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; //開(kāi)/停鍵---第7位
keyoff();
}
}//有鍵按下
else
{ //無(wú)鍵按下
key=9;
keynum=0; //恢復(fù)keynum為0,取消連續(xù)鍵值
}
return(key); //返回鍵值
}
//鍵程序結(jié)束