欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于按鍵的單擊和長按程序的問題
[打印本頁]
作者:
231244234
時間:
2023-5-17 09:26
標題:
關于按鍵的單擊和長按程序的問題
#include <stc8h.h>
#define BUTTON1_PIN P00
#define BUTTON2_PIN P01
#define LONG_PRESS_THRESHOLD 500 // 長按閾值,單位為毫秒
// 假設按鍵狀態的枚舉類型為 ButtonState
typedef enum {
IDLE,
PRESS,
RELEASE,
LONG_PRESS
} ButtonState;
// 按鍵狀態變量
ButtonState button1State = IDLE;
ButtonState button2State = IDLE;
// 處理按鍵1的單擊操作
void handleButton1Click() {
// 處理按鍵1的單擊操作
COM4_DA_L= 0xff;
// ...
}
// 處理按鍵2的單擊操作
void handleButton2Click() {
// 處理按鍵2的單擊操作
COM5_DA_L= 0xff;
// ...
}
// 處理按鍵1的長按操作
void handleButton1LongPress() {
// 處理按鍵1的長按操作
// ...
}
// 處理按鍵2的長按操作
void handleButton2LongPress() {
// 處理按鍵2的長按操作
// ...
}
void delayMs(unsigned int ms) {
unsigned int i, j;
for (i = ms; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void main(void) {
// 初始化按鍵引腳設置
TSCHEN1 = 0xff;
TSCHEN2 = 0xff;
TSCFG1 = (7<<4) + 6; //開關電容工作頻率 = fosc/(2*(TSCFG1[6:4]+1))
TSCFG2 = 1;
TSCTRL = 0x80;//使能觸摸按鍵功能、自動重復掃描按鍵、不等待標志清零、使用內部32K晶振、不使能16位比較器、不使能低功耗喚醒、單次掃描1次
P_SW2 |= 0x80; //開啟控制寄存器
P0M1 = 0x00; P0M0 = 0x00; //設置為準雙向口
P1M1 = 0x00; P1M0 = 0x00; //設置為準雙向口
P2M1 = 0x00; P2M0 = 0x00; //設置為準雙向口
P3M1 = 0x00; P3M0 = 0x00; //設置為準雙向口
P4M1 = 0x00; P4M0 = 0x00; //設置為準雙向口
P5M1 = 0x00; P5M0 = 0x00; //設置為準雙向口
P6M1 = 0x00; P6M0 = 0x00; //設置為準雙向口
P7M1 = 0x00; P7M0 = 0x00; //設置為準雙向口
COMEN = 0xff; //使能 COM0~COM7
SEGENL = 0xff; //使能 SEG0~SEG7
SEGENH = 0xff; //使能 SEG8~SEG15
LEDCTRL = 0x20; //LED 驅動共陰/共陽模式
LEDCKS = 7; //設置 LED 刷新頻率
LEDCTRL |= 0x80; //LED啟動
while (1) {
// 檢測按鍵1狀態
if (BUTTON1_PIN == 0) {
delayMs(5); // 延時去抖動
if (BUTTON1_PIN == 0) {
// 按鍵1被按下
button1State = PRESS;
// 延時一段時間,并檢測是否達到長按閾值
delayMs(LONG_PRESS_THRESHOLD);
if (BUTTON1_PIN == 0) {
// 達到長按閾值
button1State = LONG_PRESS;
handleButton1LongPress();
} else {
// 沒有達到長按閾值,執行單擊操作
button1State = RELEASE;
handleButton1Click();
}
// 等待按鍵釋放
while (BUTTON1_PIN == 0);
button1State = IDLE;
}
}
// 檢測按鍵2狀態
if (BUTTON2_PIN == 0) {
delayMs(5); // 延時去抖動
if (BUTTON2_PIN == 0) {
// 按鍵2被按下
button2State = PRESS;
// 延時一段時間,并檢測是否達到長按閾值
delayMs(LONG_PRESS_THRESHOLD);
if (BUTTON2_PIN == 0) {
// 達到長按閾值
button2State = LONG_PRESS;
handleButton2LongPress();
} else {
// 沒有達到長按閾值,執行單擊操作
button2State = RELEASE;
handleButton2Click();
}
// 等待按鍵釋放
while (BUTTON2_PIN == 0);
button2State = IDLE;
}
}
}
}
// 執行其他代碼邏輯
復制代碼
為啥我按鍵沒按他就已經亮了
作者:
wulin
時間:
2023-5-17 21:00
STC8H觸摸鍵功能做長按有點難度。
Desktop.rar
(1.26 MB, 下載次數: 10)
2023-5-17 21:00 上傳
點擊文件名下載附件
作者:
lids
時間:
2023-5-18 08:43
按鍵消抖不要用延時
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1