久久久久久久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亚洲精品国偷拍自产在线观看
|
色婷婷久久久久swag精品
|
国产精品久久久久久久久久久久久
|
久久伊人精品
|
国产日韩欧美电影
|
久久精品在线播放
|
毛片久久久
|
亚洲一区二区精品视频
|
狠狠色狠狠色综合系列
|
婷婷99
|
亚洲成人一区二区
|
天天躁日日躁狠狠躁白人
|
中文字字幕在线中文乱码范文
|
狠狠色狠狠色综合系列
|
看片一区
|
亚洲激情综合
|
午夜黄色
|
国产精品国产精品国产专区不卡
|
天天操网
|
一区二区日韩
|
亚洲激情第一页
|
欧美在线天堂
|
成人精品一区
|
不卡视频一区二区三区
|
欧美另类视频在线
|
三级在线免费
|
在线观看亚洲专区
|
午夜视频一区
|
久热9
|
亚洲欧美一区二区三区在线
|
久久久久久久亚洲精品
|
免费国产一区二区
|
日本成人在线观看网站
|
久久天堂
|
国产精品久久久久久久久久尿
|
欧美激情免费在线
|
国产日韩欧美电影
|
国产精品自产拍在线观看蜜
|
亚洲精品免费视频
|
xxxcom在线观看
|
国产色网站
|