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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 25930|回復: 44
打印 上一主題 下一主題
收起左側

12864多級菜單實現(xiàn)STM32源程序,可方便實現(xiàn)無限級菜單

  [復制鏈接]
跳轉到指定樓層
樓主
ID:230628 發(fā)表于 2017-9-2 23:45 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一個lcd12864液晶屏的多級菜單實現(xiàn)方法,可方便實現(xiàn)無限級菜單
這是移植別人,加以修改的,支持從第一行菜單直接跳轉到最后一行,反之如此
由于不知道怎么通過函數(shù)指針傳遞參數(shù),所以在結構體里另定義了一個變,用來傳
遞參數(shù)量,如各位有更好的改法,,請在貼里貼出




所有資料51hei提供下載:
多級菜單 按鍵切換.zip (122.07 KB, 下載次數(shù): 637)

單片機源程序如下:
  1. #include "muti_menu.h"
  2. #include "stdlib.h"
  3. #include "stdio.h"
  4. #include "string.h"

  5. Menu Menu_main={
  6.         3,0,
  7.         "    主菜單",
  8.         {
  9.                 "顯示",
  10.                 "設置",
  11.                 "更多"
  12.         }
  13. };

  14. Menu Menu_set={
  15.         2, 0,
  16.         "    設置",
  17.         {
  18.                 "運行參數(shù)",
  19.                 "參數(shù)2"
  20.         }
  21. };

  22. Menu Menu_more={
  23.         8,0,
  24.         "    更多",
  25.         {
  26.                 "菜單1",
  27.                 "菜單2",
  28.                 "菜單3",
  29.                 "菜單4",
  30.                 "菜單5",
  31.                 "菜單6",
  32.                 "菜單7",
  33.                 "菜單8"
  34.         }
  35. };
  36.         
  37. Menu Interface_showData={
  38.         0,0
  39. };
  40. Menu Interface_setRunningData={
  41.         0,0
  42. };
  43. Menu Interface_showTest={
  44.         0,0
  45. };

  46. struct currMenu
  47. {
  48.         Menu *menu;                           //指向的菜單指針
  49.         //u8 selectRow;      //當前選擇的是哪一項
  50.         
  51.         
  52. }CurrMenu;


  53. void keyEvent_menuUP(void);
  54. void keyEvent_menuDOWN(void);
  55. void keyEvent_menuENTER(void);
  56. void keyEvent_menuBACK(void);
  57. void keyEvent_Empty(void);
  58. void GUIfunc_showTest(void);
  59. void GUIfunc_setRunningData(void);
  60. void GUIfunc_showData(void);

  61. void initMenu(void)
  62. {
  63.         u8 i;
  64.         Menu_main.submenuPtr=malloc(sizeof(&Menu_main)*Menu_main.num);
  65.         Menu_main.submenuPtr[0]=&Interface_showData;
  66.         Menu_main.submenuPtr[1]=&Menu_set;
  67.         Menu_main.submenuPtr[2]=&Menu_more;
  68.         Menu_main.parent=NULL;
  69.         Menu_main.funcKeyUP=&keyEvent_menuUP;
  70.         Menu_main.funcKeyDOWN=&keyEvent_menuDOWN;
  71.         Menu_main.funcKeyLEFT=&keyEvent_Empty;
  72.         Menu_main.funcKeyRIGHT=&keyEvent_menuENTER;
  73.         
  74.         Menu_set.submenuPtr=malloc(sizeof(&Menu_set)*Menu_set.num);
  75.         Menu_set.submenuPtr[0]=&Interface_setRunningData;
  76.         Menu_set.submenuPtr[1]=&Interface_showTest;
  77.         Menu_set.parent=&Menu_main;
  78.         Menu_set.funcKeyUP=&keyEvent_menuUP;
  79.         Menu_set.funcKeyDOWN=&keyEvent_menuDOWN;
  80.         Menu_set.funcKeyLEFT=&keyEvent_menuBACK;
  81.         Menu_set.funcKeyRIGHT=&keyEvent_menuENTER;
  82.         
  83.         
  84.         Menu_more.submenuPtr=malloc(sizeof(&Menu_more)*Menu_more.num);
  85.         for(i=0;i<Menu_more.num;i++) Menu_more.submenuPtr[i]=&Interface_showTest;
  86.         Menu_more.parent=&Menu_main;
  87.         Menu_more.funcKeyUP=&keyEvent_menuUP;
  88.         Menu_more.funcKeyDOWN=&keyEvent_menuDOWN;
  89.         Menu_more.funcKeyLEFT=&keyEvent_menuBACK;
  90.         Menu_more.funcKeyRIGHT=&keyEvent_menuENTER;
  91.         
  92.         Interface_showData.func=&GUIfunc_showData;
  93.         Interface_showData.parent=&Menu_main;
  94.         Interface_showData.funcKeyUP=&keyEvent_Empty;
  95.         Interface_showData.funcKeyDOWN=&keyEvent_Empty;
  96.         Interface_showData.funcKeyLEFT=&keyEvent_menuBACK;
  97.         Interface_showData.funcKeyRIGHT=&keyEvent_Empty;
  98.         
  99.         Interface_setRunningData.func=&GUIfunc_setRunningData;
  100.         Interface_setRunningData.parent=&Menu_set;
  101.         Interface_setRunningData.funcKeyUP=&keyEvent_Empty;
  102.         Interface_setRunningData.funcKeyDOWN=&keyEvent_Empty;
  103.         Interface_setRunningData.funcKeyLEFT=&keyEvent_menuBACK;
  104.         Interface_setRunningData.funcKeyRIGHT=&keyEvent_Empty;
  105.         
  106.         Interface_showTest.func=&GUIfunc_showTest;
  107.         Interface_showTest.parent=&Menu_more;
  108.         Interface_showTest.funcKeyUP=&keyEvent_Empty;
  109.         Interface_showTest.funcKeyDOWN=&keyEvent_Empty;
  110.         Interface_showTest.funcKeyLEFT=&keyEvent_menuBACK;
  111.         Interface_showTest.funcKeyRIGHT=&keyEvent_Empty;
  112.         
  113.         
  114.         CurrMenu.menu=&Menu_main;
  115.         //CurrMenu.selectRow=0;
  116.         
  117.         
  118.         
  119. }


  120. void displayCurrentMenu(void)
  121. {
  122.         u8 i,j;
  123.         u8 page;
  124.         char tempstr[16]={0};
  125.         if (CurrMenu.menu->num > 0)
  126.         {
  127.                 displayString(0,0,CurrMenu.menu->menuName);
  128.                 CurrMenu.menu->recordSubNum<3?(page=1):(page=CurrMenu.menu->recordSubNum/3+1);
  129.                 //printf("%d",CurrMenu.menu->recordSubNum);
  130.                 for(i=0;i<3;i++)
  131.                 {
  132.                         j=(page-1)*3+i;
  133.                         if (j<CurrMenu.menu->num)
  134.                         {
  135.                                 sprintf(tempstr,"%d",j+1);
  136.                                 displayString(i+1,0,tempstr);
  137.                                 displayString(i+1,1,CurrMenu.menu->submenuName[j]);
  138.                                 if ((CurrMenu.menu->submenuPtr[j])->num != 0) displayString(i+1,7,"\x10");
  139.                         }else
  140.                         {
  141.                                 displayString(i+1,0,"        ");
  142.                         }
  143.                 }
  144.                 writeWhiteLine(CurrMenu.menu->recordSubNum%3+2);
  145.         }
  146.         else
  147.         {
  148.                 CurrMenu.menu->func();
  149.         }
  150. }

  151. void GUIfunc_showTest(void)
  152. {
  153.         displayString(0,0,"測試  ");
  154.         displayString(1,0,"                ");
  155.         displayString(2,0,"        ");
  156.         displayString(3,0,"返回        確認");
  157. }
  158. void GUIfunc_showData(void)
  159. {
  160.         displayString(0,0,"主速度=   ");
  161.         displayString(1,0,"轉速=");
  162.         displayString(2,0,"        ");
  163.         displayString(3,0,"        ");
  164. }
  165. void GUIfunc_setRunningData(void)
  166. {
  167.         displayString(0,0,"設置選項");
  168.         displayString(1,0,"最大轉速");
  169.         displayString(2,0,"是否啟用自動控制");
  170.         displayString(3,0,"        ");
  171. }

  172. void keyEvent_menuUP(void)
  173. {
  174.         if (CurrMenu.menu->recordSubNum<(CurrMenu.menu->num-1))
  175.         {
  176.                 CurrMenu.menu->recordSubNum++;
  177.                 //CurrMenu.menu->recordSubNum=CurrMenu.selectRow;
  178.         }
  179. }

  180. void keyEvent_menuDOWN(void)
  181. {
  182.         if (CurrMenu.menu->recordSubNum>0)
  183.         {
  184.                 CurrMenu.menu->recordSubNum--;
  185.                 //CurrMenu.menu->recordSubNum=CurrMenu.selectRow;
  186.         }
  187. }

  188. void keyEvent_menuENTER(void)
  189. {
  190.         clearLcd();
  191.         CurrMenu.menu=CurrMenu.menu->submenuPtr[CurrMenu.menu->recordSubNum];
  192.         CurrMenu.menu->recordSubNum=0;
  193. }

  194. void keyEvent_menuBACK(void)
  195. {
  196.         
  197.         if (CurrMenu.menu->parent != NULL)
  198.         {
  199.                 clearLcd();
  200.                 CurrMenu.menu=CurrMenu.menu->parent;
  201.         }
  202. }

  203. void keyEvent_Empty(void){}


  204. void KeyProc(void)
  205. {

  206.         
  207.         if (Trg>0)
  208.         {
  209.                 if(Trg&(1<<UP_Press))
  210.                 {
  211.                         CurrMenu.menu->funcKeyUP();
  212.                 }
  213.                 else if(Trg&(1<<DOWN_Press))
  214.                 {
  215.                         CurrMenu.menu->funcKeyDOWN();
  216.                 }
  217.                 else if(Trg&(1<<LEFT_Press))
  218. ……………………

  219. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


評分

參與人數(shù) 2黑幣 +52 收起 理由
zhangli019 + 2 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏16 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:77462 發(fā)表于 2017-10-18 19:26 | 只看該作者
不錯不錯
回復

使用道具 舉報

板凳
ID:236426 發(fā)表于 2017-11-14 00:35 | 只看該作者
謝謝分享
回復

使用道具 舉報

地板
ID:262983 發(fā)表于 2018-1-10 15:33 | 只看該作者
多謝分享,謝謝
回復

使用道具 舉報

5#
ID:148337 發(fā)表于 2018-3-6 09:26 | 只看該作者
請問#define RW_READ PBout(1)什么意思
回復

使用道具 舉報

6#
ID:148337 發(fā)表于 2018-3-6 09:52 | 只看該作者
請問我想改引腳,應該改哪里
回復

使用道具 舉報

7#
ID:68875 發(fā)表于 2018-3-10 12:01 | 只看該作者
不錯,有用,謝謝樓主分享
回復

使用道具 舉報

8#
ID:251714 發(fā)表于 2018-4-6 21:35 | 只看該作者
請問 這引腳 怎么接啊??。。。
回復

使用道具 舉報

9#
ID:185372 發(fā)表于 2018-4-20 09:38 | 只看該作者
最近因為液晶的原因,頭很大,這個可以支持。感謝
回復

使用道具 舉報

10#
ID:323253 發(fā)表于 2018-5-6 12:21 | 只看該作者
樓主能私發(fā)一份嘛。。。沒黑幣。。。1290382834@qq.com
回復

使用道具 舉報

11#
ID:327685 發(fā)表于 2018-5-11 16:07 | 只看該作者
能不能給我發(fā)一份289444124@qq.com
回復

使用道具 舉報

12#
ID:305287 發(fā)表于 2018-5-17 16:54 | 只看該作者
感謝分享
回復

使用道具 舉報

13#
ID:284462 發(fā)表于 2018-5-18 10:13 來自手機 | 只看該作者
學習一下
回復

使用道具 舉報

14#
ID:293829 發(fā)表于 2018-5-18 10:32 | 只看該作者
請問有stm32f103的源碼嗎
回復

使用道具 舉報

15#
ID:329571 發(fā)表于 2018-5-21 00:01 | 只看該作者

謝謝分享
回復

使用道具 舉報

16#
ID:288488 發(fā)表于 2018-6-14 14:25 | 只看該作者
哇塞,好好玩兒。
回復

使用道具 舉報

17#
ID:340846 發(fā)表于 2018-6-28 20:02 | 只看該作者
能在proteus 下仿真嗎
回復

使用道具 舉報

18#
ID:72898 發(fā)表于 2018-8-4 14:55 | 只看該作者
謝謝樓主,正需要   
回復

使用道具 舉報

19#
ID:364813 發(fā)表于 2018-8-13 09:45 | 只看該作者
想下載看看
回復

使用道具 舉報

20#
ID:223688 發(fā)表于 2018-8-13 11:22 | 只看該作者

謝謝分享
回復

使用道具 舉報

21#
ID:368583 發(fā)表于 2018-8-14 11:34 | 只看該作者

不錯,有用,謝謝樓主分享
回復

使用道具 舉報

22#
ID:307825 發(fā)表于 2018-9-4 11:44 | 只看該作者
大牛出品必須學習
回復

使用道具 舉報

23#
ID:304328 發(fā)表于 2018-9-13 14:49 | 只看該作者
學習學習
回復

使用道具 舉報

24#
ID:214383 發(fā)表于 2018-10-1 21:53 | 只看該作者
能給點注釋就更棒了
回復

使用道具 舉報

25#
ID:389852 發(fā)表于 2018-10-22 17:39 | 只看該作者
不是下載過了嗎,怎么還要扣費
回復

使用道具 舉報

26#
ID:281047 發(fā)表于 2018-11-25 10:54 | 只看該作者
下載下來試試效果。
回復

使用道具 舉報

27#
ID:281047 發(fā)表于 2018-11-25 12:59 | 只看該作者
主要是沒有演示圖片不好評估菜單效果。如果可以iyou圖片看看就好了 。
回復

使用道具 舉報

28#
ID:71535 發(fā)表于 2018-12-11 20:28 | 只看該作者
學習一下載下來試試效果
回復

使用道具 舉報

29#
ID:459593 發(fā)表于 2019-1-1 21:50 | 只看該作者
不錯0.0
回復

使用道具 舉報

30#
ID:112865 發(fā)表于 2019-5-16 20:50 | 只看該作者
感謝分享到了
回復

使用道具 舉報

31#
ID:511677 發(fā)表于 2019-5-23 12:48 | 只看該作者
謝謝,感謝分享。
回復

使用道具 舉報

32#
ID:202803 發(fā)表于 2019-6-18 22:40 | 只看該作者
謝謝樓主了
回復

使用道具 舉報

33#
ID:87000 發(fā)表于 2019-6-20 08:34 | 只看該作者
先看看,目前用不著
回復

使用道具 舉報

34#
ID:228853 發(fā)表于 2019-6-21 14:17 | 只看該作者
剛好需要
回復

使用道具 舉報

35#
ID:499661 發(fā)表于 2019-7-13 17:12 | 只看該作者
不錯
不錯
回復

使用道具 舉報

36#
ID:552299 發(fā)表于 2019-7-18 10:06 | 只看該作者
謝謝樓主
回復

使用道具 舉報

37#
ID:607158 發(fā)表于 2019-9-3 22:57 | 只看該作者
太好了~~~
回復

使用道具 舉報

38#
ID:87000 發(fā)表于 2019-9-4 16:37 | 只看該作者
下來來看看,與其他有什么不同
回復

使用道具 舉報

39#
ID:614910 發(fā)表于 2019-9-22 20:07 | 只看該作者
樓主這是32的什么板子呀mini還是f4
回復

使用道具 舉報

40#
ID:607641 發(fā)表于 2019-11-1 11:59 | 只看該作者
感謝,學習了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天拍夜夜爽 | 一区二区av| 天天操 夜夜操 | 美女久久久久久久 | 成人在线国产 | 在线观看成人小视频 | 久久出精品 | 9999视频| 99精品国自产在线 | 狠狠操狠狠搞 | 欧美精品在欧美一区二区少妇 | 亚洲免费一区 | 美日韩精品 | 欧美色999 | 亚欧洲精品在线视频免费观看 | 一区二区三区视频在线观看 | 久久久久久色 | 国产成人精品免费 | 欧美videosex性极品hd | 97久久精品午夜一区二区 | 视频一区二区在线观看 | 成人日批视频 | 国产精品一级 | 国产精品一区二区免费看 | 日韩中文字幕免费在线观看 | 99免费视频 | 欧美精品日韩 | 亚洲高清视频一区二区 | 日韩视频在线播放 | www.天天干.com | 99久久日韩精品免费热麻豆美女 | 亚洲成人精品 | 99精品免费久久久久久久久日本 | 欧美国产日韩精品 | 嫩草影院网址 | 婷婷成人在线 | 成人精品鲁一区一区二区 | 中文字幕一区二区三区在线观看 | 午夜免费福利影院 | 高清久久久| 国产精品久久久久久久久久免费 |