亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 05:39:52
字體:
來源:轉載
供稿:網友
處理功能鍵

  功能鍵的問題在于,用戶界面并非固定的,用戶功能鍵的選擇將使屏幕畫面處于不同的顯示狀態下。例如,主畫面如圖1:

C語言嵌入式系統編程修煉之鍵盤操作(圖一)
圖1 主畫面

  當用戶在設置XX上按下Enter鍵之后,畫面就切換到了設置XX的界面,如圖2:

C語言嵌入式系統編程修煉之鍵盤操作(圖二)
圖2 切換到設置XX畫面

  程序如何判定用戶處于哪一畫面,并在該畫面的程序狀態下調用對應的功能鍵處理函數,而且保證良好的結構,是一個值得思考的問題。

  讓我們來看看WIN32編程中用到的"窗口"概念,當消息(message)被發送給不同窗口的時候,該窗口的消息處理函數(是一個callback函數)最終被調用,而在該窗口的消息處理函數中,又根據消息的類型調用了該窗口中的對應處理函數。通過這種方式,WIN32有效的組織了不同的窗口,并處理不同窗口情況下的消息。

  我們從中學習到的就是:

 ?。?)將不同的畫面類比為WIN32中不同的窗口,將窗口中的各種元素(菜單、按鈕等)包含在窗口之中;

 ?。?)給各個畫面提供一個功能鍵"消息"處理函數,該函數接收按鍵信息為參數;

 ?。?)在各畫面的功能鍵"消息"處理函數中,判定按鍵類型和當前焦點元素,并調用對應元素的按鍵處理函數。

/* 將窗口元素、消息處理函數封裝在窗口中 */
strUCt windows
{
 BYTE currentFocus;
 ELEMENT element[ELEMENT_NUM];
 void (*messageFun) (BYTE keyValue);
 …
};
/* 消息處理函數 */
void messageFunction(BYTE keyValue)
{
 BYTE i = 0;
 /* 獲得焦點元素 */
 while ( (element [i].ID!= currentFocus)&& (i < ELEMENT_NUM) )
 {
  i++;
 }
 /* "消息映射" */
 if(i < ELEMENT_NUM)
 {
  switch(keyValue)
  {
   case OK:
    element[i].OnOk();
    break;
   …
  }
 }
}
  在窗口的消息處理函數中調用相應元素按鍵函數的過程類似于"消息映射",這是我們從WIN32編程中學習到的。編程到了一個境界,很多東西都是相通的了。其它地方的思想可以拿過來為我所用,是為編程中的"拿來主義"。

  在這個例子中,假如我們還想玩得更大一點,我們可以借鑒MFC中處理MESSAGE_MAP的方法,我們也可以學習MFC定義幾個精妙的宏來實現"消息映射"。 處理數字鍵

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

/* 用戶數字輸入結構體 */
typedef struct tagInputNum
{
 BYTE byNum; /* 接收用戶輸入賦值 */
 BYTE XPos; /* 數字輸入在屏幕上的顯示位置x坐標 */
 BYTE yPos; /* 數字輸入在屏幕上的顯示位置y坐標 */
}InputNum, *LPInputNum;

  那么接收用戶輸入就可以定義一個結構體數組,用數組中的各位組成一個完整的數字:

InputNum inputElement[NUM_LENGTH]; /* 接收用戶數字輸入的數組 */
/* 數字按鍵處理函數 */
extern void onNumKey(BYTE num)
{
if(num==0 num==1) /* 只接收二進制輸入 */
{
 /* 在屏幕上顯示用戶輸入 */
 DrawText(inputElement[currentElementInputPlace].xPos, inputElement[currentElementInputPlace].yPos, "%1d", num);
 /* 將輸入賦值給數組元素 */
 inputElement[currentElementInputPlace].byNum = num;
 /* 焦點及光標右移 */
 moveToRight();
}
}
  將數字每一位輸入的坐標和輸入值捆綁后,在數字鍵處理函數中就可以較有結構的組織程序,使程序顯得很緊湊。

  整理用戶輸入

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


/* 從2進制數據位轉化為有效數據:XXX */
void convertToXXX()
{
 BYTE i;
 XXX = 0;
 for (i = 0; i < NUM_LENGTH; i++)
 {
  XXX += inputElement[i].byNum*power(2, NUM_LENGTH - i - 1);
 }
}
  反之,我們也可能需要在屏幕上顯示那些有效的數據位,因為我們也需要能夠反向轉化:

