欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
好用實(shí)在的MCU按鍵掃描處理短按長(zhǎng)按方法,程序拿走不謝
[打印本頁(yè)]
作者:
whwteng
時(shí)間:
2021-1-8 18:16
標(biāo)題:
好用實(shí)在的MCU按鍵掃描處理短按長(zhǎng)按方法,程序拿走不謝
自己做項(xiàng)目總結(jié)出來(lái)覺(jué)得比較好用,拿出來(lái)分享一下
單片機(jī)源程序如下:
//------------------------自己的按鍵掃描-短按-長(zhǎng)按處理--------------------------------
u8 uiKeyTimeCnt1; //按鍵1計(jì)數(shù)
u8 uiKeyTimeCnt2; //按鍵2計(jì)數(shù)
u8 uiKeyTimeCnt3; //按鍵3計(jì)數(shù)
u8 uiKeyTimeCnt4; //按鍵4計(jì)數(shù)
u8 uiKeyTimeCnt5; //按鍵5計(jì)數(shù)
u8 uiKeyTimeCnt6; //按鍵6計(jì)數(shù)
u8 ucShortTouchFlag1; //短按按鍵有效標(biāo)志
u8 ucLongTouchFlag1; //長(zhǎng)按按鍵有效標(biāo)志
void Key_control(void)
{
//每10ms論巡一次
//KEY_DATA:按鍵數(shù)據(jù)--并先清一次零
//按鍵數(shù)據(jù)的獲取---這里是通過(guò)觸摸IC的IIC通信
KEY_DATA=0X0000;
I2C_ReadDeviceDataTo(0x80,&KEY_DATA,1);
KEY_DATA=KEY_DATA^0xffff;
switch(KEY_DATA)
{
case(0x1000):
uiKeyTimeCnt1++; //累加計(jì)時(shí)
if(uiKeyTimeCnt1>2) //這里是消抖,20ms足矣
ucShortTouchFlag1|=0x01; //激活按鍵1短按的有效標(biāo)志
if(uiKeyTimeCnt1>999)
{
ucShortTouchFlag1&=~0x01; //清除按鍵1短按有效標(biāo)志
ucLongTouchFlag1=1; //按鍵1長(zhǎng)按10s有效標(biāo)志
}
break;
case(0x0800):
uiKeyTimeCnt2++; //累加計(jì)時(shí)
if(uiKeyTimeCnt2>2)
ucShortTouchFlag1|=0x02; //激活按鍵2短按的有效標(biāo)志
if(uiKeyTimeCnt2>999)
{
ucShortTouchFlag1&=~0x02; //清除按鍵2短按有效標(biāo)志
ucLongTouchFlag1=2; //按鍵2長(zhǎng)按10s有效標(biāo)志
}
break;
case(0x0400):
uiKeyTimeCnt3++; //累加計(jì)時(shí)
if(uiKeyTimeCnt3>2)
ucShortTouchFlag1|=0x03; //激活按鍵3短按的有效標(biāo)志
if(uiKeyTimeCnt3>999)
{
ucShortTouchFlag1&=~0x03; //清除按鍵3短按有效標(biāo)志
ucLongTouchFlag1=3; //按鍵3長(zhǎng)按10s有效標(biāo)志
}
break;
case(0x0200):
uiKeyTimeCnt4++; //累加計(jì)時(shí)
if(uiKeyTimeCnt4>2)
ucShortTouchFlag1|=0x04; //激活按鍵4短按的有效標(biāo)志
if(uiKeyTimeCnt4>999)
{
ucShortTouchFlag1&=~0x04; //清除按鍵4短按有效標(biāo)志
ucLongTouchFlag1=4; //按鍵4長(zhǎng)按10s有效標(biāo)志
}
break;
case(0x0100):
uiKeyTimeCnt5++; //累加計(jì)時(shí)
if(uiKeyTimeCnt5>2)
ucShortTouchFlag1|=0x05; //激活按鍵5短按的有效標(biāo)志
if(uiKeyTimeCnt5>999)
{
ucShortTouchFlag1&=~0x05; //清除按鍵5短按有效標(biāo)志
ucLongTouchFlag1=5; //按鍵5長(zhǎng)按10s有效標(biāo)志
}
break;
case(0x0080):
uiKeyTimeCnt6++; //累加計(jì)時(shí)
if(uiKeyTimeCnt6>2)
ucShortTouchFlag1|=0x06; //激活按鍵6短按的有效標(biāo)志
if(uiKeyTimeCnt6>999)
{
ucShortTouchFlag1&=~0x06; //清除按鍵6短按有效標(biāo)志
ucLongTouchFlag1=6; //按鍵6長(zhǎng)按10s有效標(biāo)志
}
break;
default:
uiKeyTimeCnt1=uiKeyTimeCnt2=uiKeyTimeCnt3=uiKeyTimeCnt4=uiKeyTimeCnt5=uiKeyTimeCnt6=0;
//短按處理
switch(ucShortTouchFlag1)
{
case(0x01):
ucShortTouchFlag1=0x00; //這里處理完短按之后清零按鍵標(biāo)志
break;
case(0x02):
ucShortTouchFlag1=0x00;
break;
case(0x03):
ucShortTouchFlag1=0x00;
break;
case(0x04):
ucShortTouchFlag1=0x00;
break;
case(0x05):
ucShortTouchFlag1=0x00;
break;
case(0x06):
ucShortTouchFlag1=0x00;
break;
}
//處理長(zhǎng)按
switch(ucLongTouchFlag1)
{
case 1:
ucLongTouchFlag1=0; //這里處理完長(zhǎng)按之后清零按鍵標(biāo)志
break;
case 2:
ucLongTouchFlag1=0;
break;
case 3:
ucLongTouchFlag1=0;
break;
case 4:
ucLongTouchFlag1=0;
break;
case 5:
ucLongTouchFlag1=0;
break;
case 6:
ucLongTouchFlag1=0;
break;
}break;
}
}
復(fù)制代碼
作者:
ii11nnocent
時(shí)間:
2021-1-11 10:24
慢慢學(xué)習(xí)了,狀態(tài)機(jī)方法確實(shí)值得使用,可以解放CPU。
作者:
xyllovezuu
時(shí)間:
2021-1-14 12:48
很好,簡(jiǎn)潔明了!
作者:
sdarling
時(shí)間:
2021-3-1 23:58
將長(zhǎng)按處理的函數(shù)放在外邊,應(yīng)該就可以處理到長(zhǎng)按時(shí)間直接處理的功能,不需要等按鍵松開(kāi)再執(zhí)行了吧,就是還要多一個(gè)標(biāo)志位,防止一直長(zhǎng)按一直多次執(zhí)行
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1