/*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 從隊頭刪除元...