單片機C語言下LCD多級菜單的一種實現方法

摘要:

????介紹了在C 語言環境下,在LCD 液晶顯示屏上實現多級嵌套菜單的一種簡便方法,提出了一個
結構緊湊、實用的程序模型。

???? 關鍵詞: 液晶顯示屏; 多級菜單; 單片機; C 語言; LCD
  中圖分類號:TP311. 1    文獻標識碼:B
????? 收稿日期:2005 - 11 - 21

0  引言
??? 由于C 語言的結構性和模塊化,采用C 語言編寫的程序容易閱讀和維護,還有很好的可移植性。本文介紹一種用C 語言實現的LCD 多級菜單的方法,該方法已成功應用在煤礦安全監測設備上。

1  硬件環境及LCD 菜單實現的功能
??? 圖形點陣式液晶可顯示用戶自定義的任意符號和圖形,并可卷動顯示。它作為單片機系統人機交互界面的重要組成部分被廣泛應用于實時檢測和顯示的儀器儀表中,例如手機上的顯示屏就是圖形點陣液晶。

采用圖形點陣式液晶顯示較之其它顯示方式主要有以下優點:

(1) 工作電壓低、功耗極低。工作電壓僅為3~5 V ,工作電流≤10 μA/ cm2 ,特別適用于低功耗的儀器儀表中。
(2) 液晶顯示屬被動顯示,受外界光線干擾小。
(3) 圖形點陣式液晶可顯示的信息量大、分辨率高。
(4) 不產生電磁干擾。
(5) 可靠性高,使用壽命長。

??? 本文所介紹的LCD 采用128 ×64 點陣的液晶屏,因此可顯示16 ×16 點陣的漢字4 行8 列。菜單為多級嵌套形式,最長的有13 層,主要完成對某個測點各方面的設置或查詢,可通過“向上”、“向下”、“回退”、“確認”4 個鍵或遙控器來實現對菜單的選擇。具體功能:“向上”鍵:在本層菜單的項目中向上移動進行
選擇;“向下”鍵:在本層菜單的項目中向下移動進行選擇;“回退”鍵:取消本層的菜單設置,返回上層菜
單;“確認”鍵:確認本層的菜單設置,進入下級菜單。可根據用戶在菜單中的選擇項對測點進行某些設置,或者進行某些特殊的顯示,例如對某個測點的實時曲線顯示等。

