前言
只要有顯示屏的地方,就要用到多級選單的顯示,在很多初學者眼里,多級選單的顯示是很難的,今天我做完了這個小專案,我就來分享一下我做的經歷,OELD采用中景園0.78寸解析度128*80,
首先肯定的是,只要理清思路,就不怕多級選單顯示很難,先上幾張照片看看我的顯示,

一級選單

二級選單

三級選單

四級選單
- 硬體設備:STM32F103C8T6+0.78寸OLED IIC連接方式 兩個獨立按鍵

- 原理圖與PCB圖紙:https://gitee.com/zhu_yu_yang/stm32_-oled_-board_-v2.1
程式實作
我學的多級選單顯示是多個界面的跳轉,這個比較適合初學者,我的硬體上有兩個按鍵,一個主要用來切換選項,另一個用來確定選項,所以我們暫時叫他next鍵和enter鍵,先定義一個結構體,結構體里面有四個變數,分別代表當前索引號,next鍵,enter鍵和當前執行函式,我這里只有兩個按鍵,所以這樣定義了,假如你有三個按鍵,你就把另一個按鍵當做向上動作,假如你有四個按鍵,另外兩個按鍵分別代表 向上和回傳,這樣你就有向上,向下,回傳和確定四個功能鍵,那你的結構體定義的時候就要增加成員變數了,這里以兩個按鍵為例,分別代表向下動作和確定動作,結構體如下:
typedef struct
{
uint8_t current;//當前狀態索引號
uint8_t next; //向下一個
uint8_t enter; //確定
void (*current_operation)(void); //當前狀態應該執行的操作
} Menu_table;
這里是核心思想,就是按鍵按下決定當前的索引號,繼續定義一個陣列:
Menu_table table[13]=
{
{0,0,1,(*fun0)},//一級界面 時鐘界面
{1,2,6,(*fun1)},//二級界面第一行 CAN Mode
{2,3,7,(*fun2)},//二級界面第二行 485 Mode
{3,4,8,(*fun3)},//二級界面第三行 UART Mode
{4,2,0,(*fun4)},//二級界面第四行 BACK
{5,6,4,(*fun5)},//三級界面第一行 back{6,7,x,(*fun6)},//三級界面第二行 //x,y,z代表四級界面的索引號,在這篇文章里沒有詳細列出,
{7,8,y,(*fun7)},//三級界面第三行
{8,5,z,(*fun8)},//三級界面第四行
};uint8_t func_index = 0;//主程式此時所在界面的索引值
這里解釋一下這個陣列中 {0,0,1,(*fun0)},//一級界面 時鐘界面 ,由于我們在前面先定義了Menu_table結構體,結構體成員變數分別為當前索引號,next,enter和void (*current_operation)(void),第一的0代表當前的索引號,第二個0代表next這個按鍵按下回傳的索引號,第三個1代表enter按鍵按下回傳的索引號,第三個(*fun0)代表索引號為0要執行的函式,一一對應,再結合按鍵按下的畫面就比較有邏輯了,
再來就是按鍵按下需要處理的函式
void Menu_key_set(void)
{
Get_key_next = get_button(button1);
Get_key_enter = get_button(button2);
if(Get_key_next == 1)
{
func_index=table[func_index].next;//按鍵next按下后的索引號
OLED_Clear();
}
if(Get_key_enter == 1)
{
func_index=table[func_index].enter;
OLED_Clear();
}current_operation_index=table[func_index].current_operation;//執行當前索引號所對應的功能函式,
(*current_operation_index)();//執行當前操作函式
}
這里解釋一下,比如在二級選單中,分別為 :
1.CAN Mode
2.485 Mode
3.UART mode
4.BACK
那么,在一級選單跳到二級選單的時候,游標應該在1.CAN Mode 這里,而此時假設按鍵next按下就要執行游標移動到2.485 Mode 上,假設按鍵enter按下就要跳轉到三級選單中的第一行,所以,next按鍵按下就要回傳2.485 Mode前面的索引號,程式在根據索引號執行相應的游標移到程式,造成游標在第一行移動到第二行的現象,游標在4.BACK上 按下next 就跳轉到1.CAN Mode,只要令此時next鍵按下回傳的索引號是CAN Mode的索引號就行,再索引號所對應的函式里執行游標移到的函式就行,多個按鍵也是這樣的原理,
以上是我對多級選單的理解,其中還有很多是一知半解,如果有誤,歡迎指正,
我自己畫的PCB 原理圖與PCB圖紙:https://gitee.com/zhu_yu_yang/stm32_-oled_-board_-v2.1
另外參考了:https://blog.csdn.net/calmuse/article/details/79346742
如果轉載,請標明出處,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267119.html
標籤:其他
上一篇:嵌入式STM32—第三天按鍵中斷key實作控制led燈
下一篇:DTU和RTU的區別
