一類微控制器基於事件的鍵盤處理程式

2021-06-20 02:16:22 字數 1684 閱讀 6754

前言:大家知道,我們在微控制器的鍵盤處理程式中,經常使用延時操作.目的當然是為了去除抖動.延時去抖的效果是可靠而且簡單的.但是,對於經常的鍵盤操作,延時操作就會降低系統的實時性.而且,關鍵的是,延時演算法對於處理組合鍵就顯得不那麼得心應手了.

今天我們一起交流的就是這個"基於事件處理"的鍵盤處理程式.

"基於事件"這個想法是從vb程式中得到的.簡單的說,vb程式的工作機制是:程式檢測使用者操作,檢測到使用者行為後,發出相應的訊息給系統.但是到底對不對這個訊息進行處理,則是由另外的訊息處理程式進行.移植到我們這個微控制器上,就是:微控制器檢測到了使用者的行為,置相關的標誌位(發出訊息),但是到底對不對這個標誌位進行理睬,則是由相應的處理函式決定的.

下面我們就看一看c語言的例子:

//申請乙個儲存按鍵狀態的結構體   

struct keyboard

unsigned char s1_down;     //標誌位,標誌s1按鍵被按下

unsigned int s1_count;           //s1按鍵用來去抖的計數器

unsigned char s2_down;    //標誌位,標誌s2按鍵被按下

unsigned int s2_count;          //s2按鍵用來去抖的計數器 

unsigned char others_down; //用來標誌是否有除自身以外的其他按鍵按下

在下面的主程式中,我們示意一下這種按鍵處理怎麼做,以及它的優缺點:

#define s1     p0^0        //定義s1為p0^0

#define s2     p0^1        //定義s1為p0^1

void main()

for(;;)

//******************   訊息產生   **************************************

if(s1= =0)   //如果有s1按下

keyboard.s1_count++;      //開始去抖計數

if(keyboard.s1_count>150)  //這個值是自己系統的情況需要改變.

keyboard.s1_down=yes;   //產生訊息

if(s2_down= = 0)  //如果s2也按下

keyboard.others_down=yes;

else

keyboard.s1_down=no;

keyboard.s1_count=0;

keyboard.others_down=no;

}  //the end of if

//*********************  訊息處理  **************************************

if(keyboard.s1_down= =yes&&keyboard.others_down= =no)  //only s1 down

//your code here

else if(keyboard.s1_down= =yes&&keyboard.others_down= =yes) //組合鍵

if(keyboard.s2_down= =yes)  //這是s1和s2都按下的情況.

//your code here

從上面來看,主程式是在一直迴圈的,可以方便的處理組合鍵的情況.在多個專案中使用都沒有發現問題.

程式有寫複雜,但是條理清晰.

基於51微控制器矩陣鍵盤程式

用矩陣鍵盤輸入數字在數碼管顯示 矩陣鍵盤 的編寫有點像vhdl 編碼器的書寫,很多那些數字都是根據唯一的掃瞄位置來定,也就是說這些數字可以任意設定,主要就是巧妙在 0xf0 0xfe 通過這樣確定出一定的位置,然後 編碼 為你想要位置所代表的數字。矩陣鍵盤其實 都很固定,很多東西其實也可以算是一沉不...

51MCU 基於51微控制器的矩陣鍵盤

author manba cople 專業 iot 說明 記錄和輸出學習內容 介紹寫矩陣鍵盤的一種思路和具體實現 以鍵盤的某個角作為座標原點建立平面直角座標系,如下圖 圖為我設計計算器的矩陣鍵盤 從而,矩陣鍵盤的思路就是,給x方向 水平方向 賦值為1,y方向 豎直方向 賦值為0,不斷掃瞄判斷x方向是...

微控制器彩燈移動實驗 基於構建主義的微控制器彩燈實驗

基於構建主義的微控制器彩燈實驗 構建主義主張,學習不是由教師把知識資訊簡單地傳 遞給學生,而是要由學生自己主動地構建知識的意義,這種 構建是無法由他人來代替的。可以設想,如果我們的實驗總 是先把實驗的內容 過程 結果布置好,然後請同學們按照 步驟去操作,就不利於學生完整準確地去掌握和運用知識。本實驗...