亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于C51結構體的目錄式菜單程序設計

        2014-04-29 00:00:00榮相
        計算機光盤軟件與應用 2014年11期

        摘 要:針對礦用產品智能化程度提高,人機界面豐富,程序設計工作量大,修改難等問題,本文提出了基于C51的結構體的目錄式菜單程序框架,通過目錄查詢和函數指針調用,實現各種菜單操作功能。通過多項目應用,驗證了該方法實現的菜單結構緊湊、運行穩(wěn)定、修改方便和通用性強等特點,具有很好的實用價值。

        關鍵詞:目錄式菜單;C51;結構體;函數指針

        中圖分類號:TP368.12

        隨著礦用產品智能化越來越高,人機界面越來越豐富,而在目前礦用產品中,人機界面多基于單片機及按鍵方式實現,對于復雜的人機界面程序設計工作量很大,且存在經常需要修改的問題。因此設計了運行可靠、修改方便的菜單程序框架可以降低工作量,提高產品開發(fā)效率,且為以后程序設計建立模板。多級菜單程序的設計方法很多,最典型的方法是根據按鍵動作及顯示界面建立索引關系表,具體實現方法見文獻[1]。該方法基于這個關系表,增加或調整界面時,對結構表修改較大,特別是在界面很多時不方便,在修改及通用性方面差。作者通過總結已往的各種菜單設計方法,根據設計菜單經驗,設計了一種基于C51結構體的目錄式菜單,通過目錄查詢和函數指針調用,實現菜單各種操作功能。

        1 目錄式菜單程序設計

        通過對菜單的共性分析,提煉出菜單結構特點,形成菜單條結構體。一般每個菜單項有菜單標簽和子菜單列表;可以通過上下選擇鍵對子菜單項上下選擇;在選擇后進行確認操作,調用功能函數執(zhí)行,且可進入下一級子菜單或進入當前菜單的參數修改;在參數修改時通過上下選擇鍵修改;取消或返回可通過取消鍵操作。為實現以上功能首先建立菜單條結構體,并根據菜單功能項目,分級建立菜單結構體,確立菜單的顯示內容、菜單條之間關系及執(zhí)行的功能等,然后再設計各功能函數。因此本設計的關鍵是要定義好菜單的目錄結構體以及菜單的操作及顯示函數。

        2 結構體定義

        2.1 菜單條結構體定義

        菜單條結構體確立本菜單的顯示內容、附加數據、結構關系、執(zhí)行功能等屬性,包含內容有當前菜單條數、菜單標簽、菜單條名稱、菜單條數據指針、父菜單指針、子菜單指針、執(zhí)行功能函數等關系,結構體如下定義。

        struct MenuItem

        { uchar MenuCount; //當前菜單條數

        char *MenuCaption; //菜單標簽

        char *DisplayString; //菜單條名稱

        struct MenuData *DisplayData; //菜單條數據指針

        struct MenuItem *ParentMenus; //父菜單指針

        struct MenuItem *ChildrenMenus; //子菜單指針

        void (*Subs)(); }; //執(zhí)行功能函數

        2.2 菜單條數據結構體定義

        為了減少程序量和操作方便,在有些最底層菜單后附帶數據,而這些數據的屬性不同,操作顯示都有區(qū)別,因此根據他們的共性將數據的屬性和操作、顯示等封裝成結構體,包含內容有當前數據個數、數據名稱、數據屬性、修改操作、顯示操作等,結構體如下定義。

        struct MenuData

        { uchar Count; //數據條數

        char * Name; //數據名稱

        uchar Attribute; //數據屬性,

        void (*Set)(); // 設置函數

        void (*Show)();}; // 顯示函數

        2.3 菜單目錄結構體定義

        在菜單條結構體基礎上,根據每個界面菜單的內容填寫菜單目錄結構體,再根據具體功能寫各功能函數。菜單目錄結構體示例如下。

        struct MenuItem code Menu[]=

        { {3,\"-菜單-\", \"1 菜單1\", MenuData1, ParentMenu, Menu1, Subs1},

        {3,\"-菜單-\", \"2 菜單2\", MenuData2, ParentMenu, Menu2, Subs2},

        {3,\"-菜單-\", \"3 菜單3\", MenuData3, ParentMenu, Menu3, Subs3},};

        3 菜單目錄操作函數設計

        定義好菜單目錄結構體后,關鍵還要實現菜單目錄檢索和顯示,具體由以下兩個功能函數實現。

        3.1 菜單目錄檢索函數設計

        通過菜單檢索函數建立按鍵操作和菜單目錄的關系,可以在菜單目錄中檢索出當前需要的菜單及其相關的功能。void SearchMenu(void)函數根據按鍵狀態(tài),實現菜單上選、下選、返回、執(zhí)行菜單功能函數等操作功能。

        3.2 菜單顯示函數設計

        菜單顯示函數根據當前操作狀態(tài)顯示菜單條及相關數據,以及實現反白顯示等功能。

        void ShowMenu(void)函數實現菜單標簽、子菜單條顯示,并實現多條子菜單條行循環(huán)顯示操作,對選中的菜單條反白顯示等。

        3.3 菜單函數設計

        為了使程序結構一體化,將讀鍵、菜單檢索、菜單顯示等函數封裝到一起,同時還具備對實時數據刷新、超時返回默認界面等功能。

        4 實例分析

        根據以上的目錄式菜單設計方法,以水泵閥門控制箱顯示單元實例應用進行分析。其硬件環(huán)境如下,CPU選用C8051F340,采用內部12MHz頻率運行,使用內部4K RAM作為顯存;顯示采用DM160128圖形液晶顯示模塊,不帶字庫,可以顯示16行20列字符或8行10列漢字;輸入采用按鍵和紅外遙控方式,設置有四個功能鍵(上選、下選、確認、取消/返回)。根據該項目的需要,顯示主菜單分實時數據、記錄查詢、參數設置、系統(tǒng)設置、參數校準、系統(tǒng)信息等六大項,而每項有多級子項,總共所有菜單條近300條。根據結構體菜單設計,菜單目錄結構體及數據結構體部分示例如下。

        4.1 主菜單目錄

        struct MenuItem code MainMenu[]=

        { {6,\"-主菜單-\", \"1 實時數據\", NullData, RootMenu, ViewMenu, NullSubs},

        {0,Null, \"2 記錄查詢\", NullData, RootMenu, FindMenu, NullSubs},

        {0,Null, \"3 參數設置\", NullData, RootMenu, SetupMenu, NullSubs},

        {0,Null, \"4 系統(tǒng)設置\", NullData, RootMenu, SystemMenu, NullSubs},

        {0,Null, \"5 出廠校準\", NullData, RootMenu, DebugMenu, NullSubs},

        {0,Null, \"6 系統(tǒng)信息\", NullData, RootMenu, HelpMenu, NullSubs},

        };

        4.2 子菜單目錄

        struct MenuItem code SystemMenu[]=

        {{3,\"-系統(tǒng)設置-\",\"1 通信設置\",NullData,MainMenu,ComSetup, CopyCom},

        {0,Null, \"2 時間設置\",NullData, MainMenu, ClockSetup, CopyClock},

        {0,Null, \"3 記錄清除\",NullData, MainMenu, ClearSoe, NullSubs},

        };

        4.3 帶顯示數據子菜單目錄

        struct MenuItem code ComSetup[]=

        {

        { 5, \"-通信設置-\",\"1 通信方式:\", ComData, SystemMenu, Null, NullSubs},

        { 0, Null, \"2 通信地址:\", ComData, SystemMenu, Null, NullSubs},

        { 0, Null, \"3 RS485速率:\", ComData, SystemMenu, Null, NullSubs},

        { 0, Null, \"4 CAN速率:\", ComData, SystemMenu, Null, NullSubs},

        { 0, Null, \"5 保存\", ComData, SystemMenu, Null, SaveCom},

        };

        4.4 菜單數據結構體

        struct MenuData code ComData[]=

        { { 5, \"Mode\", 2, SetCom, ShowCom},

        { 0, \"Addr\", 2, SetCom, ShowCom},

        { 0, \"RS485 Buad\", 2, SetCom, ShowCom},

        { 0, \"CAN Buad \", 2, SetCom, ShowCom},

        { 0, \"Save\", 1, SetCom, ShowCom},

        };

        5 目錄式菜單的技術優(yōu)勢

        本文提出的菜單設計方法在多個項目的顯示單元中的應用實踐,驗證了該方案顯著優(yōu)點如下:(1)菜單目錄基于C語言結構體定義,菜單內容及菜單項之間的關系明確,一目了然,閱讀修改方便;(2)形成菜單目錄后,增加、刪除和修改菜單只需對應的菜單目錄結構體和對應函數改動,不影響其他部分。(3)菜單條和數據融合成一體,顯示豐富,操作簡便;(4)所有功能采用函數指針調用,程序代碼緊湊,運行穩(wěn)定可靠;(5)目錄式菜單框架通用性強,可移植性好;(6)根據設置參數或程序運行狀態(tài),可以實現動態(tài)變化的菜單。

        6 結束語

        本文介紹了基于C51的結構體和函數指針調用的特點,設計目錄式菜單程序,并在礦用產品中成功的應用。通過該方法設計的菜單具有結構緊湊、性能穩(wěn)定、功能強、移植性好等優(yōu)點,具有很好的實用價值。

        參考文獻:

        [1]陸錚,羅嘉.單片機C語言下LCD多級菜單的一種實現方法[J].工礦自動化,2006(01):48-51.

        [2]童長飛.C8051F系列單片機開發(fā)與C語言編程[M].北京:北京航空航天大學出版社,2004.

        作者簡介:榮相(1977-),男,安徽樅陽人,工程師,現從事煤礦供配電技術研究工作。

        作者單位:中煤科工集團常州研究院有限公司,江蘇常州 21312

        欧洲女人性开放免费网站| 毛片在线啊啊| 无码人妻少妇久久中文字幕蜜桃| 国产av成人精品播放| 国产精品玖玖玖在线资源| 日韩偷拍一区二区三区视频| 国产精品福利久久香蕉中文| 日韩精品高清不卡一区二区三区| 亚洲一区二区三区免费av| 亚洲熟女熟妇另类中文| 国语淫秽一区二区三区四区| 中文字幕在线观看| 韩国三级大全久久网站| 国产人妻丰满熟妇嗷嗷叫| av在线亚洲欧洲日产一区二区| 色八a级在线观看| 国产乱子伦精品免费无码专区 | 奶头又大又白喷奶水av| 精品无码中文字幕在线| 高清国产美女一级a毛片在线 | 精品亚洲一区二区三区在线观看| 久久久久久亚洲AV成人无码国产| 日本在线中文字幕一区| 日本系列有码字幕中文字幕| 国产av一区二区三区性入口| 亚洲av永久无码精品网站在线观看 | 久久尤物av天堂日日综合| 成年女人午夜特黄特色毛片免| 在线观看亚洲视频一区二区| 99久久久人妻熟妇精品一区二区| 国产a在亚洲线播放| 国产精品久久久久乳精品爆| 精品久久久久久久无码| 91亚洲人成手机在线观看| 午夜一区二区在线视频| 综合色免费在线精品视频| 极品少妇被猛的白浆直喷白浆| 亚洲国产韩国欧美在线| 国产福利酱国产一区二区| av永远在线免费观看| 亚洲中文字幕乱码在线观看|