這是我十三年前讀研究生的時候?qū)懙南盗形恼隆?a href="http://www.www27dydycom.cn/soft/data/21-24/" target="_blank">C語言嵌入式系統(tǒng)編程修煉》系列文章中的一小節(jié),是一個用面向?qū)ο?,把LCD上面菜單,對象化的例子。
菜單操作無數(shù)人為之絞盡腦汁的問題終于出現(xiàn)了,在這一節(jié)里,我們將看到,在C語言中哪怕用到一丁點的面向?qū)ο笏枷?,軟件結(jié)構(gòu)將會有何等的改觀!筆者曾經(jīng)是個笨蛋,被菜單搞暈了,給出這樣的一個系統(tǒng):
|
要求以鍵盤上的"← →"鍵切換菜單焦點,當用戶在焦點處于某菜單時,若敲擊鍵盤上的OK、CANCEL鍵則調(diào)用該焦點菜單對應之處理函數(shù)。我曾經(jīng)傻傻地這樣做著:
/* 按下OK鍵 */void onOkKey(){/* 判斷在什么焦點菜單上按下Ok鍵,調(diào)用相應處理函數(shù) */Switch(currentFocus){case MENU1:menu1OnOk();break;case MENU2:menu2OnOk();break;…}}/* 按下Cancel鍵 */void onCancelKey(){/* 判斷在什么焦點菜單上按下Cancel鍵,調(diào)用相應處理函數(shù) */Switch(currentFocus){case MENU1:menu1OnCancel();break;case MENU2:menu2OnCancel();break;…}} |
終于有一天,我這樣做了:
/* 將菜單的屬性和操作"封裝"在一起 */typedef struct tagSysMenu{char *text; /* 菜單的文本 */BYTE xPos; /* 菜單在LCD上的x坐標 */BYTE yPos; /* 菜單在LCD上的y坐標 */void (*onOkFun)(); /* 在該菜單上按下ok鍵的處理函數(shù)指針 */void (*onCancelFun)(); /* 在該菜單上按下cancel鍵的處理函數(shù)指針 */}SysMenu, *LPSysMenu; |
當我定義菜單時,只需要這樣:
static SysMenu menu[MENU_NUM] ={{"menu1", 0, 48, menu1OnOk, menu1OnCancel},{" menu2", 7, 48, menu2OnOk, menu2OnCancel},{" menu3", 7, 48, menu3OnOk, menu3OnCancel},{" menu4", 7, 48, menu4OnOk, menu4OnCancel}…}; |
OK鍵和CANCEL鍵的處理變成:
/* 按下OK鍵 */void onOkKey(){menu[currentFocusMenu].onOkFun();}/* 按下Cancel鍵 */void onCancelKey(){menu[currentFocusMenu].onCancelFun();} |
程序被大大簡化了,也開始具有很好的可擴展性!我們僅僅利用了面向?qū)ο笾械姆庋b思想,就讓程序結(jié)構(gòu)清晰,其結(jié)果是幾乎可以在無需修改程序的情況下在系統(tǒng)中添加更多的菜單,而系統(tǒng)的按鍵處理函數(shù)保持不變。面向?qū)ο?,真神了?
-
lcd
+關(guān)注
關(guān)注
34文章
4482瀏覽量
170232 -
C語言
+關(guān)注
關(guān)注
180文章
7628瀏覽量
139842 -
嵌入式編程
+關(guān)注
關(guān)注
0文章
27瀏覽量
10496
原文標題:C語言對象化設計的實例——LCD菜單
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
C語言設計學習,教你如何將LCD菜單對象化
在LCD液晶顯示屏上實現(xiàn)多級嵌套菜單
解讀rtt的c的面向對象的對象創(chuàng)建及其啟動初始化流程
單片機C語言中LCD菜單的方法實現(xiàn)
單片機C語言LCD多菜單的實現(xiàn)
《C語言接口與實現(xiàn):創(chuàng)建可重用軟件的技術(shù)》電子教材免費下載
使用C語言實現(xiàn)LCD多級菜單的方法資料和程序免費下載

如何使用單片機C語言實現(xiàn)LCD的多級菜單

C語言接口與實現(xiàn)創(chuàng)建可重用軟件的技術(shù)PDF電子書免費下載

評論