#include "menu.h"
#include "stm32f10x.h"
#include "12864.h"
#include "systick.h"
#include
#include
#include "gongnenganjian.h"
#include "biaozhi.h"
#include "changwenshui.h"
#include "qipaoshui.h"
#include "bingshuianjian.h"
#include "bsp_usart1.h"
extern int queding,shezhimoshi,fanhui,xiangxia,xiangshang;
/*²Ëµ¥½á¹¹Ìå*/
typedef struct menu
{
u8 range_from,range_to; //µ±Ç°Ñ¡ÔñµÄÏʼ¼°½áÊø·ûºÅ
u8 itemCount;//ÏîÄ¿×ÜÊý
u8 selected;//µ±Ç°Ñ¡ÔñÏî
u8 menuItems[17];//²Ëµ¥ÏîÄ¿
struct menu **subMenus;//×Ӳ˵¥
struct menu *parent;//Éϼ¶²Ëµ¥£¬ÈôÊÇÖ÷²Ëµ¥ÔòΪnull
void (*func)();//Ñ¡ÔñÏàÓ¦°´¼üºóÖ´Ðеĺ¯Êý
}Menu;
Menu kaiji = {
0,3,4,0,
{
"¡¡¡¡ÆøÅÝË®»ú ",
"¡¡¡¡±¨¾¯£ºÎÞ ",
" ",
" ",
}
};
Menu MainMenu1 = {
0,3,4,0, //ĬÈÏÏÔʾ0-3Ï×ܹ²4Ïµ±Ç°Ñ¡Ôñ0Ï
{
"ģʽѡÔñ \x10",//"\x10"±íʾһ¸öС¼ýÍ·
"ѧϰģʽ \x10",
"ÆøÅÝË® \x10",
"ģʽÉèÖà \x10",
}
};
//ģʽѡÔñÄ£¿éÄÚÈÝÏÔʾ
Menu dis1Menu = {
0,2,3,0, //ĬÈÏÏÔʾ0-3Ï×ܹ²4Ïµ±Ç°Ñ¡Ôñ0Ï
{
"¡¡¡¡Ä£Ê½Ñ¡Ôñ¡¡¡¡",
"ÆøÅÝË®¡¡¡¡¡¡¡¡¡¡",//±íʾһ¸öС¼ýÍ·
"±ùË®¡¡¡¡¡¡¡¡¡¡¡¡¡¡",
"³£ÎÂË®¡¡¡¡¡¡¡¡¡¡",
}
};
Menu dis2Menu = {
0,3,4,0, //ĬÈÏÏÔʾ0-3Ï×ܹ²4Ïµ±Ç°Ñ¡Ôñ0Ï
{
"secondline1 \x10",//"\x10"±íʾһ¸öС¼ýÍ·
"secondline2 \x10",
"secondline3 ",
"secondline4 \x10",
}
};
Menu kaijiMenu; //¿ª»ú»Ãæ
Menu *currentMenu;//µ±Ç°²Ëµ¥
/ÓÃÓÚÏÔʾ²Ëµ¥*/
void displaymenu(u8 line)
{
int i;
line = 3-(currentMenu->range_to-line);
/*4´ÎÑ»·´òÓ¡²Ëµ¥*/
for(i = 0;i
Display_LCD_String(i,currentMenu->menuItems[i+currentMenu->range_from],5);
con_disp(line,1);
}
void displaykaiji(u8 line)
{
int k;
line = 3-(kaijiMenu->range_to-line);
/*4´ÎÑ»·´òÓ¡²Ëµ¥*/
for(k = 0;k
Display_LCD_String(k,kaijiMenu->menuItems[k+kaijiMenu->range_from],5);
con_disp(line,0);
}
void func(void)
{
printf("\r\n ----µçƽ±ä»¯-1--\r\n");
}
void initmenu(void)
{
kaijiMenu = &kaiji;
currentMenu = &MainMenu1;
kaiji.subMenus = malloc(sizeof(&kaiji)*4);
kaiji.subMenus[0] = &dis1Menu;
kaiji.subMenus[1] = &dis2Menu;
kaiji.subMenus[2] = NULL;
kaiji.subMenus[3] = NULL;
MainMenu1.subMenus = malloc(sizeof(&MainMenu1)*4);
MainMenu1.subMenus[0] = &dis1Menu;
MainMenu1.subMenus[1] = &dis2Menu;
MainMenu1.subMenus[2] = NULL;
MainMenu1.subMenus[3] = NULL;
MainMenu1.func = malloc(sizeof(&func)*4);
MainMenu1.func[0] = &func;
MainMenu1.func[1] = &func;
MainMenu1.func[2] = &func;
MainMenu1.func[3] = &func;
MainMenu1.parent = NULL;//mainmenu is top menu
//ģʽģ¿é¹¦ÄÜʵÏÖ
dis1Menu.subMenus = malloc(sizeof(&dis1Menu)*4);
dis1Menu.subMenus[0] = &dis1Menu;
dis1Menu.subMenus[1] = &dis1Menu;
dis1Menu.subMenus[2] = NULL;
dis1Menu.subMenus[3] = NULL;
dis1Menu.func = malloc(sizeof(&func)*4);
dis1Menu.func[0] = &func;
dis1Menu.func[1] = &func;
dis1Menu.func[2] = &func;
dis1Menu.func[3] = &func;
dis1Menu.parent = &MainMenu1;//dis1menu parent menu is mainmenu1
dis2Menu.subMenus = malloc(sizeof(&dis1Menu)*4);
dis2Menu.subMenus[0] = NULL;
dis2Menu.subMenus[1] = NULL;
dis2Menu.subMenus[2] = NULL;
dis2Menu.subMenus[3] = NULL;
dis2Menu.func = malloc(sizeof(&func)*4);
dis2Menu.func[0] = NULL;
dis2Menu.func[1] = NULL;
dis2Menu.func[2] = NULL;
dis2Menu.func[3] = NULL;
dis2Menu.parent = &MainMenu1;//dis2menu parent menu is mainmenu1
}
void menutest(void)
{
initmenu();
displaymenu(currentMenu->selected);
}
void chushi_menu(void)
{
initmenu();
displaykaiji(kaijiMenu->selected);
}
void caidan_queding(void)
{
if((queding==1)&&(shezhimoshi==1))
{
if(currentMenu->subMenus[currentMenu->selected] !=NULL)
{
currentMenu = currentMenu->subMenus[currentMenu->selected];
displaymenu(0);
queding=0;
printf("\r\n ----È·¶¨---\r\n");
}
}
}
void caidan_xuanze(void)
{
if((fanhui==1)&&(shezhimoshi==1))
{
if(currentMenu->parent!=NULL)
{
currentMenu = currentMenu->parent;
displaymenu(currentMenu->selected);
fanhui=0;
printf("\r\n ---·µ»Ø---\r\n");
}
}
}
void caidan_xiangxia(void)
{
if((xiangxia==1)&&(shezhimoshi==1))
{
if(currentMenu->selected == currentMenu->itemCount-1)
xiangxia=0;
else
{
currentMenu->selected++;
if(currentMenu->selected>currentMenu->range_to)
{
currentMenu->range_to = currentMenu->selected;
currentMenu->range_from = currentMenu->range_to-3;
}
displaymenu(currentMenu->selected);
xiangxia=0;
printf("\r\n ----ÏçÏÂ---\r\n");
}
}
}
void caidan_xiangshang(void)
{
if((xiangshang==1)&&(shezhimoshi==1))
{
if(currentMenu->selected == 0)
xiangshang=0;
else
{
currentMenu->selected--;
if(currentMenu->selected < currentMenu->range_from)
{
currentMenu->range_from = currentMenu->selected;
currentMenu->range_to = currentMenu->range_from+3;
}
displaymenu(currentMenu->selected);
}
xiangshang=0;
}
}