久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 25538|回復(fù): 56
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
基于STM32驅(qū)動(dòng)OLED屏顯示三級(jí)菜單界面框架搭建
個(gè)人總結(jié)的一些經(jīng)驗(yàn),寫的不好勿噴。
  • 硬件要求
    (1)處理器:STM32F103系列。
    (2)OLED屏,SPI或IIC接口都可以。
    (3)按鍵,用于控制界面的切換。
一個(gè)基本的菜單界面最少有有一個(gè)主界,所以所有先設(shè)計(jì)一個(gè)主界面。
1.什么是主界面?
/******** 這里說(shuō)的主界面是本次需要設(shè)計(jì)的主界面 ********/
主界面是電路上電程序啟動(dòng)完成后屏幕顯示的第一個(gè)界面,就是主界面。
主界面根據(jù)自己的愛好來(lái)設(shè)計(jì),比如:

界面中的圖形和文字可自己設(shè)計(jì),這里我設(shè)計(jì)的就如上圖所示。
主界面設(shè)計(jì)好后,那么根據(jù)自己的需求來(lái)添加多級(jí)界面。
我這里就設(shè)計(jì)了三級(jí)菜單界面。


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

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

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

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

復(fù)制代碼

上面這段代碼用來(lái)判斷是三級(jí)中哪一級(jí)界面。
里面創(chuàng)建了一個(gè)結(jié)構(gòu)體,通過(guò)改變結(jié)構(gòu)體里面的一個(gè)標(biāo)志位來(lái)控制三級(jí)界面之間的切換。

那么就要用到按鍵來(lái)改變標(biāo)志位的值,這里我采用了外部中斷來(lái)控制。


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

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

  51.                 break;
  52.             /*當(dāng)前正在運(yùn)行 2.4G任務(wù)*/
  53.             case Bluetooth_Task:

  54.                 break;
  55.             /*當(dāng)前正在運(yùn)行 2.4G任務(wù)*/
  56.             case WIFI_Task:

  57.                 break;
  58.             /*當(dāng)前正在運(yùn)行 2.4G任務(wù)*/
  59.             case USB_Task:

  60.                 break;
  61.             /*當(dāng)前正在運(yùn)行 2.4G任務(wù)*/
  62.             case Set_Task:
  63.             
  64.                 break;
  65.             default:
  66.                 break;
  67.             }
  68.         }
  69.     }
  70. </font></font></font>
復(fù)制代碼

上面這段代功能


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

那么可以從主界面進(jìn)入,那怎么退出呢?
同樣這里采用外部中斷來(lái)控制


  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.         //當(dāng)按下返回鍵時(shí),判斷當(dāng)前界面
  5.         /************判斷當(dāng)前界面為菜單界面*******************/
  6.         if(Menu_Interface == Mark_Sign.Interface_Mark)
  7.         {
  8.             /*******退出菜單界面***進(jìn)入主界面**/
  9.             Mark_Sign.Interface_Mark = Main_Interface;
  10.         }
  11.         /************判斷當(dāng)前界面為任務(wù)界面******************/
  12.         else if(Task_Interface == Mark_Sign.Interface_Mark)
  13.         {
  14.             /***退出正在運(yùn)行的任務(wù)***/
  15.             Mark_Sign.Run_Task = Stop;
  16.             /*******退出任務(wù)界面*****/
  17.             Mark_Sign.Interface_Mark = Menu_Interface;
  18.         }

  19. </font></font></font>
復(fù)制代碼

上面這段代碼的功能

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



通過(guò)確認(rèn)按鍵控制從主界面到菜單界面到任務(wù)界面的切換。
通過(guò)返回按鍵控制從任務(wù)界面到菜單界面到主界面的切換。

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





IMG_20181001_141038.jpg (2.12 MB, 下載次數(shù): 186)

IMG_20181001_141038.jpg

STM32_OLED_三級(jí)菜單框架.rar

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

評(píng)分

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

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏43 分享淘帖 頂6 踩
回復(fù)

使用道具 舉報(bào)

56#
ID:584195 發(fā)表于 2023-3-24 13:21 | 只看該作者
多謝分享,下載下來(lái)學(xué)習(xí)一下。
回復(fù)

使用道具 舉報(bào)

55#
ID:368227 發(fā)表于 2021-4-6 11:06 | 只看該作者
資料不錯(cuò),DIY小玩意正好用得上
回復(fù)

