欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 12864多級(jí)菜單實(shí)現(xiàn),可方便實(shí)現(xiàn)無(wú)限級(jí)菜單(um0549) [打印本頁(yè)]

作者: feifei_51    時(shí)間: 2017-8-12 14:36
標(biāo)題: 12864多級(jí)菜單實(shí)現(xiàn),可方便實(shí)現(xiàn)無(wú)限級(jí)菜單(um0549)
運(yùn)行效果圖:

選擇查詢項(xiàng):

選擇查詢項(xiàng)并按確定鍵后:

此時(shí)按返回鍵,將會(huì)返回到第二個(gè)圖片中的界面
首先定義一個(gè)菜單結(jié)構(gòu)
  1. typedef struct menu//定義一個(gè)菜單
  2. {
  3. u8 range_from,range_to; //當(dāng)前顯示的項(xiàng)開(kāi)始及結(jié)束序號(hào)
  4. u8 itemCount;//項(xiàng)目總數(shù)
  5. u8 selected;//當(dāng)前選擇項(xiàng)
  6. u8 *menuItems[17];//菜單項(xiàng)目
  7. struct menu **subMenus;//子菜單
  8. struct menu *parent;//上級(jí)菜單 ,如果是頂級(jí)則為null
  9. void (**func)();//選擇相應(yīng)項(xiàng)按確定鍵后執(zhí)行的函數(shù)

  10. }Menu;

  11. Menu MainMenu = { //定義主菜單
  12. 0,3,4,0,//默認(rèn)顯示0-3項(xiàng),總共4項(xiàng),當(dāng)前選擇第0項(xiàng)
  13.   {
  14.   "設(shè)置1          ",
  15.   "設(shè)置2          ",
  16.   "輸入指令發(fā)送    ",
  17.   "查詢           "
  18.   }
  19. };

  20. Menu searchMenu = {//查詢菜單
  21. 0,3,6,0,
  22. {
  23.   "記帳記錄明細(xì)    ",
  24.   "未采集記錄數(shù)    ",
  25.   "設(shè)備機(jī)號(hào)        ",
  26.   "本機(jī)IP地址      ",
  27.   "記錄空間大小    ",
  28.   "軟件版本        "
  29. }
  30. };
  31. Menu *currentMenu;//當(dāng)前的菜單

  32. 用于顯示菜單項(xiàng)
  33. void display(u8 line) //顯示菜單項(xiàng)并設(shè)置選中的項(xiàng)反白
  34. {
  35. int i;
  36. line = 3-(currentMenu->range_to-line);
  37. Lcd_Fill(0x00);
  38. for(i = 0;i<4;i++)
  39. {
  40.   Lcd_Disp(i+1,0,currentMenu->menuItems[i+currentMenu->range_from]);
  41. }
  42. highlight(0,line,8,255);//反白顯示指定行
  43. }
  44. void func(void)
  45. {

  46. printf("hello");
  47. }
  48. 初始化菜單:
  49. void initMenu()
  50. {
  51. MainMenu.subMenus = malloc(sizeof(&MainMenu)*4);
  52. MainMenu.subMenus[0] = NULL;//第1到3項(xiàng)沒(méi)有子菜單置null,選擇后程序會(huì)調(diào)用func中相應(yīng)項(xiàng)中的函數(shù)
  53. MainMenu.subMenus[1] = NULL;
  54. MainMenu.subMenus[2] = NULL;
  55. MainMenu.subMenus[3] = &searchMenu;//第四項(xiàng)查詢有子菜單
  56. MainMenu.func = malloc(sizeof(&func)*4);
  57. MainMenu.func[0] = NULL;
  58. MainMenu.func[1] = NULL;
  59. MainMenu.func[2] = &func;//當(dāng)選擇了并按了確定,會(huì)執(zhí)行func函數(shù)
  60. MainMenu.func[3] = NULL;
  61. MainMenu.parent = NULL;//表示是頂級(jí)菜單

  62. searchMenu.subMenus = malloc(sizeof(&searchMenu)*6);
  63. searchMenu.subMenus[0] = searchMenu.subMenus[1] = searchMenu.subMenus[2] = searchMenu.subMenus[3] = searchMenu.subMenus[4] = searchMenu.subMenus[5] = NULL;
  64. searchMenu.func = malloc(sizeof(&printf)*6);
  65. searchMenu.func[0] = searchMenu.func[2] = searchMenu.func[2] = searchMenu.func[3] = searchMenu.func[4] = searchMenu.func[5] = NULL;
  66. searchMenu.parent = &MainMenu;//上一級(jí)菜單是MainMenu.進(jìn)入查詢子菜單后按返回鍵,將會(huì)顯示這個(gè)菜單 項(xiàng)

  67. currentMenu = &MainMenu;

  68. }

  69. main

  70. int main(void)
  71. {

  72.   delay_init();
  73.   uart_init(9600);
  74.   Lcd_Init();
  75.   KEY_Init();
  76.   initMenu();
  77.   display(currentMenu->selected);
  78.   while(1)
  79. {
  80.   key = KEY_Scan();
  81.   if(key == 0)
  82.   {
  83.    delay_ms(10);
  84.    continue;
  85.   }
  86.   printf("key %d is press",key);
  87.   switch(key)
  88.   {
  89.    case 12://向上
  90.     if(currentMenu->selected == 0)//到了第一項(xiàng)
  91.      break;
  92.     else
  93.     {
  94.      currentMenu->selected--;
  95.      if(currentMenu->selected < currentMenu->range_from)//更新顯示的區(qū)域
  96.      {
  97.       currentMenu->range_from = currentMenu->selected;
  98.       currentMenu->range_to = currentMenu->range_from+3;
  99.      }
  100.      display(currentMenu->selected);
  101.      break;
  102.     }
  103.    case 8://向下
  104.     if(currentMenu->selected == currentMenu->itemCount-1)
  105.      break;
  106.     else
  107.     {
  108.      currentMenu->selected++;
  109.      if(currentMenu->selected>currentMenu->range_to)
  110.      {
  111.       currentMenu->range_to = currentMenu->selected;
  112.       currentMenu->range_from = currentMenu->range_to-3;
  113.      }
  114.      display(currentMenu->selected);
  115.      break;
  116.     }
  117.    case 4://Enter鍵
  118.    {
  119.     if(currentMenu->subMenus[currentMenu->selected] !=NULL)
  120.     {
  121.      currentMenu = currentMenu->subMenus[currentMenu->selected];
  122.      display(0);
  123.     }
  124.     else
  125.     {
  126.      if(currentMenu->func[currentMenu->selected] != NULL)
  127.      {
  128.       currentMenu->func[currentMenu->selected]();//執(zhí)行相應(yīng)的函數(shù)
  129.       display(currentMenu->selected);//返回后恢復(fù)原來(lái)的菜單狀態(tài)
  130.      }
  131.     }
  132.     break;
  133.    }
  134.    case 3://返回鍵
  135.    {
  136.     if(currentMenu->parent!=NULL)//父菜單不為空,將顯示父菜單
  137.     {
  138.      currentMenu = currentMenu->parent;
  139.      display(currentMenu->selected);
  140.     }
  141.     break;
  142.    }
  143.    default:
  144.      break;
  145.   }
  146.   delay_ms(10);
  147. }
  148. }
