|
发表于 2006-10-27 18:15:03
|
显示全部楼层
不好意思,程序忘记贴了,补上
#include <lcd.h>
#include "Global.h"
/****************************************************
* 支持库说明:提供了使用菜单的基本数据结构 *
* 作者: 傻孩子 *
* 日期: 2005年6月9日 *
****************************************************/
const char Mt=5;
struct MenuItem MainMenu[4];
struct MenuItem TimeMenu[4];
struct MenuItem VoiceMenu[5];
struct MenuItem RobotMenu[7];
struct MenuItem FlashMenu[5];
struct MenuItem TH_FlashMenu[4];
void NullSubs(void)
{
;
}
void state1Subs(void)
{
state=1;
}
//====================================
//结构体实现
const char tFm0[]=" Flash Record1 ";
const char tFm1[]=" Play1 ";
const char tFm2[]=" Pause1 ";
const char tFm3[]=" Flash Delete1 ";
struct MenuItem TH_FlashMenu[4]=
{
{4,tFm0,NullSubs,&Null,FlashMenu},
{4,tFm1,NullSubs,&Null,FlashMenu},
{4,tFm2,NullSubs,&Null,FlashMenu},
{4,tFm3,NullSubs,&Null,FlashMenu},
};
/**************************************************************
* 函数说明:Flash处理目录初始化函数 struct MenuItem FlashMenu[5]; *
**************************************************************/
const char Fm0[]=" Flash Record ";
const char Fm1[]=" Play ";
const char Fm2[]=" Pause ";
const char Fm3[]=" Flash Delete ";
const char Fm4[]=" Back ";
struct MenuItem FlashMenu[5]=
{
{5,Fm0,NullSubs,&Null,MainMenu},
{5,Fm1,state1Subs,&Null,MainMenu},
{5,Fm2,NullSubs,&Null,MainMenu},
{5,Fm3,NullSubs,TH_FlashMenu,MainMenu},
{5,Fm4,NullSubs,MainMenu,MainMenu},
};
/**************************************************************
* 函数说明:机器人控制目录初始化函数 struct MenuItem RobotMenu[5]; *
**************************************************************/
const char Rm0[]=" Turn Left ";
const char Rm1[]=" Turn Right ";
const char Rm2[]=" Go Ahead ";
const char Rm3[]=" Go Back ";
const char Rm4[]=" Back1 ";
const char Rm5[]=" Back2 ";
const char Rm6[]=" Back3 ";
struct MenuItem RobotMenu[]=
{
{7,Rm0,NullSubs,&Null,MainMenu},
{7,Rm1,NullSubs,&Null,MainMenu},
{7,Rm2,NullSubs,&Null,MainMenu},
{7,Rm3,NullSubs,&Null,MainMenu},
{7,Rm4,NullSubs,MainMenu,MainMenu},
{7,Rm5,NullSubs,&Null,MainMenu},
{7,Rm6,NullSubs,MainMenu,MainMenu},
};
/**************************************************************
声音处理目录初始化函数 struct MenuItem VoiceMenu[5]; *
**************************************************************/
const char Vm0[]=" Voice Record ";
const char Vm1[]=" Play ";
const char Vm2[]=" Pause ";
const char Vm3[]=" Voice Delete ";
const char Vm4[]=" Back ";
struct MenuItem VoiceMenu[5]=
{
{5,Vm0,NullSubs,&Null,MainMenu},
{5,Vm1,NullSubs,&Null,MainMenu},
{5,Vm2,NullSubs,&Null,MainMenu},
{5,Vm3,NullSubs,&Null,MainMenu},
{5,Vm4,NullSubs,MainMenu,MainMenu},
};
/**************************************************************
* 时间设定子目录初始化 struct MenuItem TimeMenu[4]; *
**************************************************************/
const char Tm0[]=" Time Set ";
const char Tm1[]=" Date Set ";
const char Tm2[]=" AlertSet ";
const char Tm3[]=" Back ";
struct MenuItem TimeMenu[4]=
{
{4,Tm0,NullSubs,&Null,MainMenu},
{4,Tm1,NullSubs,&Null,MainMenu},
{4,Tm2,NullSubs,&Null,MainMenu},
{4,Tm3,NullSubs,MainMenu,MainMenu},
};
/**************************************************************
* 根目录初始化 struct MenuItem MainMenu[3]; *
**************************************************************/
const char Mm0[]=" Time Set ";
const char Mm1[]=" Voice Center ";
const char Mm2[]=" Flash Option ";
const char Mm3[]=" Robot Option ";
struct MenuItem MainMenu[4]=
{
{4,Mm0,NullSubs,TimeMenu,&Null},
{4,Mm1,NullSubs,VoiceMenu,&Null},
{4,Mm2,NullSubs,FlashMenu,&Null},
{4,Mm3,NullSubs,RobotMenu,&Null},
};
/****************************************************
* 使用说明: *
* 要定义一个菜单,需要做以下几步工作 *
* 1、定义一个结构体数组 *
* 2、如果这个菜单是子菜单,那么把上级菜单的 *
* *ChildrenMenus指针指向该数组的首地址, *
* 并且设置ParentMenus为上层目录的地址 *
* 3、如果这个菜单是跟菜单,那么直接将MenuPoint *
* 指针指向该数组的首地址 *
* 4、通过写一个函数为该数组的每一个元素初始化 *
* 5、如果菜单项是最终选项,那么将*ChildrenMenus*
* 置为NULL,将函数指针*Subs指向实现功能的 *
* 函数。 *
****************************************************/
/***********************
* 按键功能键宏定义 *
***********************/
#define UP 0
#define Down 4
#define Enter 5
#define Esc 1
#define Reset 2
/***********************
* 全局变量声明区 *
***********************/
//struct MenuItem (*MenuPoint) = MainMenu;
struct MenuItem *MenuPoint;
//(*MenuPoint) = MainMenu;
// signed char UserChoose = 0;
// char DisplayPoint = 0;
// char MaxItems;
/***********************
* 函 数 声 明 区 *
***********************/
void ShowMenu(void);
unsigned char GetKeyNum(void);
void LOCATE(unsigned char Str_y,unsigned char Str_x);
void PRINTg(const char *Strings);
/**************************************************************
* 函数说明:目录显示函数 *
**************************************************************/
void ShowMenu(void)
{
unsigned char n = 0;
MaxItems = MenuPoint[0].MenuCount;
DisplayPoint = DisplayStart;
if (MaxItems >= 4)
{
for (n = 0;n<4;n++)
{
//LOCATE(n+1,1);
//PRINTg(MenuPoint[DisplayPoint].DisplayString);
LCD_displaystrings_12_24_F(MenuPoint[DisplayPoint].DisplayString,n*24,0);
if ((DisplayPoint) == UserChoose)
{
// BOX(1,n*16+1,126,(n+1)*16-2,1,1);
;
LCD_L0_DrawBox(0 ,n*24,239 ,(n+1)*24-1,1);
}
DisplayPoint +=1;
if ((DisplayPoint) == (MaxItems))
{
DisplayPoint = 0;
}
}
}
else
{
for (n = 0;n<MaxItems;n++)
{
LOCATE(n+1,1);
//PRINTg(MenuPoint[DisplayPoint].DisplayString);
LCD_displaystrings_12_24_F(MenuPoint[DisplayPoint].DisplayString,n*24,0);
if ((DisplayPoint) == UserChoose)
{
// BOX(1,n*16+1,126,(n+1)*16-2,1,1);
;
LCD_L0_DrawBox(0 ,n*24,239 ,(n+1)*24-1,1);
}
DisplayPoint +=1;
if ((DisplayPoint) == (MaxItems))
{
DisplayPoint = 0;
}
}
}
//BOX(0,0,127,63,2,2);
}
/**************************************************************
* 函数说明:获得键值函数 *
**************************************************************/
unsigned char GetKeyNum(void)
{
unsigned char TempKeyNum = 0;
TempKeyNum = 0; //获取按键值
return TempKeyNum;
}
/***********************************************************
* 函数说明:字符串定位函数 *
* 输入:字符串文本坐标(1:4 1:16) *
***********************************************************/
void LOCATE(unsigned char Str_y,unsigned char Str_x)
{
;
}
/***********************************************************
* 函数说明:字符串显示函数 *
* 输入:要显示的字符串 *
***********************************************************/
void PRINTg(const char *Strings)
{
;
}
附:Gloabl.h
#ifdef main_GLOBALS
#define main_EXT
#else
#define main_EXT extern
#endif
/**********************
* 目录结构体定义 *
**********************/
struct MenuItem
{
char MenuCount;
const char *DisplayString;
void (*Subs)();
struct MenuItem *ChildrenMenus;
struct MenuItem *ParentMenus;
};
main_EXT unsigned char display;
main_EXT unsigned char chinese;
main_EXT signed long adc_value;
main_EXT unsigned char strtemp[10];
main_EXT unsigned char zuobiao_x;
main_EXT unsigned char zuobiao_y;
extern struct MenuItem (*MenuPoint);
extern struct MenuItem MainMenu[4];
extern struct MenuItem TimeMenu[4];
extern struct MenuItem VoiceMenu[5];
extern struct MenuItem RobotMenu[7];
extern struct MenuItem FlashMenu[5];
extern struct MenuItem TH_FlashMenu[4];
main_EXT signed char UserChoose;
main_EXT char DisplayStart;
main_EXT char DisplayPoint;
main_EXT char MaxItems;
extern struct MenuItem MainMenu[4];
//main_EXT struct MenuItem (*MenuPoint);
main_EXT struct MenuItem Null;
/*
main_EXT struct MenuItem VoiceMenu;
struct MenuItem VoiceMenu[5]=
{
{5,Vm0,NullSubs,&Null,MainMenu},
{5,Vm1,NullSubs,&Null,MainMenu},
{5,Vm2,NullSubs,&Null,MainMenu},
{5,Vm2,NullSubs,&Null,MainMenu},
{5,Vm4,NullSubs,MainMenu,MainMenu},
}; */
///键盘
main_EXT signed char state;
main_EXT signed char key_age;
main_EXT signed char key_code;
main_EXT signed char key_ok;
main_EXT signed char key_lx;
main_EXT signed char eninput_fast;
///// |
|