本帖最后由 jssd 于 2017-10-14 20:33 编辑
- void Fun1(void)
- {
- LCD_DrawBox(0,0,127,63,BoxModel_Draw,FillType_NoFill);
- LCD_DisplayStr("test",0,0,FN_ASC8x16,FN_ST12,ALPHA_YES,LCD_Graphic_Draw);
- }
- struct _Page
- {
- void (*pFun)(void);
- };
- struct _Page menuPage[MAX_PAGE_NUM];
- void Init(void)
- {
- menuPage[0].pFun = Fun1;
- }
- void Show(void)
- {
- (menuPage[0].pFun)(); //乱码
- // Fun1(); //正常
- }
复制代码
如上代码中,直接用Fun1();则显示正常,使用(menuPage[0].pFun)();则显示乱码
因道行浅,看不出问题出在哪,故求助,非常感谢!
补充:
还有一点就是
void Fun1(void)
{
LCD_DrawBox(0,0,127,63,BoxModel_Draw,FillType_NoFill);
LCD_DisplayStr("test",0,0,FN_ASC8x16,FN_ST12,ALPHA_YES,LCD_Graphic_Draw);
}
这个函数去掉 LCD_DrawBox(0,0,127,63,BoxModel_Draw,FillType_NoFill);后显示是正常的,加上就不正常,但如果不是这样使用,单独使用又是正常的。证明函数本身没问题
感谢回复,下面是完整的程序,上面的是示意,用的是STC单片机,MDK5
- #include "menu.h"
- #include "lcd12864.h"
- #include "icon.h"
- //图标
- struct _Icon
- {
- unsigned char *pPic;
- unsigned char x;
- unsigned char y;
- unsigned char w;
- unsigned char h;
- unsigned char alpha;
- unsigned char type;
- };
- //字符串
- struct _String
- {
- unsigned char *pStr;
- unsigned char x;
- unsigned char y;
- unsigned char fontASC;
- unsigned char fontHZ;
- unsigned char alpha;
- unsigned char type;
- };
- //菜单项目
- struct _Item
- {
- unsigned char id;//项目id,在一个页面内独一无二,值从1开始
- struct _Icon icon;//项目图标
- struct _String str;//项目字符串
- struct _Icon focus;//项目焦点图片,获得焦点才显示
- // void (*Subs)();//项目响应函数,当确认或取消时执行
- };
- //页面
- struct _Page
- {
- unsigned char itemNum;//一个页面包涵的项目总数
- struct _Item *pItem;//一个页面包涵的项目指针
- void (*pFun)(void);//显示页面之前调用的函数
- };
- //菜单定义区
- #define MAX_PAGE_NUM 1
- xdata struct _Page menuPage[MAX_PAGE_NUM];
- #define MENU_MAIN 0 //主菜单
- #define MENU_MAIN_ITEM 4 //主菜单项目数量
- xdata struct _Item menuMain[MENU_MAIN_ITEM];
- //菜单全局变量
- unsigned char pageID = 0;//要显示的页面id号
- unsigned char focusID = 0;//获得焦点的id号,0表示没有项目获得焦点
- void MainMenuDisplayInit(void)
- {
- LCD_DrawBox(0,0,127,63,BoxModel_Draw,FillType_NoFill);
- LCD_DisplayStr("test",0,0,FN_ASC8x16,FN_ST12,ALPHA_YES,LCD_Graphic_Draw);
- }
- //函数说明:根目录初始化
- void MainMenuInit(void)
- {
- //初始化页面
- menuPage[MENU_MAIN].itemNum = MENU_MAIN_ITEM;
- menuPage[MENU_MAIN].pItem = menuMain;
- menuPage[MENU_MAIN].pFun = MainMenuDisplayInit;
-
- //初始化项目
- menuMain[0].id = 1;//
- menuMain[0].icon.pPic = 0;
- menuMain[0].icon.x = 0;
- menuMain[0].icon.y = 0;
- menuMain[0].icon.w = 0;
- menuMain[0].icon.h = 0;
- menuMain[0].icon.alpha = 0;
- menuMain[0].icon.type = 0;
-
- menuMain[0].str.pStr = "0";
- menuMain[0].str.x = 20;
- menuMain[0].str.y = 20;
- menuMain[0].str.fontASC = FN_ASC8x16;
- menuMain[0].str.fontHZ = FN_ST12;
- menuMain[0].str.alpha = ALPHA_YES;
- menuMain[0].str.type = LCD_Graphic_Draw;
-
- menuMain[0].focus.pPic = 0;
- menuMain[0].focus.x = 0;
- menuMain[0].focus.y = 0;
- menuMain[0].focus.w = 0;
- menuMain[0].focus.h = 0;
- menuMain[0].focus.alpha = 0;
- menuMain[0].focus.type = 0;
-
- menuMain[1].id = 2;//
- menuMain[1].icon.pPic = 0;
- menuMain[1].icon.x = 0;
- menuMain[1].icon.y = 0;
- menuMain[1].icon.w = 0;
- menuMain[1].icon.h = 0;
- menuMain[1].icon.alpha = 0;
- menuMain[1].icon.type = 0;
-
- menuMain[1].str.pStr = "60";
- menuMain[1].str.x = 90;
- menuMain[1].str.y = 20;
- menuMain[1].str.fontASC = FN_ASC8x16;
- menuMain[1].str.fontHZ = FN_ST12;
- menuMain[1].str.alpha = ALPHA_YES;
- menuMain[1].str.type = LCD_Graphic_Draw;
-
- menuMain[1].focus.pPic = 0;
- menuMain[1].focus.x = 0;
- menuMain[1].focus.y = 0;
- menuMain[1].focus.w = 0;
- menuMain[1].focus.h = 0;
- menuMain[1].focus.alpha = 0;
- menuMain[1].focus.type = 0;
-
- menuMain[2].id = 3;//
- menuMain[2].icon.pPic = 0;
- menuMain[2].icon.x = 0;
- menuMain[2].icon.y = 0;
- menuMain[2].icon.w = 0;
- menuMain[2].icon.h = 0;
- menuMain[2].icon.alpha = 0;
- menuMain[2].icon.type = 0;
-
- menuMain[2].str.pStr = "1";
- menuMain[2].str.x = 10;
- menuMain[2].str.y = 50;
- menuMain[2].str.fontASC = FN_ASC8x16;
- menuMain[2].str.fontHZ = FN_ST12;
- menuMain[2].str.alpha = ALPHA_YES;
- menuMain[2].str.type = LCD_Graphic_Draw;
-
- menuMain[2].focus.pPic = 0;
- menuMain[2].focus.x = 0;
- menuMain[2].focus.y = 0;
- menuMain[2].focus.w = 0;
- menuMain[2].focus.h = 0;
- menuMain[2].focus.alpha = 0;
- menuMain[2].focus.type = 0;
-
- menuMain[3].id = 4;//
- menuMain[3].icon.pPic = 0;
- menuMain[3].icon.x = 0;
- menuMain[3].icon.y = 0;
- menuMain[3].icon.w = 0;
- menuMain[3].icon.h = 0;
- menuMain[3].icon.alpha = 0;
- menuMain[3].icon.type = 0;
-
- menuMain[3].str.pStr = "1";
- menuMain[3].str.x = 80;
- menuMain[3].str.y = 50;
- menuMain[3].str.fontASC = FN_ASC8x16;
- menuMain[3].str.fontHZ = FN_ST12;
- menuMain[3].str.alpha = ALPHA_YES;
- menuMain[3].str.type = LCD_Graphic_Draw;
-
- menuMain[3].focus.pPic = 0;
- menuMain[3].focus.x = 0;
- menuMain[3].focus.y = 0;
- menuMain[3].focus.w = 0;
- menuMain[3].focus.h = 0;
- menuMain[3].focus.alpha = 0;
- menuMain[3].focus.type = 0;
- }
- /**************************************************************
- * 函数说明:目录初始化函数 *
- **************************************************************/
- void Menu_Init(void)
- {
- MainMenuInit();
- }
- /**************************************************************
- * 函数说明:目录显示函数 *
- **************************************************************/
- void Menu_Show(void)
- {
- char i;
- struct _Item *disItem;
- short maxItems;
-
- //不在显示范围
- if(pageID>=MAX_PAGE_NUM) return;
-
- //获取item
- disItem = menuPage[pageID].pItem;
-
- //获取item数目
- maxItems = menuPage[pageID].itemNum;
-
- //界面预处理
- if(menuPage[pageID].pFun!=0)
- {
- (*menuPage[pageID].pFun)();
- }
- // MainMenuDisplayInit();
-
- for(i=0;i<maxItems;i++)
- {
- if(disItem[i].icon.pPic!=0)
- {//显示icon
- //void LCD_DisplayPic(const uchar *pPic, uint x0 ,uint y0 , uint w ,uint h,uchar alpha,uchar type);
- LCD_DisplayPic(disItem[i].icon.pPic,disItem[i].icon.x,disItem[i].icon.y,disItem[i].icon.w,disItem[i].icon.h,disItem[i].icon.alpha,disItem[i].icon.type);
- }
- if(disItem[i].str.pStr!=0)
- {//显示字符串
- //void LCD_DisplayStr(const uchar *pStr, uint x0 ,uint y0 , uchar fontASC, uchar fontHZ,uchar alpha,uchar type);
- LCD_DisplayStr(disItem[i].str.pStr,disItem[i].str.x,disItem[i].str.y,disItem[i].str.fontASC,disItem[i].str.fontHZ,disItem[i].str.alpha,disItem[i].str.type);
- }
- if(focusID==disItem[i].id&&disItem[i].focus.pPic!=0)
- {//显示Focus
- //void LCD_DisplayPic(const uchar *pPic, uint x0 ,uint y0 , uint w ,uint h,uchar alpha,uchar type);
- LCD_DisplayPic(disItem[i].focus.pPic,disItem[i].focus.x,disItem[i].focus.y,disItem[i].focus.w,disItem[i].focus.h,disItem[i].focus.alpha,disItem[i].focus.type);
- }
- }
- }
复制代码一周热门 更多>