欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
分享一些單片機按鍵程序
[打印本頁]
作者:
2367643286
時間:
2018-9-16 21:04
標題:
分享一些單片機按鍵程序
/*==================
按鍵讀鍵函數
==================*/
void ReadKey(void)
{
uchar ReadData;
ReadData=(((~(P3&0XF0))&0XF0)|(P3&0X0F)); //將前四位取反,即P3.7-P3.4 保留P3.3-P3.0的數據,【目的為將按鍵位取反,不影響其他位】
Trg = ReadData & (~Cont); // 只要有按鍵按下,在對應位會有一個脈沖,后四位不確定。如P3.4按下了,會出現一次0X1F;P3.5按下了,會出現一次0X2F;
Cont = ReadData; // 有按鍵按下,會出現對應編碼。
if(Cont&0xf0) // 如果按鍵不放,不處理
{
KeyCnt++; // 讀鍵次數
KeyEffect=Cont;
if(KeyCnt>=1000)KeyCnt=1000;
return;
}
else // 鍵值發生改變
{
if((KeyCnt>=10)&&(KeyCnt<=90)) //多次讀鍵消抖
{
KeyCnt=0;
KeyEffect=(KeyEffect&0xf0)+80;
KeyOpt();
send_char_com(KeyEffect);
if(Cont&0x10)
{
BeepCnt=0x10;
Keyflg_S2=1;
}
}
else if(KeyCnt>=150) //長按
{
BeepCnt=0x10;
KeyCnt=0;
}
}
}
/*===============
按鍵處理子函數
=================*/
void KeyOpt(void)
{
switch(KeyEffect)
{
case 0: // 空鍵
{
break;
}
case 0xd0: // S4鍵(P1.3)
{
BeepCnt=0x10;
Keyflg_S5^=1;
LED1^=1;
break;
}
case 0x90: // S5鍵(P1.4)
{
BeepCnt=0x10;
Keyflg_S4^=1;
LED2^=1;
break;
}
case 0x70: // S6鍵(P1.5)
{
BeepCnt=0x10;
Keyflg_S3^=1;
LED3^=1;
break;
}
case 0x60: // S6鍵(P1.5)
{
BeepCnt=0x10;
Keyflg_S2^=1;
LED4^=1;
break;
}
default: break;
}
}
作者:
bhjyqjs
時間:
2018-9-17 15:36
通過三個邏輯變量運算,確定按鍵的按下、長按、抬起,確實較妙。如果配以狀態機,則程序會更簡潔。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1