欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
為什么我完全照抄的這段單片機按鍵長按短按代碼會不能用呢?
[打印本頁]
作者:
lqzd
時間:
2024-3-17 21:46
標題:
為什么我完全照抄的這段單片機按鍵長按短按代碼會不能用呢?
void KeyScan(void) //此函數放在定時中斷里每 1ms 掃描一次
{
static unsigned char Su8KeyLock1;
static unsigned int Su16KeyCnt1;
static unsigned char Su8KeyShortFlag=0; //按鍵“短按”觸發(fā)的標志
if(0!=KEY_INPUT1)//單個 K1 按鍵沒有按下,及時清零一些標志。
{
Su8KeyLock1=0; //按鍵解鎖
Su16KeyCnt1=0; //去抖動延時計數器清零,此行非常巧妙,是全場的亮點。
if(1==Su8KeyShortFlag) //松手的時候,如果“短按”標志有效就觸發(fā)一次“短按”
{
Su8KeyShortFlag=0;
//先清零“短按”標志避免一直觸發(fā)。
vGu8SingleKeySec=1;
//觸發(fā) K1 的“短按”
}
}
else if(0==Su8KeyLock1)//單個按鍵 K1 被按下
{
Su16KeyCnt1++; //累加定時中斷次數
if(Su16KeyCnt1>=KEY_SHORT_TIME) //“短按”兼“濾波”的“穩(wěn)定時間”KEY_SHORT_TIME
{
//注意,這里不能“自鎖”。后面“長按”觸發(fā)的時候才“自鎖”。
Su8KeyShortFlag=1;
//K1 的“短按”標志有效,待松手時觸發(fā)。
}if(Su16KeyCnt1>=KEY_LONG_TIME) //“長按”兼“濾波”的“穩(wěn)定時間”KEY_LONG_TIME
{
Su8KeyLock1=1;
//此時“長按”觸發(fā)才“自鎖”
Su8KeyShortFlag=0; //既然此時“長按”有效,那么就要廢除潛在的“短按”。
vGu8SingleKeySec=2; //觸發(fā) K1 的“長按”
}
}
}
不知道為什么,按鍵完全沒用啊,有沒有好用的按鍵長按短按程序推薦一下
作者:
wulin
時間:
2024-3-18 10:01
這段代碼本身沒有什么問題,關鍵是要在特定環(huán)境中運行。第一行明確注釋:此函數放在定時中斷里每 1ms 掃描一次。
還有一個關鍵點是變量Su8KeyShortFlag的使用。Su8KeyShortFlag的初值=0,短按值=1,長按值=2。當按鍵服務函數響
應了Su8KeyShortFlag后必須清0。例如:
//按鍵服務函數
void key_service()
{
if(Su8KeyShortFlag==1)
{
//......執(zhí)行任務1
Su8KeyShortFlag=0;
}
if(Su8KeyShortFlag==2)
{
//......執(zhí)行任務2
Su8KeyShortFlag=0;
}
}
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1