微控制器c語言下lcd多級選單的一種實現方法

2021-05-23 23:20:18 字數 2745 閱讀 2099

圖形點陣式液晶可顯示使用者自定義的任意符號

和圖形,並可捲動顯示。它作為微控制器系統人機交

互介面的重要組成部分被廣泛應用於實時檢測和顯

示的儀器儀表中,例如手機上的顯示屏就是圖形點

陣液晶。

採用圖形點陣式液晶顯示較之其它顯示方式主

要有以下優點:

(1) 工作電壓低、功耗極低。工作電壓僅為3~

5 v ,工作電流≤10 μa/ cm2 ,特別適用於低功耗的

儀器儀表中。

(2) 液晶顯示屬被動顯示,受外界光線干擾小。

(3) 圖形點陣式液晶可顯示的資訊量大、分辨

率高。(4) 不產生電磁干擾。

(5) 可*性高,使用壽命長。

本文所介紹的lcd 採用128 ×64 點陣的液晶

屏,因此可顯示16 ×16 點陣的漢字4 行8 列。選單

為多級巢狀形式,最長的有13 層,主要完成對某個

測點各方面的設定或查詢,可通過「向上」、「向下」、

「回退」、「確認」4 個鍵或遙控器來實現對選單的選

擇。具體功能:

「向上」鍵:在本層選單的專案中向上移動進行

選擇;「向下」鍵:在本層選單的專案中向下移動進行

選擇;「回退」鍵:取消本層的選單設定,返回上層菜

單;「確認」鍵:確認本層的選單設定,進入下級菜

單。可根據使用者在選單中的選擇項對測點進行某些

設定,或者進行某些特殊的顯示,例如對某個測點的

實時曲線顯示等。

程式設計

根據需求,首先建立乙個結構,並定義乙個結構

變數kbdtabst ruct 。結構變數就是把多個不同類

型的變數結合在一起形成的乙個組合型變數,構成

乙個結構的各個變數稱為結構元素。該結構中共有

6 個結構元素,分別是5 個字元型和1 個指標變數,

5 個字元型變數分別為當前及各個按鍵的索引號,

也就是*作的狀態號,最後1 個指標變數指向需執

行函式。這樣就可以做乙個結構陣列,在結構陣列

裡為每乙個選單項編制乙個單獨的函式,並根據菜

單的巢狀順序排好本選單項的索引號,以及本級菜

單項的上、下卷動的索引號和上、下級選單的索引號。

具體程式如下所述:

typedef st ruct

kbdtabst ruct ;

# define size - of keybd - menu 55   / / 選單總長度

kbdtabst ruct code keytab[ size - of - keybd - menu ] =

, ,   / / 第一層

,   / / 第一層

,   / / 第一層

程式設計

根據需求,首先建立乙個結構,並定義乙個結構

變數kbdtabst ruct 。結構變數就是把多個不同類

型的變數結合在一起形成的乙個組合型變數,構成

乙個結構的各個變數稱為結構元素。該結構中共有

6 個結構元素,分別是5 個字元型和1 個指標變數,

5 個字元型變數分別為當前及各個按鍵的索引號,

也就是*作的狀態號,最後1 個指標變數指向需執

行函式。這樣就可以做乙個結構陣列,在結構陣列

裡為每乙個選單項編制乙個單獨的函式,並根據菜

單的巢狀順序排好本選單項的索引號,以及本級菜

單項的上、下卷動的索引號和上、下級選單的索引號。

具體程式如下所述:

typedef st ruct

kbdtabst ruct ;

# define size - of keybd - menu 55   / / 選單總長度

kbdtabst ruct code keytab[ size - of - keybd - menu ] =

, ,   / / 第一層

,   / / 第一層

,   / / 第一層

下面是乙個具體的例子:

unsigned char tempin,tempout,temprun;

unsigned char key_value();

unsigned char change_value(unsigned char);

void delay_1(unsigned int m);

void run_satus();

char * mainmenutitle = "主選單";

const char * mainmenuitems = ;

tmenu mainmenu;

void onselectmainmenu(int index)

clearscreen();

}uint onmainmenuok(void * arg)

uint onmainmenucancel(void * arg)

return 0;

}uint onmainmenuotherkey(void * arg)

return 0;

}void initmenu()

unsigned char key_value()

}unsigned char change_value(unsigned char temp2)

if(key_value()==1)return(te***);

else if(key_value()==0) return(temp2);

}void delay_1(unsigned int m)

void run_satus()

void tmain()}

C51微控制器 LCD1602

1.在最前面定義好rs,rw,en 2.寫乙個判斷忙程式 void read busy while busy 0x80 3.寫命令程式 void write cmd uchar cmd 4.寫資料程式 void write dat uchar dat 5.主函式 void main 整體例程 lcd...

微控制器C語言程式設計

一 首先我們先了解一下51微控制器的標頭檔案 include 為了能看懂reg51.h標頭檔案,下面需了解keil c51編譯器擴充套件的關鍵字 關鍵字用途 說明bit 位標量宣告 宣告乙個位標量或位型別 sbit 位變數宣告 宣告乙個可位定址變數 sfr特殊功能暫存器宣告 宣告乙個特殊功能暫存器 ...

51微控制器C語言

使用c語言已成為微控制器應用系統開發的趨勢。include 包含微控制器暫存器的標頭檔案這個檔案對微控制器內部各種暫存器進行了定義。如果將 sfr p0 0x80 語句中的 p0 改為其他名字,如 q0 那麼在程式設計時,使用第一行的 檔案包含 處理命令後,微控制器以後就不再認識 p0 而是只認識 ...