C語言嵌入式系統程式設計修煉之 五 鍵盤操作

2021-09-30 07:46:53 字數 1817 閱讀 2636

處理功能鍵

功能鍵的問題在於,使用者介面並非固定的,使用者功能鍵的選擇將使螢幕畫面處於不同的顯示狀態下。例如,主畫面如圖1:

圖1 主畫面

當使用者在設定xx上按下enter鍵之後,畫面就切換到了設定xx的介面,如圖2:

圖2 切換到設定xx畫面

程式如何判斷使用者處於哪一畫面,並在該畫面的程式狀態下呼叫對應的功能鍵處理函式,而且保證良好的結構,是乙個值得思考的問題。

讓我們來看看win32程式設計中用到的"視窗"概念,當訊息(message)被傳送給不同視窗的時候,該視窗的訊息處理函式(是乙個callback 函式)最終被呼叫,而在該視窗的訊息處理函式中,又根據訊息的型別呼叫了該視窗中的對應處理函式。通過這種方式,win32有效的組織了不同的視窗,並處 理不同視窗情況下的訊息。

我們從中學習到的就是:

(1)將不同的畫面模擬為win32中不同的視窗,將視窗中的各種元素(選單、按鈕等)包含在視窗之中;

(2)給各個畫面提供乙個功能鍵"訊息"處理函式,該函式接收按鍵資訊為引數;

(3)在各畫面的功能鍵"訊息"處理函式中,判斷按鍵型別和當前焦點元素,並呼叫對應元素的按鍵處理函式。

/* 將視窗元素、訊息處理函式封裝在視窗中 */

struct windows

;/* 訊息處理函式 */

void messagefunction(byte keyvalue)

/* "訊息對映" */

if(i < element_num)}}

在視窗的訊息處理函式中呼叫相應元素按鍵函式的過程類似於"訊息對映",這是我們從win32程式設計中學習到的。程式設計到了乙個境界,很多東西都是相通的了。其它地方的思想可以拿過來為我所用,是為程式設計中的"拿來主義"。

在這個例子中,如果我們還想玩得更大一點,我們可以借鑑mfc中處理message_map的方法,我們也可以學習mfc定義幾個精妙的巨集來實現"訊息對映"。

處理數字鍵

使用者輸入數字時是一位一位輸入的,每一位的輸入都對應著螢幕上的乙個顯示位置(x座標,y座標)。此外,程式還需要記錄該位置輸入的值,所以有效組織使用者數字輸入的最佳方式是定義乙個結構體,將座標和數值**在一起:

/* 使用者數字輸入結構體 */

typedef struct taginputnum

inputnum, *lpinputnum;

那麼接收使用者輸入就可以定義乙個結構體陣列,用陣列中的各位組成乙個完整的數字:

inputnum inputelement[num_length]; /* 接收使用者數字輸入的陣列 */

/* 數字按鍵處理函式 */

extern void onnumkey(byte num)}

將數字每一位輸入的座標和輸入值**後,在數字鍵處理函式中就可以較有結構的組織程式,使程式顯得很緊湊。

整理使用者輸入

繼續第2節的例子,在第2節的onnumkey函式中,只是獲取了數字的每一位,因而我們需要將其轉化為有效資料,譬如要轉化為有效的***資料,其方法是:

/* 從2進製資料位轉化為有效資料:*** */

void convertto***() }

反之,我們也可能需要在螢幕上顯示那些有效的資料位,因為我們也需要能夠反向轉化:

/* 從有效資料轉化為2進製資料位:*** */

void convertfrom***() }

當然在上面的例子中,因為資料是2進製的,用power函式不是很好的選擇,直接用"<< >>"移位操作效率更高,我們僅是為了說明問題的方便。試想,如果使用者輸入是十進位制的,power函式或許是唯一的選擇了。

總結

C語言嵌入式系統程式設計修煉(三)

c語言嵌入式系統程式設計修煉 三 使用巨集定義在c 語言中,巨集是產生內嵌 的唯一方法。對於嵌入式系統而言,為了能達到效能要求,巨集是一種很好的代替函式的方法。寫乙個 標準 巨集 min 這個巨集輸入兩個引數並返回較小的乙個 錯誤做法 define min a,b a b a b 正確做法 defi...

C語言嵌入式系統程式設計修煉之螢幕操作

漢字處理 現在要解決的問題是,嵌入式系統中經常要使用的並非是完整的漢字型檔,往往只是需要提供數量有限的漢字供必要的顯示功能。例如,乙個微波爐的lcd上沒有必要提供顯示 電子郵件 的功能 乙個提供漢字顯示功能的空調的lcd上不需要顯示一條 短訊息 諸如此類。但是一部 手機 小靈通則通常需要包括較完整的...

C語言嵌入式系統程式設計修煉之螢幕操作

c語言嵌入式系統程式設計修煉之螢幕操作 出處 天極網 2005 06 20 15 54 現在要解決的問題是,嵌入式系統中經常要使用的並非是完整的漢字型檔,往往只是需要提供數量有限的漢字供必要的顯示功能 漢字處理 現在要解決的問題是,嵌入式系統中經常要使用的並非是完整的漢 字型檔,往往只是需要提供數量...