国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

STM32簡(jiǎn)易多級(jí)菜單(數(shù)組查表法)

2022-05-06 00:55 作者:碼農(nóng)愛(ài)學(xué)習(xí)-B站  | 我要投稿

單片機(jī)開(kāi)發(fā)中,有時(shí)會(huì)用到屏幕來(lái)顯示內(nèi)容,當(dāng)需要逐級(jí)顯示內(nèi)容時(shí),就需要使用多級(jí)菜單的形式了。

1 多級(jí)菜單

多級(jí)菜單的實(shí)現(xiàn),大體分為兩種設(shè)計(jì)思路:

  • 通過(guò)雙向鏈表實(shí)現(xiàn)

  • 通過(guò)數(shù)組查表實(shí)現(xiàn)

總體思路都是把菜單的各個(gè)界面聯(lián)系起來(lái),可以從上級(jí)菜單跳到下級(jí)菜單,也可從下級(jí)菜單返回上級(jí)菜單。

數(shù)組查表的方式比較簡(jiǎn)單,易于理解,本篇就來(lái)使用數(shù)組查表發(fā)在STM32上實(shí)現(xiàn)多級(jí)菜單的顯示。

2 代碼實(shí)現(xiàn)

2.1 數(shù)組查表

首先需要定義一個(gè)結(jié)構(gòu)體

  • current:當(dāng)前頁(yè)面的索引號(hào)

  • up:按下“向上翻“按鈕后要跳轉(zhuǎn)到的頁(yè)面索引號(hào)

  • down:按下“向下翻“按鈕后要跳轉(zhuǎn)到的頁(yè)面索引號(hào)

  • enter:按下“確認(rèn)“按鈕后要跳轉(zhuǎn)到的頁(yè)面索引號(hào)

  • current_operation:當(dāng)前頁(yè)面的索引號(hào)要執(zhí)行的顯示函數(shù),這是一個(gè)函數(shù)指針

注意:對(duì)于菜單顯示的操作,用到了3個(gè)按鍵,分別是向下、向下和確認(rèn),如果單片機(jī)上的IO資源較為緊張,還可以把“向上翻”按鈕省去,只通過(guò)“向下翻”按鈕來(lái)實(shí)現(xiàn)循環(huán)訪(fǎng)問(wèn),對(duì)應(yīng)的結(jié)構(gòu)體也可以去掉該成員。

然后定義一個(gè)表,用來(lái)定義各個(gè)頁(yè)面間如何跳轉(zhuǎn)

這里解釋一下該表是如何工作的:

  • 此表,表示了4級(jí)菜單的顯示關(guān)系(注意第0層其實(shí)只是一個(gè)歡迎界面)

  • 第一層菜單,只有4個(gè)選項(xiàng),因此這里只列了4行(注意最后一個(gè)選項(xiàng)用作返回上一級(jí),無(wú)實(shí)際內(nèi)容含義)

  • 第二層菜單,就是對(duì)第一層菜單中的3個(gè)實(shí)際的選項(xiàng)進(jìn)行進(jìn)一步的介紹,每種介紹又有4個(gè)子項(xiàng)(注意最后一個(gè)選項(xiàng)也是用作返回上一級(jí),無(wú)實(shí)際內(nèi)容含義),因此,這里的第二層菜單列了3x4=12行

  • 第三層菜單,又是對(duì)第二層菜單中的子項(xiàng)進(jìn)行進(jìn)一步的介紹(3個(gè)分類(lèi),每類(lèi)有3個(gè)子項(xiàng)),所以第三層菜單列了9行

  • 注意數(shù)組中每一行的第1個(gè)數(shù)組,是索引號(hào),先列舉一個(gè)實(shí)際的例子進(jìn)行分析:

上圖就是一個(gè)實(shí)際的4級(jí)菜單要顯示的內(nèi)容,每個(gè)條目前,標(biāo)記了索引號(hào)(0~25),即對(duì)應(yīng)數(shù)組在定義的索引號(hào)。

