用佇列實現的按鍵掃瞄程式

2021-08-20 04:42:31 字數 957 閱讀 2523

/*key.c*/

好處就是:可以實現多個按鍵狀態轉換,判斷是長按還是短按,消抖*/

#include #include "sys.h"

#define key0 pbin(0)

#define key1 pbin(1)

#define key2 pbin(2)

#define key3 pbin(3)

#define key0 pbin(4)

/*按鍵數量*/

#define key_num 5

#define key_value_size 10

#define down 1

#define ldown 2

#define up 3

u8 key_check(u8 n)

typedef struct /*按鍵佇列結構體*/

key_queue_struct ;

typedef struct /*按鍵結構體,管理按鍵*/

key_struct;

key_struct karry[key_num];

key_queue_struct kqueue;

void key_int(void)

}u8 key_valueget() /*鍵值出佇列,得到鍵值*/

}void keyn_scan(u8 n)

else if(keystruct->key_cont<2*keystruct->key_delay)/*從50加到100消抖50ms*/

else

if(keystruct->key_ltime>0) /*支援長按*/}}

} else /*沒有檢測到按鍵按下*/

else if(keystruct->key_cont>0)

else

} }}void key_scan()

}

關於按鍵掃瞄程式的終極討論

一 思路 基於stm8,按鍵處理,思路是這樣的 每20ms左右一次去掃瞄按鍵,用乙個key now記錄當前值,用key last記錄上次的值,如果key now和key last同時有效,則開始進行cnt 我設定兩個閾值,long press為100 100 20ms 2s short press為...

STC微控制器按鍵掃瞄程式

最近在做乙個電子秤相關專案,使用stc系列微控制器作為主控晶元,專案第一階段直接使用iap15w4k58s4驅動兩個矩陣鍵盤,一切除錯順利,在專案即將結束時老闆要求使用另一塊微控制器驅動矩陣鍵盤,讀取鍵值後通過串列埠傳回之前的iap主控 理由是為了節省從矩陣鍵盤到主控板之間的長排線的成本,16p 1...

用棧實現佇列 用佇列實現棧

棧的特點 filo firstinlastout 僅能從棧頂插入,刪除元素。最基本的介面包括push 從棧頂壓入元素 pop 從棧頂彈出元素 佇列的特點 fifo firstinfirstout 僅能從隊頭刪除元素,從隊尾插入元素。最基本的介面包括enque 從隊尾插入元素 deque 從隊頭刪除元...