2  程序設計
??? 根據需求,首先建立一個結構,并定義一個結構變量KbdTabSt ruct 。結構變量就是把多個不同類型的變量結合在一起形成的一個組合型變量,構成一個結構的各個變量稱為結構元素。該結構中共有6 個結構元素,分別是5 個字符型和1 個指針變量,5 個字符型變量分別為當前及各個按鍵的索引號,也就是操作的狀態號,最后1 個指針變量指向需執行函數。這樣就可以做一個結構數組,在結構數組里為每一個菜單項編制一個單獨的函數,并根據菜單的嵌套順序排好本菜單項的索引號,以及本級菜單項的上、下卷動的索引號和上、下級菜單的索號。
具體程序如下所述:
typedef st ruct
{
 uchar  KeyStateIndex ;   / / 當前狀態索引號
 uchar  KeyDnState ;   / / 按下“向下”鍵時轉向的狀態索引號
 uchar  KeyUpState ;   / / 按下“向上”鍵時轉向的狀態索引號
 uchar  KeyCrState ;   / / 按下“回車”鍵時轉向的狀態索引號
 uchar  KeyBackState ;   / / 按下“退回”鍵時轉向的狀態索引號
 void  ( 3 CurrentOperate) ( ) ;   / / 當前狀態應該執行的
功能操作
}  KbdTabSt ruct ;
# define SIZE - OF KEYBD - MENU 55   / / 菜單總長度
KbdTabSt ruct code KeyTab[ SIZE - OF - KEYBD - MENU ] =
{
 {0 ,0 ,0 ,1 ,0 , ( 3 MainJob1) } ,
 {1 ,7 ,2 ,8 ,0 , ( 3 Dsp Point) } ,   / / 第一層
 {2 ,1 ,3 ,8 ,0 , ( 3 DspCurve) ) ,   / / 第一層
 {3 ,2 ,4 ,36 ,0 , ( 3 Dsp Kout) } ,   / / 第一層
 {4 ,3 ,5 ,50 ,0 , ( 3 DisCloseDown) } ,   / / 第一層

 {5 ,4 ,6 ,8 ,0 , ( 3 ModifyPoint) } ,   / / 第一層
 {6 ,5 ,7 ,52 ,0 , ( 3 SetCloseDown) } ,   / / 第一層
 {7 ,6 ,1 ,0 ,0 , ( 3 Cancel) } ,   / / 第一層
 …
 …
 {52 ,53 ,53 ,0 ,1 , ( 3 OkSetCloseDown1) } ,
 {53 ,52 ,52 ,0 ,1 , ( 3 OkSetCloseDown2) } ,
 {54 ,0 ,0 ,0 ,0 , ( 3 Disable) } ,
} ;
 void Get Keylnput (void)
{
 switch ( status &0xf0)
  {
  case 0xe0 :/ / 回車鍵,找出新的菜單狀態編號
   …
KeyFuncIndex = KeyTab[ KeyFuncIndex ] . KeyCrState ;
   …
   break ;
  case 0xb0 :/ / 向下鍵,找出新的菜單狀態編號
   …
    KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyDn2
State ;
   …
  break ;
case 0xd0 :/ / 向上鍵,找出新的菜單狀態編號
   …
    KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyUp2
State ;
   …
   break ;
  case 0x70 :/ / 回退鍵,找出新的菜單狀態編號
   …
    KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyBack2
State ;
   …
   break ;
  case 0 ;
    ret urn ;   / / 錯誤的處理
    break ;
   }
  KeyFuncPt r = KeyTab[ KeyFuncIndex ] . CurrentOperate ;
  ( 3 KeyFuncPt r) () ;   / / 執行當前按鍵的操作
}
3  結語
本文介紹了C 語言編程的特點,簡單介紹了LCD 作為人機界面的特征,并介紹了一種用C 語言實現的LCD 多級嵌套菜單結構。該結構緊湊、性能穩定可靠,已多次使用在安全監測設備中。
  系統要運行可靠,對其有關設備是否能夠安全運行地檢測也是很重要的一環。因而程序對系統所涉及的設備都進行了全面監測,主要有電動球閥故障、出水口電動閘閥故障、水位傳感器故障、水泵啟停時間、運行電流、電動機溫度、電動機和水泵軸承溫度、出水壓力、高壓柜狀態、高壓柜故障、閥門故障等,并視情況進行事故自動處理或報警要求檢修。本系統中各個機組有3 種運行選擇:自動、半自動和手動。通常情況下按照水位高低和系統時間自動選擇是否開泵,同時觀察水位變化率從而選擇需要開幾臺泵。在半自動方式下,一旦該泵的開泵信號被監測到,系統將自動根據當前情況用射流方式或者真空泵方式來抽真空,當真空度達到要求后啟動電動機, 同時觀測出水口處的壓力, 當其大于5 MPa時打開出水口處的電動閘閥實施正常排水。為了完善系統,防止意外情況的發生,同時為了便于檢修,還保留了手動方式,該方式在正常運行情況下是不使用的。.

(轉)

轉載于:https://www.cnblogs.com/prayer521/p/4431054.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375143.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375143.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

fortran語法筆記

1,數據類型,fortran支持整形,real型,logical型,char型,復數型。整形分為為長整形和短整形定義長整形的方法 同時聲明多個變量的話可以用逗號隔開。 加兩個冒號的話可以直接在聲明的時候賦值。 fortran是唯一…

8086條件轉移指令JNE,JNZ

JNZ/JNE 指令格式 轉移條件 說明 JNZ/JNE 標號 ZF0 不等于0或不相等轉移code segment assume cs:codemov ax,5mov bx,2cmp ax,bx ;兩數比較 不相等則轉移 jne ok iout: mov ax,4c00Hint 21H ok: add ax,bxjmp iout code ends endAX0005 BX0002 CX0013 DX0000 SP00…

8086條件轉移指令JE/JZ,JNE/JNZ