比如數(shù)組關(guān)于第0層和第1層的定義:

  • 先看第一行:索引是0,顯示歡迎界面;后面的兩個(gè)0表示此時(shí)按“上翻”和“下翻”無(wú)效,繼續(xù)顯示歡迎界面;再后面的1表示按下“確認(rèn)”按鈕后,跳轉(zhuǎn)到索引1處(即顯示第1級(jí)目錄,且指向第1級(jí)的第1個(gè)子項(xiàng));最后是此索引要顯示的具體內(nèi)容,fun_0就是控制屏幕顯示歡迎界面

  • 再看第二行:索引是1,顯示第1級(jí)目錄,且指向第1級(jí)的第1個(gè)子項(xiàng)(天氣);后面的4表示此時(shí)按“上翻”跳轉(zhuǎn)到索引4,即顯示第1級(jí)目錄,且指向第1級(jí)的第4個(gè)子項(xiàng)(Return);再后面的2表示此時(shí)按“下翻”跳轉(zhuǎn)到索引2,即顯示第1級(jí)目錄,且指向第1級(jí)的第2個(gè)子項(xiàng)(音樂(lè));再后面的5表示按下“確認(rèn)”按鈕后,跳轉(zhuǎn)到索引5處(即顯示第2級(jí)目錄,且指向第2級(jí)的第1個(gè)子項(xiàng)-杭州);最后是此索引要顯示的具體內(nèi)容,fun_a1就是控制屏幕顯示第1級(jí)目錄,且指向第1級(jí)的第1個(gè)子項(xiàng)(天氣)

  • 其它行的含義與之類(lèi)似

通過(guò)分析,不難發(fā)現(xiàn),這些數(shù)組在空間上的關(guān)系:


對(duì)于菜單的最底層,因?yàn)闆](méi)有上翻和下翻的功能需求,因此每行的前3個(gè)數(shù)字都是當(dāng)前的索引號(hào):

2.2 具體的顯示函數(shù)

對(duì)于函數(shù)要顯示的具體內(nèi)容,根據(jù)自己的實(shí)現(xiàn)需要顯示即可。

這里我使用的是OLED屏幕,借助U8g2圖形庫(kù)進(jìn)行內(nèi)容顯示,以下是部分顯示示例:

2.3 按鍵切換頁(yè)面

頁(yè)面的切換,這里里簡(jiǎn)單的按鈕輪詢(xún)?yōu)槔热?span id="2s04ssssssss" class="md-pair-s " style="">初始顯示歡迎界面的狀態(tài)下,按下不同按鍵后,通過(guò)數(shù)組查表,確定要跳轉(zhuǎn)到的索引號(hào),然后根據(jù)索引號(hào),通過(guò)函數(shù)指針執(zhí)行索引號(hào)對(duì)應(yīng)的顯示函數(shù),即實(shí)現(xiàn)了一次頁(yè)面切換。

然后,就是在新的頁(yè)面狀態(tài),收到下一個(gè)按鈕指令,再切換到下一個(gè)顯示狀態(tài)。

3 演示

測(cè)試效果如下:


本篇介紹了一種簡(jiǎn)易的多級(jí)菜單的顯示方法,本質(zhì)是通過(guò)數(shù)組查表,實(shí)現(xiàn)各級(jí)菜單的各個(gè)頁(yè)面(狀態(tài))的切換(跳轉(zhuǎn)),并在STM32上編程實(shí)現(xiàn),通過(guò)OLED屏幕,以及借助U8g2圖形庫(kù),測(cè)試了多級(jí)菜單的顯示功能。



STM32簡(jiǎn)易多級(jí)菜單(數(shù)組查表法)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
井研县| 盐源县| 临江市| 丽水市| 垦利县| 丹棱县| 衡东县| 武义县| 澄江县| 信阳市| 宿迁市| 无极县| 马龙县| 新密市| 尚志市| 裕民县| 乌鲁木齐市| 明星| 江安县| 寻乌县| 镇沅| 鲁甸县| 塔河县| 永胜县| 聂拉木县| 西峡县| 高碑店市| 大悟县| 长阳| 启东市| 保靖县| 合水县| 长子县| 潜江市| 长武县| 安平县| 应城市| 罗平县| 团风县| 宁海县| 周宁县|