使用道具 舉報(bào)

54#
ID:877801 發(fā)表于 2021-1-18 17:57 | 只看該作者
看上去挺好的,完整工程,程序段全!
回復(fù)

使用道具 舉報(bào)

53#
ID:695428 發(fā)表于 2020-5-12 19:40 | 只看該作者
感謝樓主的分享,很實(shí)用
回復(fù)

使用道具 舉報(bào)

52#
ID:248659 發(fā)表于 2020-4-19 11:37 | 只看該作者
問(wèn)個(gè)問(wèn)題,代碼里面的#define Page(ARE) (ARE/2+1)這個(gè)是干啥的呢,跳轉(zhuǎn)過(guò)去找不到相關(guān)的
回復(fù)

使用道具 舉報(bào)

51#
ID:333080 發(fā)表于 2020-4-14 09:14 | 只看該作者
不錯(cuò)的貼子
回復(fù)

使用道具 舉報(bào)

50#
ID:707578 發(fā)表于 2020-4-1 11:34 | 只看該作者
下載之后怎么編譯?
回復(fù)

使用道具 舉報(bào)

49#
ID:706151 發(fā)表于 2020-3-25 15:48 | 只看該作者
樓主的范例不錯(cuò)。學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

48#
ID:388929 發(fā)表于 2020-3-24 10:40 | 只看該作者
雖然我暫不需要,但看了下回復(fù),好多人說(shuō)解說(shuō)的很好,所以先留個(gè)言作個(gè)MARK,日后有需要再來(lái)學(xué)習(xí)學(xué)習(xí),感謝樓主分享
回復(fù)

使用道具 舉報(bào)

47#
ID:248659 發(fā)表于 2020-3-23 23:39 | 只看該作者
在讀完代碼以后專程回來(lái)回復(fù)!不錯(cuò)的資源,有很多值得學(xué)習(xí)的地方!!
回復(fù)

使用道具 舉報(bào)

46#
ID:71535 發(fā)表于 2020-3-15 21:37 | 只看該作者
學(xué)習(xí)12864,感謝樓主的分享,希望能學(xué)會(huì)
回復(fù)

使用道具 舉報(bào)

45#
ID:706151 發(fā)表于 2020-3-15 14:44 | 只看該作者
日常學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

44#
ID:139301 發(fā)表于 2020-3-14 11:07 | 只看該作者
學(xué)習(xí)了,我也試試
回復(fù)

使用道具 舉報(bào)

43#
ID:69829 發(fā)表于 2020-3-13 13:08 | 只看該作者
這個(gè)資料相當(dāng)給力,多謝分享!
回復(fù)

使用道具 舉報(bào)

42#
ID:707578 發(fā)表于 2020-3-13 12:14 | 只看該作者
能給我發(fā)下代碼嗎?1342732985@qq.com
回復(fù)

使用道具 舉報(bào)

41#
ID:707578 發(fā)表于 2020-3-13 12:13 | 只看該作者
有代碼嗎?
回復(fù)

使用道具 舉報(bào)

40#
ID:375003 發(fā)表于 2020-2-8 22:36 | 只看該作者
這個(gè)三級(jí)菜單寫的好,說(shuō)明很詳細(xì).值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

39#
ID:408363 發(fā)表于 2020-2-6 20:44 | 只看該作者
請(qǐng)問(wèn)2.8寸彩屏能使用嗎
回復(fù)

使用道具 舉報(bào)

38#
ID:544005 發(fā)表于 2020-1-13 10:52 | 只看該作者
學(xué)習(xí)了謝謝!!!
回復(fù)

使用道具 舉報(bào)

37#
ID:269639 發(fā)表于 2019-12-15 22:01 | 只看該作者
真的非常好啊,感謝樓主
回復(fù)

使用道具 舉報(bào)

36#
ID:581602 發(fā)表于 2019-12-14 22:50 | 只看該作者
學(xué)習(xí)一下,感謝樓主分享。
回復(fù)

使用道具 舉報(bào)

35#
ID:606788 發(fā)表于 2019-10-10 20:50 | 只看該作者
厲害了  學(xué)習(xí)下怎么寫的
回復(fù)

使用道具 舉報(bào)

34#
ID:607710 發(fā)表于 2019-10-9 11:09 | 只看該作者
這就是算法嗎?希望多一些這樣的教程
回復(fù)

使用道具 舉報(bào)