復(fù)制代碼

ST公司關(guān)于STM3210E-EVAL演示版本的工程中就有菜單的代碼,現(xiàn)分享給大家:
um0549.rar (5.26 MB, 下載次數(shù): 1040)


作者: fengye20101112    時(shí)間: 2017-9-28 15:51
好東西,無(wú)限級(jí)菜單擴(kuò)展
作者: Ning.    時(shí)間: 2017-12-29 15:37
好像下載,馬上去賺幣
作者: qinwenfang    時(shí)間: 2018-1-21 20:36
想學(xué)習(xí)下下,剛好 遇到
作者: Luckyfa    時(shí)間: 2018-3-30 14:24
不用下載,這這些夠用了,非常感謝。
作者: esmember    時(shí)間: 2018-4-20 09:24
這個(gè)可以有。正苦于液晶顯示跟控制問(wèn)題呢。感謝
作者: 何必刻意    時(shí)間: 2018-4-25 11:40
esmember 發(fā)表于 2018-4-20 09:24
這個(gè)可以有。正苦于液晶顯示跟控制問(wèn)題呢。感謝

親 弄出來(lái)了嗎?能分享一下嗎?
作者: mjqing    時(shí)間: 2018-7-4 09:42

好東西,無(wú)限級(jí)菜單擴(kuò)展
作者: vipwhaha    時(shí)間: 2018-8-14 17:07
感謝樓主,正愁控制不知道怎么去做
作者: quinn1    時(shí)間: 2018-9-3 17:00
牛人啊,正在做這個(gè)
作者: 紅燒魚(yú)頭    時(shí)間: 2018-11-24 14:43
請(qǐng)教一下,第6行的 u8 *menuItems[17] 不需要定義成二維數(shù)組嗎?
作者: scnclisir1    時(shí)間: 2019-4-2 08:55
好東西,可惜沒(méi)分了。。。。
作者: toney123456    時(shí)間: 2019-4-2 16:57
MARK  THIS
作者: yy07090704    時(shí)間: 2019-5-6 14:38
感謝樓主分享,實(shí)在太好了
作者: 周鵬    時(shí)間: 2019-5-11 21:55
求整個(gè)包 下載下來(lái) 編譯不通過(guò)哎
作者: 青青梓衿    時(shí)間: 2019-6-23 22:49
這個(gè)程序厲害,學(xué)習(xí)下
作者: iamarookie    時(shí)間: 2019-7-12 10:56
你好 樓主請(qǐng)問(wèn)反白一行怎么實(shí)現(xiàn)的呢
作者: njchenmin    時(shí)間: 2020-2-5 17:09
非常棒的介紹
作者: lvlv99    時(shí)間: 2020-2-5 19:04
12864顯示屏是帶字庫(kù),還是不帶字庫(kù)的?
作者: guangshi_wq    時(shí)間: 2020-2-6 16:36
這個(gè)多級(jí)菜單寫的好,精辟,不象有的多級(jí)菜單程序代碼多,難懂
作者: 51hdz3356619    時(shí)間: 2020-4-13 09:02
太好了,直接收藏。。。
作者: mini92    時(shí)間: 2020-4-21 23:38
好程序值得收藏
作者: wqflyy    時(shí)間: 2020-4-27 18:12
正在做多級(jí)菜單顯示的項(xiàng)目,發(fā)現(xiàn)這個(gè)挺好的
作者: kevin_cgl    時(shí)間: 2020-5-8 20:38
正在找這個(gè),我用的51,不知道是否通用呢
作者: 2399902214    時(shí)間: 2020-5-11 11:13
不知道可不可以用在320240LCD仿真電路上

