欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 關于按鍵的單擊和長按程序的問題 [打印本頁]

作者: 231244234    時間: 2023-5-17 09:26
標題: 關于按鍵的單擊和長按程序的問題
  1. #include <stc8h.h>

  2. #define BUTTON1_PIN P00
  3. #define BUTTON2_PIN P01

  4. #define LONG_PRESS_THRESHOLD 500 // 長按閾值,單位為毫秒

  5. // 假設按鍵狀態的枚舉類型為 ButtonState
  6. typedef enum {
  7.   IDLE,
  8.   PRESS,
  9.   RELEASE,
  10.   LONG_PRESS
  11. } ButtonState;

  12. // 按鍵狀態變量
  13. ButtonState button1State = IDLE;
  14. ButtonState button2State = IDLE;

  15. // 處理按鍵1的單擊操作
  16. void handleButton1Click() {
  17.   // 處理按鍵1的單擊操作
  18.         COM4_DA_L= 0xff;

  19.   // ...
  20. }

  21. // 處理按鍵2的單擊操作
  22. void handleButton2Click() {
  23.   // 處理按鍵2的單擊操作
  24.           COM5_DA_L= 0xff;

  25.   // ...
  26. }

  27. // 處理按鍵1的長按操作
  28. void handleButton1LongPress() {
  29.   // 處理按鍵1的長按操作
  30.   // ...
  31. }

  32. // 處理按鍵2的長按操作
  33. void handleButton2LongPress() {
  34.   // 處理按鍵2的長按操作
  35.   // ...
  36. }

  37. void delayMs(unsigned int ms) {
  38.   unsigned int i, j;
  39.   for (i = ms; i > 0; i--) {
  40.     for (j = 110; j > 0; j--);
  41.   }
  42. }

  43. void main(void) {
  44.   // 初始化按鍵引腳設置
  45.       TSCHEN1 = 0xff;
  46.     TSCHEN2 = 0xff;
  47.     TSCFG1  = (7<<4) + 6;        //開關電容工作頻率 = fosc/(2*(TSCFG1[6:4]+1))
  48.         TSCFG2  = 1;
  49.     TSCTRL = 0x80;//使能觸摸按鍵功能、自動重復掃描按鍵、不等待標志清零、使用內部32K晶振、不使能16位比較器、不使能低功耗喚醒、單次掃描1次
  50.             P_SW2 |= 0x80; //開啟控制寄存器
  51.         P0M1 = 0x00;   P0M0 = 0x00;   //設置為準雙向口
  52.         P1M1 = 0x00;   P1M0 = 0x00;   //設置為準雙向口
  53.         P2M1 = 0x00;   P2M0 = 0x00;   //設置為準雙向口
  54.         P3M1 = 0x00;   P3M0 = 0x00;   //設置為準雙向口
  55.         P4M1 = 0x00;   P4M0 = 0x00;   //設置為準雙向口
  56.         P5M1 = 0x00;   P5M0 = 0x00;   //設置為準雙向口
  57.         P6M1 = 0x00;   P6M0 = 0x00;   //設置為準雙向口
  58.         P7M1 = 0x00;   P7M0 = 0x00;   //設置為準雙向口  

  59.         COMEN = 0xff; //使能 COM0~COM7
  60.         SEGENL = 0xff; //使能 SEG0~SEG7
  61.         SEGENH = 0xff; //使能 SEG8~SEG15

  62.         LEDCTRL = 0x20; //LED 驅動共陰/共陽模式
  63.         LEDCKS = 7; //設置 LED 刷新頻率
  64.         LEDCTRL |= 0x80; //LED啟動
  65.   
  66.   while (1) {
  67.     // 檢測按鍵1狀態
  68.     if (BUTTON1_PIN == 0) {
  69.       delayMs(5); // 延時去抖動
  70.       if (BUTTON1_PIN == 0) {
  71.         // 按鍵1被按下
  72.         button1State = PRESS;
  73.         
  74.         // 延時一段時間,并檢測是否達到長按閾值
  75.         delayMs(LONG_PRESS_THRESHOLD);
  76.         if (BUTTON1_PIN == 0) {
  77.           // 達到長按閾值
  78.           button1State = LONG_PRESS;
  79.           handleButton1LongPress();
  80.         } else {
  81.           // 沒有達到長按閾值,執行單擊操作
  82.           button1State = RELEASE;
  83.           handleButton1Click();
  84.         }
  85.         
  86.         // 等待按鍵釋放
  87.         while (BUTTON1_PIN == 0);
  88.         button1State = IDLE;
  89.       }
  90.     }
  91.    
  92.     // 檢測按鍵2狀態
  93.     if (BUTTON2_PIN == 0) {
  94.       delayMs(5); // 延時去抖動
  95.       if (BUTTON2_PIN == 0) {
  96.         // 按鍵2被按下
  97.         button2State = PRESS;
  98.         
  99.         // 延時一段時間,并檢測是否達到長按閾值
  100.         delayMs(LONG_PRESS_THRESHOLD);
  101.         if (BUTTON2_PIN == 0) {
  102.           // 達到長按閾值
  103.             button2State = LONG_PRESS;
  104.             handleButton2LongPress();
  105.         } else {
  106. // 沒有達到長按閾值,執行單擊操作
  107.             button2State = RELEASE;
  108.             handleButton2Click();
  109. }
  110.     // 等待按鍵釋放
  111.     while (BUTTON2_PIN == 0);
  112.     button2State = IDLE;
  113.   }
  114. }
  115.   }
  116. }

  117. // 執行其他代碼邏輯

  118.          
復制代碼
為啥我按鍵沒按他就已經亮了

作者: wulin    時間: 2023-5-17 21:00
STC8H觸摸鍵功能做長按有點難度。
Desktop.rar (1.26 MB, 下載次數: 10)


作者: lids    時間: 2023-5-18 08:43
按鍵消抖不要用延時




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1