找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1197|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

為什么我完全照抄的這段單片機(jī)按鍵長按短按代碼會不能用呢?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1112147 發(fā)表于 2024-3-17 21:46 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
void KeyScan(void) //此函數(shù)放在定時中斷里每 1ms 掃描一次
{
static unsigned char Su8KeyLock1;
static unsigned int Su16KeyCnt1;
static unsigned char Su8KeyShortFlag=0; //按鍵“短按”觸發(fā)的標(biāo)志
if(0!=KEY_INPUT1)//單個 K1 按鍵沒有按下,及時清零一些標(biāo)志。
{
Su8KeyLock1=0; //按鍵解鎖
Su16KeyCnt1=0; //去抖動延時計數(shù)器清零,此行非常巧妙,是全場的亮點(diǎn)。
if(1==Su8KeyShortFlag) //松手的時候,如果“短按”標(biāo)志有效就觸發(fā)一次“短按”
{
Su8KeyShortFlag=0;
//先清零“短按”標(biāo)志避免一直觸發(fā)。
vGu8SingleKeySec=1;
//觸發(fā) K1 的“短按”
}
}
else if(0==Su8KeyLock1)//單個按鍵 K1 被按下
{
Su16KeyCnt1++; //累加定時中斷次數(shù)
if(Su16KeyCnt1>=KEY_SHORT_TIME) //“短按”兼“濾波”的“穩(wěn)定時間”KEY_SHORT_TIME
{
//注意,這里不能“自鎖”。后面“長按”觸發(fā)的時候才“自鎖”。
Su8KeyShortFlag=1;
//K1 的“短按”標(biāo)志有效,待松手時觸發(fā)。
}if(Su16KeyCnt1>=KEY_LONG_TIME) //“長按”兼“濾波”的“穩(wěn)定時間”KEY_LONG_TIME
{
Su8KeyLock1=1;
//此時“長按”觸發(fā)才“自鎖”
Su8KeyShortFlag=0; //既然此時“長按”有效,那么就要廢除潛在的“短按”。
vGu8SingleKeySec=2; //觸發(fā) K1 的“長按”
}
}
}
不知道為什么,按鍵完全沒用啊,有沒有好用的按鍵長按短按程序推薦一下
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2024-3-18 10:01 | 只看該作者
這段代碼本身沒有什么問題,關(guān)鍵是要在特定環(huán)境中運(yùn)行。第一行明確注釋:此函數(shù)放在定時中斷里每 1ms 掃描一次。
還有一個關(guān)鍵點(diǎn)是變量Su8KeyShortFlag的使用。Su8KeyShortFlag的初值=0,短按值=1,長按值=2。當(dāng)按鍵服務(wù)函數(shù)響
應(yīng)了Su8KeyShortFlag后必須清0。例如:
//按鍵服務(wù)函數(shù)
void key_service()
{
        if(Su8KeyShortFlag==1)
        {
                //......執(zhí)行任務(wù)1
                Su8KeyShortFlag=0;
        }
        if(Su8KeyShortFlag==2)
        {
                //......執(zhí)行任務(wù)2
                Su8KeyShortFlag=0;
        }
}
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表