JE/JZ,JNE,JNZ檢測的只是ZF的值,只要ZF滿足則進行轉移 JE的邏輯含義是相等則轉移 但是JE進行操作的是ZF1才執行所有相等則轉移是通過CMP指令來配合使用體現出的CMP AX,BX ;ax-bx 結果是否為0 {true ,ZF1} {false ,ZF0} JE OK (ZF1說明兩數相等) (ZF…

git 使用手冊

git 作為開源項目首選版本管理軟件,必然其優勢不容小覷,下面總結一下初次解除用到的一些技能 1. 基本命令介紹 git help branch 查看branch幫助文檔 git branch -a 列出當前所有分支 git branch good_proj 創建分支good_proj git checkout good_p…

WZY社區

WZY社區是我自己做的一個網站,后面會詳細更新,敬請關注!轉載于:https://www.cnblogs.com/jxldjsn/p/5146682.html

條件轉移指令和無條件轉移指令練習

無條件轉移指令 JMP條件轉移指令 JE JNE JB 低于轉移(小于) JNB 不低于轉移(大于等于) JA 高于轉移(大于) JNA不高于轉移(小于等于)查找出數據中0~9的無符號數寫到itable單元中 0~9 大于等于0 小于等于9 用JNB和JNA最合適不過了 貼代碼~assume cs:code,d…

UISearchBar控件

搜索,無疑可以使用UISearchBar控件! 那就先了解一下UISearchBar控件吧! UISearchBar控件就是要為你完成搜索功能的一個專用控件。它集成了很多你意想不到的功能和特點! 首先,還是來普及一下UISearchBar控件API相關的屬…

BSA基礎數據維護

平臺 BSA基礎數據維護 。扇區五個字段的內容 本來值為0,經過107上計算解析,得出正常的數值。然后106上報(200050),得到回復(200051)。 查看回復數據,是否有錯誤。比如提示104 基站拼…

事務 mysql redis

mysql 事務 start transaction; update ... insert ... create table的不行 rollback;//回滾 commit;//提交 redis 事務 multi incrby age 1 //age1 decrby age 2 //age-2 discard //取消執行 (discard 丟棄) exec //執行 ----------------------- watch keyName1 keyName2 ke…

繼續說invoke偽指令

.data ;數據段 titleS db helloworld,0 messageS db hello,welcome to win32,0.code ;代碼段 start: invoke MessageBox,NULL,offset messageS,offset titleS,MB_OK invoke ExitProcess,NULL end startMASM編譯下邊invoke 會把參數從右向左入棧并調用CALLinvoke MessageBox,NU…

織夢CMS AJAX分頁,可自定義typeid,調取任意內容

第一步&#xff1a; 把下面這段代碼放在html的 head之間 <script language"javascript" type"text/javascript" src"{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script> <script language"javascript"> &…

voa 2015 / 4 / 19

potentially – adv. capable of becoming real, a possibility tackle – v. to deal with a difficult problem; in sports, to bring someone down to the ground gap – n., the space between two people or things; a space from which something is missing轉載于:https…

API函數MessageBox的參數與返回值

Win32匯編函數的參數,參數類型,返回值都是一個dword類型(4字節) 返回值永遠放在EAX中,如超過4個字節則返回一個數據的指針(指向返回值存放的緩沖區地址).data titleS db helloworld,0 messageS db hello,welcome to win32,0.code start:invoke MessageBox,NULL,offset message…

新的征程

2015年4月2日&#xff0c;我來到了我新的東家。 來到這邊之后才發現我還真的是山里的農民來到了大城市。發現自己什么都不懂。而且 和 葉小釵 有一段時間一樣&#xff0c;工作和生活真的是擰到了一起&#xff0c;成了一段亂麻。周六周末一邊在找房租房搬家&#xff0c;但是新同…

Win32高級語法 條件測試語句與分支語句

.if 表達式1 .elseif 表達式2 .else 所以表達式為否 .endf ;if語句結束下面兩段程序分別使用匯編語法與高級語法對程序進行條件測試和分支, 彈出對話框當點擊"是"彈出對話框提示"click YES",點擊"否"彈出對話框提示"click No" 程序的…

Ubuntu 安裝php mcrypt

1 sudo apt-get install php5-mcrypt libmcrypt4 libmcrypt-dev 2 sudo php5enmod mcrypt 3 sudo /etc/init.d/apache2 restart 轉載于:https://www.cnblogs.com/fsong/p/5150415.html

The initialize list of C++ Class

性能問題之外&#xff0c;有些時場合初始化列表是不可或缺的&#xff0c;以下幾種情況時必須使用初始化列表 常量成員&#xff0c;因為常量只能初始化不能賦值&#xff0c;所以必須放在初始化列表里面 Error1(constchar* constmsg) :data(msg) { //data msg; } 引用類型&…

用 W32DASM看IF高級語法

W32DASM一個靜態調試工具 代碼段&#xff1a;.code start:invoke MessageBox,NULL,offset messageS,offset titleS,MB_YESNO.if eax 6invoke MessageBox,NULL,offset msgOk,offset tipS,MB_OK.elseinvoke MessageBox,NULL,offset msgNo,offset tipS,MB_OK.endifinvoke ExitPr…

PE文件

PE是一種可執行文件格式 基地址&#xff1a;當PE文件被Windows裝載器裝入內存后內存中的版本被稱為 模塊。映射文件的起始地址被稱為模塊句柄也成為基地址 相對虛擬地址&#xff1a;相對于PE文件裝入地址的偏移 虛擬地址&#xff1a;實際的內存地址 文件偏移地址&#xff1a;數…

Jquery提交form表單

前臺代碼 1 <% Page Language"C#" AutoEventWireup"true" CodeBehind"Js_submit.aspx.cs" Inherits"Ctrip.Corp.Report.OfflineSite.CorpReportSetting.Js_submit" %>2 3 <html xmlns"http://www.w3.org/1999/xhtml&quo…