作者: 大米袋    時(shí)間: 2020-5-11 12:41
感謝分享
作者: huirunlong    時(shí)間: 2020-6-14 12:22
這個(gè)挺好的
作者: 炸雞店老板炸了    時(shí)間: 2020-7-27 11:53
多級(jí)菜單還有其它的嘛
作者: 炸雞店老板炸了    時(shí)間: 2020-7-28 17:27
你的顯示沒(méi)有設(shè)計(jì)顯示坐標(biāo)的嘛
作者: 炸雞店老板炸了    時(shí)間: 2020-7-28 17:33
現(xiàn)在可以實(shí)現(xiàn)得了翻頁(yè),但不知道怎樣實(shí)現(xiàn)在同一級(jí)菜單中來(lái)回切換(如:我顯示屏只能顯示四項(xiàng)目錄,但我的目錄一共有八項(xiàng),怎樣用按鍵來(lái)控制上下切換滾動(dòng)),指點(diǎn)會(huì)了可以給一二百積分
作者: tomsmiss123    時(shí)間: 2020-7-30 15:25
非常感謝樓主分享,謝謝。。。
作者: 15973185691    時(shí)間: 2020-8-8 08:48
炸雞店老板炸了 發(fā)表于 2020-7-28 17:33
現(xiàn)在可以實(shí)現(xiàn)得了翻頁(yè),但不知道怎樣實(shí)現(xiàn)在同一級(jí)菜單中來(lái)回切換(如:我顯示屏只能顯示四項(xiàng)目錄,但我的目 ...

你搞定了沒(méi),我再在也需要做的跟你的也差不多
作者: 15973185691    時(shí)間: 2020-8-8 12:21
炸雞店老板炸了 發(fā)表于 2020-7-28 17:33
現(xiàn)在可以實(shí)現(xiàn)得了翻頁(yè),但不知道怎樣實(shí)現(xiàn)在同一級(jí)菜單中來(lái)回切換(如:我顯示屏只能顯示四項(xiàng)目錄,但我的目 ...

在嗎,能用嗎?
作者: 鴿子1988    時(shí)間: 2020-9-3 10:08
下載文件和上文對(duì)不上。不愿意把資料分享,就不要提供下載包。隨便弄一個(gè)下載包出來(lái)算什么
作者: 布萊克先生    時(shí)間: 2020-9-5 08:47
實(shí)在是太有用了
作者: 蛋黃派@SZPT    時(shí)間: 2020-9-12 20:16
MARK 一下,正好需要用到。
作者: cyrs    時(shí)間: 2021-1-27 18:01
是編碼器控制嗎
作者: 網(wǎng)絡(luò)孤客    時(shí)間: 2021-2-2 10:47
本機(jī)IP是如何輸入的?
作者: zlrong    時(shí)間: 2021-2-19 22:48
多謝了!研究研究
作者: chinajhgjhg    時(shí)間: 2021-2-20 15:59
這個(gè)太有價(jià)值了。
作者: cfh435713942    時(shí)間: 2021-5-8 10:36
我的怎么打不開(kāi)
作者: shu_007    時(shí)間: 2021-5-13 10:21
12864有帶中文字庫(kù)和沒(méi)帶的兩種
作者: sr861126    時(shí)間: 2021-8-31 17:04
下載的代碼不是12864的,是oled0.96的代碼
作者: 孟特特    時(shí)間: 2021-9-8 21:24
太惡心啦 沒(méi)什么用 下載的東西和這貼的完全兩碼事
作者: Y!NG    時(shí)間: 2022-8-18 17:04
太復(fù)雜 ,沒(méi)看懂,好像不是用鏈表實(shí)現(xiàn)的




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1