• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于C51結(jié)構(gòu)體的目錄式菜單程序設(shè)計(jì)

      2014-04-29 00:00:00榮相

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

      關(guān)鍵詞:目錄式菜單;C51;結(jié)構(gòu)體;函數(shù)指針

      中圖分類號(hào):TP368.12

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

      1 目錄式菜單程序設(shè)計(jì)

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

      2 結(jié)構(gòu)體定義

      2.1 菜單條結(jié)構(gòu)體定義

      菜單條結(jié)構(gòu)體確立本菜單的顯示內(nèi)容、附加數(shù)據(jù)、結(jié)構(gòu)關(guān)系、執(zhí)行功能等屬性,包含內(nèi)容有當(dāng)前菜單條數(shù)、菜單標(biāo)簽、菜單條名稱、菜單條數(shù)據(jù)指針、父菜單指針、子菜單指針、執(zhí)行功能函數(shù)等關(guān)系,結(jié)構(gòu)體如下定義。

      struct MenuItem

      { uchar MenuCount; //當(dāng)前菜單條數(shù)

      char *MenuCaption; //菜單標(biāo)簽

      char *DisplayString; //菜單條名稱

      struct MenuData *DisplayData; //菜單條數(shù)據(jù)指針

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

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

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

      2.2 菜單條數(shù)據(jù)結(jié)構(gòu)體定義

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

      struct MenuData

      { uchar Count; //數(shù)據(jù)條數(shù)

      char * Name; //數(shù)據(jù)名稱

      uchar Attribute; //數(shù)據(jù)屬性,

      void (*Set)(); // 設(shè)置函數(shù)

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

      2.3 菜單目錄結(jié)構(gòu)體定義

      在菜單條結(jié)構(gòu)體基礎(chǔ)上,根據(jù)每個(gè)界面菜單的內(nèi)容填寫(xiě)菜單目錄結(jié)構(gòu)體,再根據(jù)具體功能寫(xiě)各功能函數(shù)。菜單目錄結(jié)構(gòu)體示例如下。

      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 菜單目錄操作函數(shù)設(shè)計(jì)

      定義好菜單目錄結(jié)構(gòu)體后,關(guān)鍵還要實(shí)現(xiàn)菜單目錄檢索和顯示,具體由以下兩個(gè)功能函數(shù)實(shí)現(xiàn)。

      3.1 菜單目錄檢索函數(shù)設(shè)計(jì)

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

      3.2 菜單顯示函數(shù)設(shè)計(jì)

      菜單顯示函數(shù)根據(jù)當(dāng)前操作狀態(tài)顯示菜單條及相關(guān)數(shù)據(jù),以及實(shí)現(xiàn)反白顯示等功能。

      void ShowMenu(void)函數(shù)實(shí)現(xiàn)菜單標(biāo)簽、子菜單條顯示,并實(shí)現(xiàn)多條子菜單條行循環(huán)顯示操作,對(duì)選中的菜單條反白顯示等。

      3.3 菜單函數(shù)設(shè)計(jì)

      為了使程序結(jié)構(gòu)一體化,將讀鍵、菜單檢索、菜單顯示等函數(shù)封裝到一起,同時(shí)還具備對(duì)實(shí)時(shí)數(shù)據(jù)刷新、超時(shí)返回默認(rèn)界面等功能。

      4 實(shí)例分析

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

      4.1 主菜單目錄

      struct MenuItem code MainMenu[]=

      { {6,\"-主菜單-\", \"1 實(shí)時(shí)數(shù)據(jù)\", NullData, RootMenu, ViewMenu, NullSubs},

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

      {0,Null, \"3 參數(shù)設(shè)置\", NullData, RootMenu, SetupMenu, NullSubs},

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

      {0,Null, \"5 出廠校準(zhǔn)\", NullData, RootMenu, DebugMenu, NullSubs},

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

      };

      4.2 子菜單目錄

      struct MenuItem code SystemMenu[]=

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

      {0,Null, \"2 時(shí)間設(shè)置\",NullData, MainMenu, ClockSetup, CopyClock},

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

      };

      4.3 帶顯示數(shù)據(jù)子菜單目錄

      struct MenuItem code ComSetup[]=

      {

      { 5, \"-通信設(shè)置-\",\"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 菜單數(shù)據(jù)結(jié)構(gòu)體

      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 目錄式菜單的技術(shù)優(yōu)勢(shì)

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

      6 結(jié)束語(yǔ)

      本文介紹了基于C51的結(jié)構(gòu)體和函數(shù)指針調(diào)用的特點(diǎn),設(shè)計(jì)目錄式菜單程序,并在礦用產(chǎn)品中成功的應(yīng)用。通過(guò)該方法設(shè)計(jì)的菜單具有結(jié)構(gòu)緊湊、性能穩(wěn)定、功能強(qiáng)、移植性好等優(yōu)點(diǎn),具有很好的實(shí)用價(jià)值。

      參考文獻(xiàn):

      [1]陸錚,羅嘉.單片機(jī)C語(yǔ)言下LCD多級(jí)菜單的一種實(shí)現(xiàn)方法[J].工礦自動(dòng)化,2006(01):48-51.

      [2]童長(zhǎng)飛.C8051F系列單片機(jī)開(kāi)發(fā)與C語(yǔ)言編程[M].北京:北京航空航天大學(xué)出版社,2004.

      作者簡(jiǎn)介:榮相(1977-),男,安徽樅陽(yáng)人,工程師,現(xiàn)從事煤礦供配電技術(shù)研究工作。

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

      武功县| 四子王旗| 蒙山县| 无极县| 招远市| 边坝县| 温泉县| 绥滨县| 基隆市| 郁南县| 北川| 孝感市| 静宁县| 安丘市| 托克逊县| 浦县| 潜江市| 洛浦县| 抚顺市| 孟连| 云南省| 武邑县| 延津县| 巴里| 龙山县| 开平市| 昌邑市| 日土县| 革吉县| 盘锦市| 福建省| 株洲县| 扶绥县| 绥宁县| 潍坊市| 页游| 信宜市| 金平| 湘西| 新兴县| 华亭县|