33#
ID:58110 發(fā)表于 2019-10-8 08:42 | 只看該作者
很棒!謝謝分享!
回復(fù)

使用道具 舉報(bào)

32#
ID:207341 發(fā)表于 2019-10-7 15:38 | 只看該作者
我記得下載了
回復(fù)

使用道具 舉報(bào)

31#
ID:606788 發(fā)表于 2019-9-28 20:01 | 只看該作者
最近正在學(xué)習(xí)OLED,感謝樓主的分享&#128076;
回復(fù)

使用道具 舉報(bào)

30#
ID:610440 發(fā)表于 2019-9-11 14:50 | 只看該作者
你好,我最近有一個(gè)項(xiàng)目,需要用到stm32 oled屏顯示菜單界面的框架,但是不理解框架架構(gòu)關(guān)系,方便加我Q溝通探討下嗎?
回復(fù)

使用道具 舉報(bào)

29#
ID:547459 發(fā)表于 2019-9-4 21:12 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

28#
ID:606788 發(fā)表于 2019-9-4 18:04 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

27#
ID:302850 發(fā)表于 2019-8-30 06:42 來(lái)自手機(jī) | 只看該作者
先收藏,感覺肯定會(huì)有一天能用上!
回復(fù)

使用道具 舉報(bào)

26#
ID:602925 發(fā)表于 2019-8-29 12:51 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

25#
ID:600035 發(fā)表于 2019-8-14 12:26 來(lái)自手機(jī) | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

24#
ID:270932 發(fā)表于 2019-7-28 15:47 | 只看該作者
正好學(xué)習(xí)OLED,謝謝樓主資料分享
回復(fù)

使用道具 舉報(bào)

23#
ID:586039 發(fā)表于 2019-7-28 11:53 | 只看該作者
請(qǐng)問(wèn)是要外接搖桿按鍵嗎,具體要怎么做呢
回復(fù)

使用道具 舉報(bào)

22#
ID:64765 發(fā)表于 2019-7-24 13:30 | 只看該作者
頗有收獲,謝了。
回復(fù)

使用道具 舉報(bào)

21#
ID:432611 發(fā)表于 2019-7-19 22:04 | 只看該作者
great,學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

20#
ID:521623 發(fā)表于 2019-7-19 17:13 | 只看該作者
額,那個(gè)mini版燒進(jìn)去程序屏就黑了,咋啥都沒有,是不是燒了 啊
回復(fù)

使用道具 舉報(bào)

19#
ID:570493 發(fā)表于 2019-7-15 16:59 | 只看該作者
怎么我用IIC模式?jīng)]顯示,是不是我哪沒配置好?
回復(fù)

使用道具 舉報(bào)

18#
ID:55591 發(fā)表于 2019-7-12 06:37 | 只看該作者
看著非常不錯(cuò)
回復(fù)

使用道具 舉報(bào)

17#
ID:499409 發(fā)表于 2019-7-2 12:03 | 只看該作者
能發(fā)一下代碼嗎1813298696@qqcom
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 高清国产午夜精品久久久久久 | 免费一区二区在线观看 | 亚洲不卡在线视频 | 中文字幕欧美日韩一区 | 9999在线视频 | 91精品国产一区二区三区 | 久久高清国产视频 | 91精品国产色综合久久 | 亚洲国产精品久久久久婷婷老年 | 欧美激情啪啪 | 九色网址| 99久久精品国产麻豆演员表 | 欧美精品一区二区三区在线四季 | 欧美一区二区三区在线观看 | 日本韩国欧美在线观看 | 中文字幕第三页 | 三级成人在线 | 免费av一区二区三区 | 成人精品系列 | 人人爽人人爽人人片av | 欧美久久久久久久 | 亚洲欧美日韩精品久久亚洲区 | 国产欧美一区二区久久性色99 | 亚洲一二三区在线观看 | 亚洲精品美女在线观看 | 精品久久久久久久久久久下田 | 91精品国产高清一区二区三区 | 欧美在线国产精品 | 第四色影音先锋 | 亚洲天堂免费在线 | 九九在线精品视频 | 午夜影院在线观看 | 久久99精品视频 | 久久久久国产一区二区三区 | av一区二区三区在线观看 | 高清亚洲 | 亚洲精品黑人 | 国产精品一区视频 | 国产日韩欧美一区 | 99国产精品久久久久久久 | 一区在线免费视频 |