登錄
|
立即注冊
|
使用QQ帳號(hào)登錄
論壇
>
STM32/8
發(fā)帖
|
12864多級(jí)菜單實(shí)現(xiàn)STM32源程序,可方便實(shí)現(xiàn)無限級(jí)菜單
看26135
|
回44
|
收藏
樓主
ID:230628
只看他
2017-9-2 23:45
分享一個(gè)lcd12864液晶屏的多級(jí)菜單實(shí)現(xiàn)方法,可方便實(shí)現(xiàn)無限級(jí)菜單
這是移植別人,加以修改的,支持從第一行菜單直接跳轉(zhuǎn)到最后一行,反之如此
由于不知道怎么通過函數(shù)指針傳遞參數(shù),所以在結(jié)構(gòu)體里另定義了一個(gè)變,用來傳
遞參數(shù)量,如各位有更好的改法,,請?jiān)谫N里貼出
所有資料51hei提供下載:
多級(jí)菜單 按鍵切換.zip
(122.07 KB)
(下載次數(shù): 637, 2017-9-2 23:45 上傳)
下載積分: 黑幣 -5
單片機(jī)源程序如下:
代碼:
#include "muti_menu.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
Menu Menu_main={
3,0,
" 主菜單",
{
"顯示",
"設(shè)置",
"更多"
}
};
Menu Menu_set={
2, 0,
" 設(shè)置",
{
"運(yùn)行參數(shù)",
"參數(shù)2"
}
};
Menu Menu_more={
8,0,
" 更多",
{
"菜單1",
"菜單2",
"菜單3",
"菜單4",
"菜單5",
"菜單6",
"菜單7",
"菜單8"
}
};
Menu Interface_showData={
0,0
};
Menu Interface_setRunningData={
0,0
};
Menu Interface_showTest={
0,0
};
struct currMenu
{
Menu *menu; //指向的菜單指針
//u8 selectRow; //當(dāng)前選擇的是哪一項(xiàng)
}CurrMenu;
void keyEvent_menuUP(void);
void keyEvent_menuDOWN(void);
void keyEvent_menuENTER(void);
void keyEvent_menuBACK(void);
void keyEvent_Empty(void);
void GUIfunc_showTest(void);
void GUIfunc_setRunningData(void);
void GUIfunc_showData(void);
void initMenu(void)
{
u8 i;
Menu_main.submenuPtr=malloc(sizeof(&Menu_main)*Menu_main.num);
Menu_main.submenuPtr[0]=&Interface_showData;
Menu_main.submenuPtr[1]=&Menu_set;
Menu_main.submenuPtr[2]=&Menu_more;
Menu_main.parent=NULL;
Menu_main.funcKeyUP=&keyEvent_menuUP;
Menu_main.funcKeyDOWN=&keyEvent_menuDOWN;
Menu_main.funcKeyLEFT=&keyEvent_Empty;
Menu_main.funcKeyRIGHT=&keyEvent_menuENTER;
Menu_set.submenuPtr=malloc(sizeof(&Menu_set)*Menu_set.num);
Menu_set.submenuPtr[0]=&Interface_setRunningData;
Menu_set.submenuPtr[1]=&Interface_showTest;
Menu_set.parent=&Menu_main;
Menu_set.funcKeyUP=&keyEvent_menuUP;
Menu_set.funcKeyDOWN=&keyEvent_menuDOWN;
Menu_set.funcKeyLEFT=&keyEvent_menuBACK;
Menu_set.funcKeyRIGHT=&keyEvent_menuENTER;
Menu_more.submenuPtr=malloc(sizeof(&Menu_more)*Menu_more.num);
for(i=0;i<Menu_more.num;i++) Menu_more.submenuPtr[i]=&Interface_showTest;
Menu_more.parent=&Menu_main;
Menu_more.funcKeyUP=&keyEvent_menuUP;
Menu_more.funcKeyDOWN=&keyEvent_menuDOWN;
Menu_more.funcKeyLEFT=&keyEvent_menuBACK;
Menu_more.funcKeyRIGHT=&keyEvent_menuENTER;
Interface_showData.func=&GUIfunc_showData;
Interface_showData.parent=&Menu_main;
Interface_showData.funcKeyUP=&keyEvent_Empty;
Interface_showData.funcKeyDOWN=&keyEvent_Empty;
Interface_showData.funcKeyLEFT=&keyEvent_menuBACK;
Interface_showData.funcKeyRIGHT=&keyEvent_Empty;
Interface_setRunningData.func=&GUIfunc_setRunningData;
Interface_setRunningData.parent=&Menu_set;
Interface_setRunningData.funcKeyUP=&keyEvent_Empty;
Interface_setRunningData.funcKeyDOWN=&keyEvent_Empty;
Interface_setRunningData.funcKeyLEFT=&keyEvent_menuBACK;
Interface_setRunningData.funcKeyRIGHT=&keyEvent_Empty;
Interface_showTest.func=&GUIfunc_showTest;
Interface_showTest.parent=&Menu_more;
Interface_showTest.funcKeyUP=&keyEvent_Empty;
Interface_showTest.funcKeyDOWN=&keyEvent_Empty;
Interface_showTest.funcKeyLEFT=&keyEvent_menuBACK;
Interface_showTest.funcKeyRIGHT=&keyEvent_Empty;
CurrMenu.menu=&Menu_main;
//CurrMenu.selectRow=0;
}
void displayCurrentMenu(void)
{
u8 i,j;
u8 page;
char tempstr[16]={0};
if (CurrMenu.menu->num > 0)
{
displayString(0,0,CurrMenu.menu->menuName);
CurrMenu.menu->recordSubNum<3?(page=1):(page=CurrMenu.menu->recordSubNum/3+1);
//printf("%d",CurrMenu.menu->recordSubNum);
for(i=0;i<3;i++)
{
j=(page-1)*3+i;
if (j<CurrMenu.menu->num)
{
sprintf(tempstr,"%d",j+1);
displayString(i+1,0,tempstr);
displayString(i+1,1,CurrMenu.menu->submenuName[j]);
if ((CurrMenu.menu->submenuPtr[j])->num != 0) displayString(i+1,7,"\x10");
}else
{
displayString(i+1,0," ");
}
}
writeWhiteLine(CurrMenu.menu->recordSubNum%3+2);
}
else
{
CurrMenu.menu->func();
}
}
void GUIfunc_showTest(void)
{
displayString(0,0,"測試 ");
displayString(1,0," ");
displayString(2,0," ");
displayString(3,0,"返回 確認(rèn)");
}
void GUIfunc_showData(void)
{
displayString(0,0,"主速度= ");
displayString(1,0,"轉(zhuǎn)速=");
displayString(2,0," ");
displayString(3,0," ");
}
void GUIfunc_setRunningData(void)
{
displayString(0,0,"設(shè)置選項(xiàng)");
displayString(1,0,"最大轉(zhuǎn)速");
displayString(2,0,"是否啟用自動(dòng)控制");
displayString(3,0," ");
}
void keyEvent_menuUP(void)
{
if (CurrMenu.menu->recordSubNum<(CurrMenu.menu->num-1))
{
CurrMenu.menu->recordSubNum++;
//CurrMenu.menu->recordSubNum=CurrMenu.selectRow;
}
}
void keyEvent_menuDOWN(void)
{
if (CurrMenu.menu->recordSubNum>0)
{
CurrMenu.menu->recordSubNum--;
//CurrMenu.menu->recordSubNum=CurrMenu.selectRow;
}
}
void keyEvent_menuENTER(void)
{
clearLcd();
CurrMenu.menu=CurrMenu.menu->submenuPtr[CurrMenu.menu->recordSubNum];
CurrMenu.menu->recordSubNum=0;
}
void keyEvent_menuBACK(void)
{
if (CurrMenu.menu->parent != NULL)
{
clearLcd();
CurrMenu.menu=CurrMenu.menu->parent;
}
}
void keyEvent_Empty(void){}
void KeyProc(void)
{
if (Trg>0)
{
if(Trg&(1<<UP_Press))
{
CurrMenu.menu->funcKeyUP();
}
else if(Trg&(1<<DOWN_Press))
{
CurrMenu.menu->funcKeyDOWN();
}
else if(Trg&(1<<LEFT_Press))
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
沙發(fā)
ID:77462
只看他
2017-10-18 19:26
不錯(cuò)不錯(cuò)
板凳
ID:236426
只看他
2017-11-14 00:35
謝謝分享
地板
ID:262983
只看他
2018-1-10 15:33
多謝分享,謝謝
5
#
ID:148337
只看他
2018-3-6 09:26
請問#define RW_READ PBout(1)什么意思
6
#
ID:148337
只看他
2018-3-6 09:52
請問我想改引腳,應(yīng)該改哪里
7
#
ID:68875
只看他
2018-3-10 12:01
不錯(cuò),有用,謝謝樓主分享
8
#
ID:251714
只看他
2018-4-6 21:35
請問 這引腳 怎么接????。。。
9
#
ID:185372
只看他
2018-4-20 09:38
最近因?yàn)橐壕У脑?,頭很大,這個(gè)可以支持。感謝
10
#
ID:323253
只看他
2018-5-6 12:21
樓主能私發(fā)一份嘛。。。沒黑幣。。。
1290382834@qq.com
11
#
ID:327685
只看他
2018-5-11 16:07
能不能給我發(fā)一份
289444124@qq.com
12
#
ID:305287
只看他
2018-5-17 16:54
感謝分享
13
#
ID:284462
只看他
2018-5-18 10:13
學(xué)習(xí)一下
14
#
ID:293829
只看他
2018-5-18 10:32
請問有stm32f103的源碼嗎
15
#
ID:329571
只看他
2018-5-21 00:01
謝謝分享
16
#
ID:288488
只看他
2018-6-14 14:25
哇塞,好好玩兒。
17
#
ID:340846
只看他
2018-6-28 20:02
能在proteus 下仿真嗎
18
#
ID:72898
只看他
2018-8-4 14:55
謝謝樓主,正需要
19
#
ID:364813
只看他
2018-8-13 09:45
想下載看看
20
#
ID:223688
只看他
2018-8-13 11:22
謝謝分享
21
#
ID:368583
只看他
2018-8-14 11:34
不錯(cuò),有用,謝謝樓主分享
22
#
ID:307825
只看他
2018-9-4 11:44
大牛出品必須學(xué)習(xí)
23
#
ID:304328
只看他
2018-9-13 14:49
學(xué)習(xí)學(xué)習(xí)
24
#
ID:214383
只看他
2018-10-1 21:53
能給點(diǎn)注釋就更棒了
25
#
ID:389852
只看他
2018-10-22 17:39
不是下載過了嗎,怎么還要扣費(fèi)
26
#
ID:281047
只看他
2018-11-25 10:54
下載下來試試效果。
27
#
ID:281047
只看他
2018-11-25 12:59
主要是沒有演示圖片不好評(píng)估菜單效果。如果可以iyou圖片看看就好了 。
28
#
ID:71535
只看他
2018-12-11 20:28
學(xué)習(xí)一下載下來試試效果
29
#
ID:459593
只看他
2019-1-1 21:50
不錯(cuò)0.0
30
#
ID:112865
只看他
2019-5-16 20:50
感謝分享到了
31
#
ID:511677
只看他
2019-5-23 12:48
謝謝,感謝分享。
32
#
ID:202803
只看他
2019-6-18 22:40
謝謝樓主了
33
#
ID:87000
只看他
2019-6-20 08:34
先看看,目前用不著
34
#
ID:228853
只看他
2019-6-21 14:17
剛好需要
35
#
ID:499661
只看他
2019-7-13 17:12
不錯(cuò)
不錯(cuò)
36
#
ID:552299
只看他
2019-7-18 10:06
謝謝樓主
37
#
ID:607158
只看他
2019-9-3 22:57
太好了~~~
38
#
ID:87000
只看他
2019-9-4 16:37
下來來看看,與其他有什么不同
39
#
ID:614910
只看他
2019-9-22 20:07
樓主這是32的什么板子呀mini還是f4
40
#
ID:607641
只看他
2019-11-1 11:59
感謝,學(xué)習(xí)了
1
2
下一頁
51黑電子論壇
Powered by
Discuz!
X3.1
首頁
|
標(biāo)準(zhǔn)版
|
觸屏版
|
電腦版