久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
好用實在的MCU按鍵掃描處理短按長按方法,程序拿走不謝
[打印本頁]
作者:
whwteng
時間:
2021-1-8 18:16
標題:
好用實在的MCU按鍵掃描處理短按長按方法,程序拿走不謝
自己做項目總結出來覺得比較好用,拿出來分享一下
單片機源程序如下:
//------------------------自己的按鍵掃描-短按-長按處理--------------------------------
u8 uiKeyTimeCnt1; //按鍵1計數
u8 uiKeyTimeCnt2; //按鍵2計數
u8 uiKeyTimeCnt3; //按鍵3計數
u8 uiKeyTimeCnt4; //按鍵4計數
u8 uiKeyTimeCnt5; //按鍵5計數
u8 uiKeyTimeCnt6; //按鍵6計數
u8 ucShortTouchFlag1; //短按按鍵有效標志
u8 ucLongTouchFlag1; //長按按鍵有效標志
void Key_control(void)
{
//每10ms論巡一次
//KEY_DATA:按鍵數據--并先清一次零
//按鍵數據的獲取---這里是通過觸摸IC的IIC通信
KEY_DATA=0X0000;
I2C_ReadDeviceDataTo(0x80,&KEY_DATA,1);
KEY_DATA=KEY_DATA^0xffff;
switch(KEY_DATA)
{
case(0x1000):
uiKeyTimeCnt1++; //累加計時
if(uiKeyTimeCnt1>2) //這里是消抖,20ms足矣
ucShortTouchFlag1|=0x01; //激活按鍵1短按的有效標志
if(uiKeyTimeCnt1>999)
{
ucShortTouchFlag1&=~0x01; //清除按鍵1短按有效標志
ucLongTouchFlag1=1; //按鍵1長按10s有效標志
}
break;
case(0x0800):
uiKeyTimeCnt2++; //累加計時
if(uiKeyTimeCnt2>2)
ucShortTouchFlag1|=0x02; //激活按鍵2短按的有效標志
if(uiKeyTimeCnt2>999)
{
ucShortTouchFlag1&=~0x02; //清除按鍵2短按有效標志
ucLongTouchFlag1=2; //按鍵2長按10s有效標志
}
break;
case(0x0400):
uiKeyTimeCnt3++; //累加計時
if(uiKeyTimeCnt3>2)
ucShortTouchFlag1|=0x03; //激活按鍵3短按的有效標志
if(uiKeyTimeCnt3>999)
{
ucShortTouchFlag1&=~0x03; //清除按鍵3短按有效標志
ucLongTouchFlag1=3; //按鍵3長按10s有效標志
}
break;
case(0x0200):
uiKeyTimeCnt4++; //累加計時
if(uiKeyTimeCnt4>2)
ucShortTouchFlag1|=0x04; //激活按鍵4短按的有效標志
if(uiKeyTimeCnt4>999)
{
ucShortTouchFlag1&=~0x04; //清除按鍵4短按有效標志
ucLongTouchFlag1=4; //按鍵4長按10s有效標志
}
break;
case(0x0100):
uiKeyTimeCnt5++; //累加計時
if(uiKeyTimeCnt5>2)
ucShortTouchFlag1|=0x05; //激活按鍵5短按的有效標志
if(uiKeyTimeCnt5>999)
{
ucShortTouchFlag1&=~0x05; //清除按鍵5短按有效標志
ucLongTouchFlag1=5; //按鍵5長按10s有效標志
}
break;
case(0x0080):
uiKeyTimeCnt6++; //累加計時
if(uiKeyTimeCnt6>2)
ucShortTouchFlag1|=0x06; //激活按鍵6短按的有效標志
if(uiKeyTimeCnt6>999)
{
ucShortTouchFlag1&=~0x06; //清除按鍵6短按有效標志
ucLongTouchFlag1=6; //按鍵6長按10s有效標志
}
break;
default:
uiKeyTimeCnt1=uiKeyTimeCnt2=uiKeyTimeCnt3=uiKeyTimeCnt4=uiKeyTimeCnt5=uiKeyTimeCnt6=0;
//短按處理
switch(ucShortTouchFlag1)
{
case(0x01):
ucShortTouchFlag1=0x00; //這里處理完短按之后清零按鍵標志
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;
}
//處理長按
switch(ucLongTouchFlag1)
{
case 1:
ucLongTouchFlag1=0; //這里處理完長按之后清零按鍵標志
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;
}
}
復制代碼
作者:
ii11nnocent
時間:
2021-1-11 10:24
慢慢學習了,狀態機方法確實值得使用,可以解放CPU。
作者:
xyllovezuu
時間:
2021-1-14 12:48
很好,簡潔明了!
作者:
sdarling
時間:
2021-3-1 23:58
將長按處理的函數放在外邊,應該就可以處理到長按時間直接處理的功能,不需要等按鍵松開再執行了吧,就是還要多一個標志位,防止一直長按一直多次執行
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
特黄级国产片
|
亚洲一区二区三区在线视频
|
91视视频在线观看入口直接观看
|
欧美精品综合在线
|
欧美国产视频
|
日韩中文一区
|
国产精品久久av
|
亚洲三级在线观看
|
欧美在线一区二区三区
|
日本视频免费观看
|
成人黄视频在线观看
|
亚洲区一区二区
|
亚洲视频第一页
|
天天艹日日干
|
国产在线不卡
|
精品视频一区二区三区在线观看
|
99久久久无码国产精品
|
国产日韩精品视频
|
国产精品永久在线观看
|
亚洲精品视频二区
|
精品国产一区二区三区久久久四川
|
四季久久免费一区二区三区四区
|
www日
|
国产精品久久久久久久久久久久久久
|
男女免费视频网站
|
99久久婷婷国产综合精品电影
|
视频一区二区中文字幕
|
中文字幕在线一区
|
91精品国产综合久久久动漫日韩
|
毛片一区
|
欧产日产国产精品国产
|
亚洲精品国产偷自在线观看
|
色频
|
久久久久久久一区
|
午夜视频一区二区
|
久久久国产精品视频
|
日韩在线中文字幕
|
久久国产精品99久久久大便
|
国产精品特级毛片一区二区三区
|
国产黄色大片网站
|
www.中文字幕.com
|