C51编程:菜单
请班主和各位大侠给看一下下面的程序,我不明白它的道理,请给指点一下.谢谢
#define uchar unsigned char
#define MenuId_DateTime 0
#define MenuId_Option 1
#define MenuId_Pwd 2
#define MenuId_SerialNum 3
#define MenuId_SetDate 4
#define MenuId_SetTime 5
#define MenuId_QueryDate 6
#define MenuId_SetAddr 7
#define MenuId_Transmit 8
#define MenuId_SetWeek 9
#define MenuId_QueryWeek 10
#define MenuId_SetBaud 11
#define MenuId_QueryBaud 12
#define MenuId_SetSerial 13
#define MenuId_QuerySerial 14
#define MenuId_QueryRecNum 15
#define MenuId_AddBlk 16
#define MenuId_DelBlk 17
#define MenuId_QueryAddr 18
#define MenuId_RevData 19
#define MenuId_Data 20
#define MenuId_SetStatus 21
#define MenuId_SetInOut 22
#define MenuId_SetPwd 23
#define MenuId_SetEsd 24
#define MenuId_GetSupper 25
#define MenuId_ClrSet 26
#define MenuId_RamChk 27
#define MenuId_Inter 28
#define ADD_KEY 10 //+ butten
#define MINUS_KEY 11 //- butten
#define UP_KEY 12 //up butten
#define DOWN_KEY 13 //down butten
#define PWD_KEY 14 //POWER
#define ENTER_KEY 15 //ENTER KEY
struct menu{
struct menu flash *parent;
struct menu flash *child;
uchar hide;
uchar pos;
uchar MenuLenght;
uchar MenuId;
uchar str_len;
uchar menu_str[16];
};
struct menu flash menu_datetime[];
struct menu flash menu_mod[];
struct menu flash menu_serialnum[];
struct menu flash menu_transmit[];
struct menu flash menu_data[];
struct menu flash menu_inter[];
uchar menu_exe()
{
struct menu flash *mp;
uchar flash *str;
uchar menu_len,position;
mp = main_menu;
position = 0;
while(1){
menu_len = mp->MenuLenght;
str = mp->menu_str;
DISTY=1;
clr_all();
NUM = mp->str_len;
FIR_COL =61-NUM*16/2;
dis_str(str);
while(!(keyb()))
switch(key_val){
case UP_KEY:
if(position == (menu_len-1)){
position = 0;
mp -= menu_len-1;
}else{
mp++;
position++;
}
break;
case DOWN_KEY:
if(position == 0){
position = menu_len-1;
mp += menu_len-1;
}else{
mp--;
position--;
}
break;
case ENTER_KEY:
if(mp->child == NULL)
return mp->MenuId;
mp = mp->child;
position = 0;
break;
case ESC_KEY:
if(mp->parent == NULL)
return 0xff;
mp = mp->parent;
position = mp->pos;
break;
default:
break;
}
}
}
发表时间:2002年4月8日22:05:00