/* 從有效數據轉化為2進制數據位:XXX */
void convertFromXXX()
{
 BYTE i;
 XXX = 0;
 for (i = 0; i < NUM_LENGTH; i++)
 {
  inputElement[i].byNum = XXX / power(2, NUM_LENGTH - i - 1) % 2;
 }
}
  當然在上面的例子中,因為數據是2進制的,用power函數不是很好的選擇,直接用"<< >>"移位操作效率更高,我們僅是為了說明問題的方便。試想,假如用戶輸入是十進制的,power函數或許是唯一的選擇了。

  總結

  本篇給出了鍵盤操作所涉及的各個方面:功能鍵處理、數字鍵處理及用戶輸入整理,基本上提供了一個全套的按鍵處理方案。對于功能鍵處理方法,將LCD屏幕與Windows窗口進行類比,提出了較新奇地解決屏幕、鍵盤繁雜交互問題的方案。

  計算機學的許多知識都具有相通性,因而,不斷追趕時髦技術而忽略基本功的做法是徒勞無意的。我們最多需要"精通"三種語言(精通,一個在如今的求職簡歷里泛濫成災的詞語),最佳拍檔是匯編、C、C++(或java),很顯然,假如你"精通"了這三種語言,其它語言你應該是可以很快"熟悉"的,否則你就沒有"精通"它們。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久新婚| 欧美日韩中国免费专区在线看| 97人人做人人爱| 亚洲精品国产成人| 亚洲精品久久久久久久久久久久久| 成人网在线免费观看| 伊人男人综合视频网| 欧美色videos| 91精品国产91久久久久| 亚洲专区在线视频| 92国产精品视频| 欧美日韩国产限制| 欧美成人午夜激情视频| www.欧美精品一二三区| 亚洲乱码国产乱码精品精| 中文日韩电影网站| 久久久国产精品亚洲一区| 国产日韩精品在线| 欧美在线性爱视频| 亚洲天堂男人的天堂| 一色桃子一区二区| 精品久久中文字幕| 亚洲欧洲美洲在线综合| 欧美激情一区二区三区高清视频| 欧美激情第1页| 日韩av一区在线| 亚洲精品福利视频| 亚洲性av在线| 欧美日韩国产一区二区| 日韩中文字幕久久| 欧美电影在线播放| 欧美在线亚洲一区| 国产精品久久久久av| 久久久精品一区二区三区| 欧美日韩在线第一页| xxxx性欧美| 国产亚洲精品美女久久久| 午夜精品一区二区三区在线播放| 久久中文字幕在线视频| 孩xxxx性bbbb欧美| 国产日韩精品一区二区| 日韩中文第一页| 亚洲一区二区三区成人在线视频精品| 亚洲欧美日韩第一区| 久久久久99精品久久久久| 国产成人久久久精品一区| 精品久久久久久久久国产字幕| www.亚洲成人| 久久精品国产96久久久香蕉| 午夜精品久久久久久久白皮肤| 国产亚洲精品久久久久久牛牛| 中日韩午夜理伦电影免费| 国产91免费看片| 精品视频在线导航| 亚洲国产精品99| 欧美激情久久久久| 精品一区二区三区四区| 日韩欧美成人网| 人体精品一二三区| 精品免费在线视频| 91精品久久久久久久久青青| 欧美一区视频在线| 成人激情视频网| 久久这里有精品视频| 国产精品综合网站| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品在线观看www| 欧美极品少妇xxxxⅹ免费视频| 亚洲国产日韩欧美在线动漫| 1769国内精品视频在线播放| 久久久国产一区二区三区| 日韩av一区在线观看| 日韩精品在线观看网站| 日本午夜人人精品| 欧美福利在线观看| 最新91在线视频| 久久久91精品国产一区不卡| 91亚洲人电影| 欧美寡妇偷汉性猛交| 亚洲精品欧美极品| 欧美一区二区三区图| 亚洲视频日韩精品| 日韩在线观看精品| 国产精品视频永久免费播放| 国产精品视频自拍| 成人激情视频在线播放| 欧美综合第一页| 97在线日本国产| 亚洲2020天天堂在线观看| 国产精品r级在线| 欧美日韩亚洲精品一区二区三区| 伊人激情综合网| 欧美限制级电影在线观看| 俺去了亚洲欧美日韩| 中文字幕欧美日韩精品| 91精品国产综合久久久久久蜜臀| 成人福利免费观看| 亚洲欧美中文日韩在线v日本| 亚洲精品电影网在线观看| 亚洲成av人乱码色午夜| 青青草成人在线| 亚洲欧洲黄色网| 精品国产999| 亚洲美女精品久久| 欧美精品日韩www.p站| 欧美激情日韩图片| 国产一区深夜福利| 国产精品h片在线播放| 国产在线播放91| 亚洲免费高清视频| 日韩视频免费中文字幕| 亚洲最大的网站| 国产亚洲成av人片在线观看桃| 中文字幕日韩综合av| 国产精品热视频| 91av在线精品| 久久久久久网址| xx视频.9999.com| 国产日韩一区在线| 欧美亚洲国产另类| 国产精品入口福利| 久久天天躁狠狠躁夜夜av| 日韩精品中文字幕在线播放| 欧美专区第一页| 欧美成人三级视频网站| 欧美日本中文字幕| 亚洲色图狂野欧美| 国产精品久久视频| 久久人体大胆视频| 亚洲国模精品私拍| 欧美性猛交99久久久久99按摩| 亚洲一级黄色av| 久久免费少妇高潮久久精品99| 一本一本久久a久久精品牛牛影视| 欧美成年人视频| 中文字幕亚洲激情| 亚洲精品国产精品国产自| 68精品国产免费久久久久久婷婷| 久久人91精品久久久久久不卡| 亚洲综合色激情五月| 欧美丰满少妇xxxxx| 欧美国产日韩一区二区| 久久中文久久字幕| 俺去啦;欧美日韩| 欧美激情在线狂野欧美精品| 亚洲最大激情中文字幕| 国产精品久久久久999| 成人精品网站在线观看| 日韩中文字幕在线精品| 精品无人区太爽高潮在线播放| 最近2019年日本中文免费字幕| 欧洲亚洲免费视频| 9.1国产丝袜在线观看| 日韩av在线天堂网| 国产精品中文字幕在线观看| 国产精品久久久久久影视| 久久久999精品免费| 国语自产精品视频在线看抢先版图片| 91色精品视频在线| 大量国产精品视频| 亚洲女人初尝黑人巨大| 欧美性猛交xxxx久久久| 精品久久久久人成| 插插插亚洲综合网|