找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 25562|回復: 56
收起左側

基于STM32之OLED菜單界面框架搭建

  [復制鏈接]
ID:235201 發(fā)表于 2018-10-3 21:41 | 顯示全部樓層 |閱讀模式
基于STM32驅動OLED屏顯示三級菜單界面框架搭建
個人總結的一些經驗,寫的不好勿噴。
  • 硬件要求
    (1)處理器:STM32F103系列。
    (2)OLED屏,SPI或IIC接口都可以。
    (3)按鍵,用于控制界面的切換。
一個基本的菜單界面最少有有一個主界,所以所有先設計一個主界面。
1.什么是主界面?
/******** 這里說的主界面是本次需要設計的主界面 ********/
主界面是電路上電程序啟動完成后屏幕顯示的第一個界面,就是主界面。
主界面根據(jù)自己的愛好來設計,比如:
IMG_20181001_135438.jpg
界面中的圖形和文字可自己設計,這里我設計的就如上圖所示。
主界面設計好后,那么根據(jù)自己的需求來添加多級界面。
我這里就設計了三級菜單界面。
IMG_20181001_141102.jpg

好,那么對應的界面做好后,就是如何控制界面之間的切換。
  1. /*********************************************
  2. * 創(chuàng)建一個結構體
  3. * 存放界面標志位
  4. */
  5. typedef struct
  6. {
  7.     u8 Interface_Mark;     //界面狀態(tài)
  8.     u8 Task_Mark;          //任務狀態(tài)
  9.     u8 Run_Task;           //開始運行任務
  10. } Mark;
  11. Mark Mark_Sign;//狀態(tài)標志位

  12. /*********************************************
  13. * 創(chuàng)建一個枚舉
  14. * 存放界面變量
  15. */
  16. enum
  17. {
  18.     Main_Interface = 0x10, /****主界面*****/
  19.     Menu_Interface = 0x20, /****菜單界面***/
  20.     Task_Interface = 0x30, /****任務界面***/
  21. };
  22. /*******************************************/
  23. switch(Mark_Sign.Interface_Mark)
  24. {
  25.         //狀態(tài)標志位 主界面
  26.         case Main_Interface:
  27.             Main_Interface_APP();//顯示主界面
  28.     break;

  29.         //狀態(tài)標志位 菜單界面
  30.         case Menu_Interface:
  31.             Menu_Interface_APP();//顯示菜單界面
  32.     break;

  33.         //狀態(tài)標志位 任務界面
  34.         case Task_Interface:
  35.                     Function_Menu_APP();//顯示功能界面
  36.     break;
  37. default:
  38.     break;

復制代碼

上面這段代碼用來判斷是三級中哪一級界面。
里面創(chuàng)建了一個結構體,通過改變結構體里面的一個標志位來控制三級界面之間的切換。

那么就要用到按鍵來改變標志位的值,這里我采用了外部中斷來控制。


  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/*************左搖桿按鍵*****菜單 確認按鍵**********************/
  2.     if(DISABLE == KEY_Rocker_Left)
  3.     {
  4.         //當按下菜單鍵時,判斷當前界面
  5.         /************判斷當前界面為主界面***********************/
  6.         if(Main_Interface == Mark_Sign.Interface_Mark)
  7.         {
  8.             /**************進入菜單界面*************/
  9.             Mark_Sign.Interface_Mark = Menu_Interface;
  10.         }
  11.         /************判斷當前界面為菜單界面*******************/
  12.         else if(Menu_Interface == Mark_Sign.Interface_Mark)
  13.         {
  14.             /***************進入任務界面************/
  15.             Mark_Sign.Interface_Mark = Task_Interface;

  16.             /**************進入指定的功能任務*******/
  17.             switch(Mark_Sign.Task_Mark)
  18.             {
  19.             /**************開始運行2.4G任務*******/
  20.             case NRF24L01_Task:
  21.                 Mark_Sign.Run_Task = NRF24L01_Task;
  22.                 break;
  23.             /**************開始運行藍牙任務*******/
  24.             case Bluetooth_Task:
  25.                 Mark_Sign.Run_Task = Bluetooth_Task;
  26.                 break;
  27.             /**************開始運行WIFI任務*******/
  28.             case WIFI_Task:
  29.                 Mark_Sign.Run_Task = WIFI_Task;
  30.                 break;
  31.             /**************開始運行USB任務*******/
  32.             case USB_Task:
  33.                 Mark_Sign.Run_Task = USB_Task;
  34.                 break;
  35.             /**************開始運行設置任務*******/
  36.             case Set_Task:
  37.                 Mark_Sign.Run_Task = Set_Task;
  38.                 break;
  39.             default:
  40.                 break;
  41.             }
  42.         }
  43.         /************判斷當前界面為任務界面******************/
  44.         else if(Task_Interface == Mark_Sign.Interface_Mark)
  45.         {
  46.             /*******判斷當前正在運行的任務*******/
  47.             switch(Mark_Sign.Run_Task)
  48.             {
  49.             /*當前正在運行 2.4G任務*/
  50.             case NRF24L01_Task:

  51.                 break;
  52.             /*當前正在運行 2.4G任務*/
  53.             case Bluetooth_Task:

  54.                 break;
  55.             /*當前正在運行 2.4G任務*/
  56.             case WIFI_Task:

  57.                 break;
  58.             /*當前正在運行 2.4G任務*/
  59.             case USB_Task:

  60.                 break;
  61.             /*當前正在運行 2.4G任務*/
  62.             case Set_Task:
  63.             
  64.                 break;
  65.             default:
  66.                 break;
  67.             }
  68.         }
  69.     }
  70. </font></font></font>
復制代碼

上面這段代功能


  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/*
  2. * 1,檢測當前按下的按鍵為確認鍵
  3. * 2,檢測當前的界面
  4. *                (1)如果是主界面,則進入菜單界面
  5. *                (2)如果是菜單界面,則進入任務界面
  6. *                (3)如果是任務界面,則開執(zhí)行被選中的任務
  7. */
  8. </font></font></font>
復制代碼

那么可以從主界面進入,那怎么退出呢?
同樣這里采用外部中斷來控制


  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/****************右搖桿按鍵****返回按鍵*************************/
  2.     if(DISABLE == KEY_Rocker_Right)
  3.     {
  4.         //當按下返回鍵時,判斷當前界面
  5.         /************判斷當前界面為菜單界面*******************/
  6.         if(Menu_Interface == Mark_Sign.Interface_Mark)
  7.         {
  8.             /*******退出菜單界面***進入主界面**/
  9.             Mark_Sign.Interface_Mark = Main_Interface;
  10.         }
  11.         /************判斷當前界面為任務界面******************/
  12.         else if(Task_Interface == Mark_Sign.Interface_Mark)
  13.         {
  14.             /***退出正在運行的任務***/
  15.             Mark_Sign.Run_Task = Stop;
  16.             /*******退出任務界面*****/
  17.             Mark_Sign.Interface_Mark = Menu_Interface;
  18.         }

  19. </font></font></font>
復制代碼

上面這段代碼的功能

  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/*
  2. * 1,檢測當前按下的按鍵為返回鍵
  3. * 2,檢測當前的界面
  4. *             (1)如果是任務界面,則停止正在運行的任務,返回到菜單界面
  5. *             (2)如果是菜單界面,則返回到主界面
  6. */</font></font></font>
復制代碼
1.png


通過確認按鍵控制從主界面到菜單界面到任務界面的切換。
通過返回按鍵控制從任務界面到菜單界面到主界面的切換。

以上就是菜單界面的內容,不管你是小白還是正在學習STM32的你,根據(jù)這套框架你一樣可以寫出霸氣的菜單界面,如果你們還有更好的寫法,歡迎一起討論。





IMG_20181001_141038.jpg

STM32_OLED_三級菜單框架.rar

397.21 KB, 下載次數(shù): 799, 下載積分: 黑幣 -5

評分

參與人數(shù) 3黑幣 +121 收起 理由
6789364 + 6 很給力!
admin + 100 共享資料的黑幣獎勵!
楊雪飛 + 15 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:406408 發(fā)表于 2018-10-11 15:58 來自手機 | 顯示全部樓層
學習了
回復

使用道具 舉報

ID:415785 發(fā)表于 2018-11-2 16:03 | 顯示全部樓層
學習了,不錯!
回復

使用道具 舉報

ID:129988 發(fā)表于 2018-11-12 00:28 | 顯示全部樓層
最近正在學習OLED,感謝樓主的分享
回復

使用道具 舉報

ID:29256 發(fā)表于 2018-11-12 15:51 | 顯示全部樓層
多謝分享
回復

使用道具 舉報

ID:220020 發(fā)表于 2018-11-23 17:08 | 顯示全部樓層
多謝共享
回復

使用道具 舉報

ID:157393 發(fā)表于 2018-11-24 16:19 | 顯示全部樓層

最近正在學習OLED
回復

使用道具 舉報

ID:96310 發(fā)表于 2018-12-17 16:35 | 顯示全部樓層
感謝樓主 分享,學習一下
回復

使用道具 舉報

ID:128321 發(fā)表于 2018-12-17 17:44 | 顯示全部樓層
最近正在學習OLED
回復

使用道具 舉報

ID:278145 發(fā)表于 2018-12-19 22:47 | 顯示全部樓層
不錯,值得學習
回復

使用道具 舉報

ID:137086 發(fā)表于 2019-2-12 21:18 | 顯示全部樓層
仔細 學習 一下  最近在學習怎么 寫一個 菜單 的程序
回復

使用道具 舉報

ID:461296 發(fā)表于 2019-2-23 13:52 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:385466 發(fā)表于 2019-4-11 16:31 | 顯示全部樓層
666,學習一下
回復

使用道具 舉報

ID:385466 發(fā)表于 2019-4-12 11:57 | 顯示全部樓層
怎么判斷按下的是哪一個按鍵,DISABLE跳轉到了stm32f10x.h了,有點看不懂,請教一下。
回復

使用道具 舉報

ID:516199 發(fā)表于 2019-5-23 22:23 | 顯示全部樓層
謝謝分享,
回復

使用道具 舉報

ID:567848 發(fā)表于 2019-6-20 13:44 | 顯示全部樓層
剛好需要,學習一下
回復

使用道具 舉報

ID:567848 發(fā)表于 2019-6-20 13:46 | 顯示全部樓層
學習一下,剛好需要
回復

使用道具 舉報

ID:499409 發(fā)表于 2019-7-2 12:03 | 顯示全部樓層
能發(fā)一下代碼嗎1813298696@qqcom
回復

使用道具 舉報

ID:55591 發(fā)表于 2019-7-12 06:37 | 顯示全部樓層
看著非常不錯
回復

使用道具 舉報

ID:570493 發(fā)表于 2019-7-15 16:59 | 顯示全部樓層
怎么我用IIC模式沒顯示,是不是我哪沒配置好?
回復

使用道具 舉報

ID:521623 發(fā)表于 2019-7-19 17:13 | 顯示全部樓層
額,那個mini版燒進去程序屏就黑了,咋啥都沒有,是不是燒了 啊
回復

使用道具 舉報

ID:432611 發(fā)表于 2019-7-19 22:04 | 顯示全部樓層
great,學習
回復

使用道具 舉報

ID:64765 發(fā)表于 2019-7-24 13:30 | 顯示全部樓層
頗有收獲,謝了。
回復

使用道具 舉報

ID:586039 發(fā)表于 2019-7-28 11:53 | 顯示全部樓層
請問是要外接搖桿按鍵嗎,具體要怎么做呢
回復

使用道具 舉報

ID:270932 發(fā)表于 2019-7-28 15:47 | 顯示全部樓層
正好學習OLED,謝謝樓主資料分享
回復

使用道具 舉報

ID:600035 發(fā)表于 2019-8-14 12:26 來自手機 | 顯示全部樓層
學習學習
回復

使用道具 舉報

ID:602925 發(fā)表于 2019-8-29 12:51 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:302850 發(fā)表于 2019-8-30 06:42 來自手機 | 顯示全部樓層
先收藏,感覺肯定會有一天能用上!
回復

使用道具 舉報

ID:606788 發(fā)表于 2019-9-4 18:04 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:547459 發(fā)表于 2019-9-4 21:12 | 顯示全部樓層
學習了
回復

使用道具 舉報

ID:610440 發(fā)表于 2019-9-11 14:50 | 顯示全部樓層
你好,我最近有一個項目,需要用到stm32 oled屏顯示菜單界面的框架,但是不理解框架架構關系,方便加我Q溝通探討下嗎?
回復

使用道具 舉報

ID:606788 發(fā)表于 2019-9-28 20:01 | 顯示全部樓層
最近正在學習OLED,感謝樓主的分享&#128076;
回復

使用道具 舉報

ID:207341 發(fā)表于 2019-10-7 15:38 | 顯示全部樓層
我記得下載了
回復

使用道具 舉報

ID:58110 發(fā)表于 2019-10-8 08:42 | 顯示全部樓層
很棒!謝謝分享!
回復

使用道具 舉報

ID:607710 發(fā)表于 2019-10-9 11:09 | 顯示全部樓層
這就是算法嗎?希望多一些這樣的教程
回復

使用道具 舉報

ID:606788 發(fā)表于 2019-10-10 20:50 | 顯示全部樓層
厲害了  學習下怎么寫的
回復

使用道具 舉報

ID:581602 發(fā)表于 2019-12-14 22:50 | 顯示全部樓層
學習一下,感謝樓主分享。
回復

使用道具 舉報

ID:269639 發(fā)表于 2019-12-15 22:01 | 顯示全部樓層
真的非常好啊,感謝樓主
回復

使用道具 舉報

ID:544005 發(fā)表于 2020-1-13 10:52 | 顯示全部樓層
學習了謝謝!!!
回復

使用道具 舉報

ID:408363 發(fā)表于 2020-2-6 20:44 | 顯示全部樓層
請問2.8寸彩屏能使用嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表