|
#include "menu1.h"
#include "stm32f10x.h"
#include "12864.h"
#include "systick.h"
#include <stdio.h>
#include <stdlib.h>
#include "key4x4.h"
#include "public.h"
/*菜單結(jié)構(gòu)體*/
typedef struct menu
{
u8 range_from,range_to; //當(dāng)前選擇的項(xiàng)開(kāi)始及結(jié)束符號(hào)
u8 itemCount;//項(xiàng)目總數(shù)
u8 selected;//當(dāng)前選擇項(xiàng)
u8 *menuItems[17];//菜單項(xiàng)目
struct menu **subMenus;//子菜單
struct menu *parent;//上級(jí)菜單,若是主菜單則為null
void (**func)();//選擇相應(yīng)按鍵后執(zhí)行的函數(shù)
}Menu;
Menu MainMenu1 = {
0,3,4,0, //默認(rèn)顯示0-3項(xiàng),總共4項(xiàng),當(dāng)前選擇0項(xiàng),
{
"dis1 \x10",//"\x10"表示一個(gè)小箭頭
"dis2 \x10",
"dis3 \x10",
"dis4 \x10",
}
};
Menu dis1Menu = {
0,3,4,0, //默認(rèn)顯示0-3項(xiàng),總共4項(xiàng),當(dāng)前選擇0項(xiàng),
{
"secondline1 \x10",//"\x10"表示一個(gè)小箭頭
"secondline2 \x10",
"secondline3 ",
"secondline4 \x10",
}
};
Menu dis2Menu = {
0,3,4,0, //默認(rèn)顯示0-3項(xiàng),總共4項(xiàng),當(dāng)前選擇0項(xiàng),
{
"secondline1 \x10",//"\x10"表示一個(gè)小箭頭
"secondline2 \x10",
"secondline3 ",
"secondline4 \x10",
}
};
Menu *currentMenu;//當(dāng)前菜單
/*用于顯示菜單*/
void displaymenu(u8 line)
{
int i;
line = 3-(currentMenu->range_to-line);
/*4次循環(huán)打印菜單*/
for(i = 0;i<4;i++)
Display_LCD_String(i,currentMenu->menuItems[i+currentMenu->range_from],5);
con_disp(line,1);
}
void func(void)
{
}
void initmenu(void)
{
currentMenu = &MainMenu1;
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] = NULL;
MainMenu1.func[1] = NULL;
MainMenu1.func[2] = NULL;
MainMenu1.func[3] = NULL;
MainMenu1.parent = NULL;//mainmenu is top menu
dis1Menu.subMenus = malloc(sizeof(&dis1Menu)*4);
dis1Menu.subMenus[0] = NULL;
dis1Menu.subMenus[1] = NULL;
dis1Menu.subMenus[2] = NULL;
dis1Menu.subMenus[3] = NULL;
dis1Menu.func = malloc(sizeof(&func)*4);
dis1Menu.func[0] = NULL;
dis1Menu.func[1] = NULL;
dis1Menu.func[2] = NULL;
dis1Menu.func[3] = NULL;
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);
while(1)
{
if(key_pressed_flag)
{
ReadValue=Key_scan();
if(ReadValue!=0)
{
delay_ms(100);
if(ReadValue == Key_scan())
{
switch(ReadValue)
{
case key_sure://按鍵A(確認(rèn)按鍵)
{
if(currentMenu->subMenus[currentMenu->selected] !=NULL)
{
currentMenu = currentMenu->subMenus[currentMenu->selected];
displaymenu(0);
}
break;
}
case key_up://按鍵B(上一行菜單)
{
if(currentMenu->selected == 0)
break;
else
{
currentMenu->selected--;
if(currentMenu->selected < currentMenu->range_from)
{
currentMenu->range_from = currentMenu->selected;
currentMenu->range_to = currentMenu->range_from+3;
}
displaymenu(currentMenu->selected);
}
break;
}
case key_down://按鍵C(下一行菜單 )
{
if(currentMenu->selected == currentMenu->itemCount-1)
break;
else
{
currentMenu->selected++;
if(currentMenu->selected>currentMenu->range_to)
{
currentMenu->range_to = currentMenu->selected;
currentMenu->range_from = currentMenu->range_to-3;
}
displaymenu(currentMenu->selected);
}
break;
}
case key_back://按鍵D(返回)
{
if(currentMenu->parent!=NULL)
{
currentMenu = currentMenu->parent;
displaymenu(currentMenu->selected);
}
break;
}
default:
break;
}
}
}
}
}
}
|
|