標(biāo)題:
關(guān)于按鍵的單擊和長(zhǎng)按程序的問(wèn)題
[打印本頁(yè)]
作者:
231244234
時(shí)間:
2023-5-17 09:26
標(biāo)題:
關(guān)于按鍵的單擊和長(zhǎng)按程序的問(wèn)題
#include <stc8h.h>
#define BUTTON1_PIN P00
#define BUTTON2_PIN P01
#define LONG_PRESS_THRESHOLD 500 // 長(zhǎng)按閾值,單位為毫秒
// 假設(shè)按鍵狀態(tài)的枚舉類(lèi)型為 ButtonState
typedef enum {
IDLE,
PRESS,
RELEASE,
LONG_PRESS
} ButtonState;
// 按鍵狀態(tài)變量
ButtonState button1State = IDLE;
ButtonState button2State = IDLE;
// 處理按鍵1的單擊操作
void handleButton1Click() {
// 處理按鍵1的單擊操作
COM4_DA_L= 0xff;
// ...
}
// 處理按鍵2的單擊操作
void handleButton2Click() {
// 處理按鍵2的單擊操作
COM5_DA_L= 0xff;
// ...
}
// 處理按鍵1的長(zhǎng)按操作
void handleButton1LongPress() {
// 處理按鍵1的長(zhǎng)按操作
// ...
}
// 處理按鍵2的長(zhǎng)按操作
void handleButton2LongPress() {
// 處理按鍵2的長(zhǎng)按操作
// ...
}
void delayMs(unsigned int ms) {
unsigned int i, j;
for (i = ms; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void main(void) {
// 初始化按鍵引腳設(shè)置
TSCHEN1 = 0xff;
TSCHEN2 = 0xff;
TSCFG1 = (7<<4) + 6; //開(kāi)關(guān)電容工作頻率 = fosc/(2*(TSCFG1[6:4]+1))
TSCFG2 = 1;
TSCTRL = 0x80;//使能觸摸按鍵功能、自動(dòng)重復(fù)掃描按鍵、不等待標(biāo)志清零、使用內(nèi)部32K晶振、不使能16位比較器、不使能低功耗喚醒、單次掃描1次
P_SW2 |= 0x80; //開(kāi)啟控制寄存器
P0M1 = 0x00; P0M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P1M1 = 0x00; P1M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P2M1 = 0x00; P2M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P3M1 = 0x00; P3M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P4M1 = 0x00; P4M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P5M1 = 0x00; P5M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P6M1 = 0x00; P6M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
P7M1 = 0x00; P7M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
COMEN = 0xff; //使能 COM0~COM7
SEGENL = 0xff; //使能 SEG0~SEG7
SEGENH = 0xff; //使能 SEG8~SEG15
LEDCTRL = 0x20; //LED 驅(qū)動(dòng)共陰/共陽(yáng)模式
LEDCKS = 7; //設(shè)置 LED 刷新頻率
LEDCTRL |= 0x80; //LED啟動(dòng)
while (1) {
// 檢測(cè)按鍵1狀態(tài)
if (BUTTON1_PIN == 0) {
delayMs(5); // 延時(shí)去抖動(dòng)
if (BUTTON1_PIN == 0) {
// 按鍵1被按下
button1State = PRESS;
// 延時(shí)一段時(shí)間,并檢測(cè)是否達(dá)到長(zhǎng)按閾值
delayMs(LONG_PRESS_THRESHOLD);
if (BUTTON1_PIN == 0) {
// 達(dá)到長(zhǎng)按閾值
button1State = LONG_PRESS;
handleButton1LongPress();
} else {
// 沒(méi)有達(dá)到長(zhǎng)按閾值,執(zhí)行單擊操作
button1State = RELEASE;
handleButton1Click();
}
// 等待按鍵釋放
while (BUTTON1_PIN == 0);
button1State = IDLE;
}
}
// 檢測(cè)按鍵2狀態(tài)
if (BUTTON2_PIN == 0) {
delayMs(5); // 延時(shí)去抖動(dòng)
if (BUTTON2_PIN == 0) {
// 按鍵2被按下
button2State = PRESS;
// 延時(shí)一段時(shí)間,并檢測(cè)是否達(dá)到長(zhǎng)按閾值
delayMs(LONG_PRESS_THRESHOLD);
if (BUTTON2_PIN == 0) {
// 達(dá)到長(zhǎng)按閾值
button2State = LONG_PRESS;
handleButton2LongPress();
} else {
// 沒(méi)有達(dá)到長(zhǎng)按閾值,執(zhí)行單擊操作
button2State = RELEASE;
handleButton2Click();
}
// 等待按鍵釋放
while (BUTTON2_PIN == 0);
button2State = IDLE;
}
}
}
}
// 執(zhí)行其他代碼邏輯
復(fù)制代碼
為啥我按鍵沒(méi)按他就已經(jīng)亮了
作者:
wulin
時(shí)間:
2023-5-17 21:00
STC8H觸摸鍵功能做長(zhǎng)按有點(diǎn)難度。
Desktop.rar
(1.26 MB, 下載次數(shù): 10)
2023-5-17 21:00 上傳
點(diǎn)擊文件名下載附件
作者:
lids
時(shí)間:
2023-5-18 08:43
按鍵消抖不要用延時(shí)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1