/*--------------------------------------------------------------*/
//菜单配置
#define Menu_Mode 1 //菜单显示模式
// =0 //箭头
// =1 //反色
#define Menu_roll_repeat 0 //是否重复滚动
// =0 //不重复
// =1 //重复
#include "NF800_config.h"
/*--------------------------------------------------------------*/
//按键功能键宏定义
#define UP 0xf7 //P3_3
#define Down 0xfb //P3_2
#define Left 0x01
#define Right 0x02
#define Esc 0xdf //P3_5
#define Enter 0xef //P3_4
#define ADD 0x03
#define DEC 0x04
extern unsigned char *RL_MenuIndex(unsigned char Index,unsigned char *SS,unsigned char rw);
/*--------------------------------------------------------------*/
//调用子函数区
void NullSubs(void)
{
}
void TimeSet(void)
{
Lcd_clr_scr();
Disp_String(0, 2, " TimeSet over!");
}
void DateSet(void)
{
Lcd_clr_scr();
Disp_String(1, 2, " DateSet over!");
}
void AlertSet (void)
{
Lcd_clr_scr();
Disp_String(2, 2, "AlertSet over!");
}
void LED1 (void)
{
// P1_7 = ~P1_7;
}
void LED2 (void)
{
// P1_6 = ~P1_6;
}
void LED3 (void)
{
// P1_5 = ~P1_5;
}
void LED4 (void)
{
// P1 = ~P1;
}
void delay50ms(void)
{
unsigned char i,j,k;
for(i=165;i>0;i--)
for(j=60;j>0;j--)
for(k=1;k>0;k--);
}
void about(void)
{
unsigned char i, j;
Lcd_clr_scr();
/*
i = 0; j = 0;
while(i < 101) //ASCII字符测试
{
LCD_printc(j & 0x07, i & 0x0f, i + 32);
delay50ms(); i++;
if(!(i % 16)) j++;
} */
Disp_String(7, 2, "www.Alexi2008.com");
// while(P3 == 0xff);
// LCD_clr_scr(ASCR); //液晶清屏
}
void help(void)
{
Lcd_clr_scr();
Disp_String(0, 0, "In this demo,you can");
Disp_String(1, 0, "press arrow key to mo");
Disp_String(2, 0, "ve the arrow or black");
Disp_String(3, 0, "to the right position");
Disp_String(4, 0, "and then press the En");
Disp_String(5, 0, "ter key to perform th");
Disp_String(6, 0, "e related function.");
Disp_String(7, 2, "^_^ [come on] ^_^");
// while(P3 == 0xff);
// LCD_clr_scr(ASCR); //液晶清屏
}
void info(void)
{
Lcd_clr_scr();
Disp_String(2, 2, "Nokia 5500 Sport");
Disp_String(3, 7, "V 04.60");
Disp_String(4, 6, "14-09-07");
Disp_String(5, 7, "RM-86");
// delay50ms();delay50ms();
// while(P3 == 0xff);
// LCD_clr_scr(ASCR); //液晶清屏
}
#define PTSetMenuCount 3
unsigned char *PT[4] = { "35KV","10KV"," 6KV"};
//MenuPointX[0].DisplayString = RL_MenuStrAdd(MenuPointX[0].DisplayString,1);整体改变
unsigned char *RL_MenuStrAdd(unsigned char *S_PT,unsigned char Add_Direct)
{
unsigned char C_PT,N=0;
unsigned char *CC_temp,*CS_temp;
for(C_PT=0;C_PT<PTSetMenuCount;C_PT++)
{
for(CC_temp=PT[C_PT],CS_temp=S_PT;*CC_temp & *S_PT;CC_temp++,CS_temp++)
{
if(*S_PT != *CC_temp)
break;
}
if(CS_temp-S_PT == CC_temp-PT[C_PT] & ((CS_temp-S_PT) != 0))
break;
}
if(Add_Direct)
{
if((C_PT>=0) & (C_PT+1<PTSetMenuCount))
{
printf("Low:%c%c%c%c\r\n",*PT[C_PT+1],*(PT[C_PT+1]+1),*(PT[C_PT+1]+2),*(PT[C_PT+1]+3));
return(PT[C_PT+1]);
}
else if((C_PT+1==PTSetMenuCount) | (C_PT==PTSetMenuCount))
{
printf("Big:%c%c%c%c\r\n",*PT[0],*(PT[0]+1),*(PT[0]+2),*(PT[0]+3));
return(PT[0]);
}
}
else
{
if((C_PT>0) & (C_PT<=PTSetMenuCount))
{
return(PT[C_PT-1]);
}
else if((C_PT==0) | (C_PT-1==0))
return(PT[PTSetMenuCount-1]);
}
}
unsigned char SSBuffer[10];
/* MenuPointX[0].DisplayString = RL_MenuCharAdd(MenuPointX[0].DisplayString,1,1);
MenuPointX[0].DisplayString = RL_MenuCharAdd(MenuPointX[0].DisplayString,2,1);
MenuPointX[0].DisplayString = RL_MenuCharAdd(MenuPointX[0].DisplayString,3,1);
MenuPointX[0].DisplayString = RL_MenuCharAdd(MenuPointX[0].DisplayString,5,1);
MenuPointX[0].DisplayString = RL_MenuCharAdd(MenuPointX[0].DisplayString,6,1);
MenuPointX[0].DisplayString = RL_MenuCharAdd(MenuPointX[0].DisplayString,7,1);*/
unsigned char *RL_MenuCharAdd(unsigned char *S_ADD,unsigned char Add_Bit,unsigned char Add_Direct)
{
unsigned char *C_ADD;
unsigned char NN;
C_ADD = S_ADD;
for(NN=0;*C_ADD;NN++,C_ADD++)
SSBuffer[NN] = *C_ADD;
for(;NN<10;NN++)
SSBuffer[NN] = 0;
C_ADD = S_ADD;
for(NN=0;*C_ADD;C_ADD++,NN++)
{
if(C_ADD-S_ADD == Add_Bit-1)
{
if(Add_Direct)
{
if(SSBuffer[NN]+1>57)
{
SSBuffer[NN] = 48;
}
else SSBuffer[NN]++;
printf("ININININ\r\n");
}
else
{
if(SSBuffer[NN]-1<48)
SSBuffer[NN] = 57;
else SSBuffer[NN]--;
}
}
}
C_ADD = SSBuffer;
return(C_ADD);
}
/*--------------------------------------------------------------*/
//宏参数定义
#define Null 0
/*--------------------------------------------------------------*/
//目录结构体定义
struct MenuItem
{
// 当前层节点数
unsigned char MenuCount;
// 菜单标题
unsigned char *DisplayString;
// 节点函数(“左/右”菜单项中做“确定”功能调用函数)
void (*Subs)();
// “左/右”菜单子节点
struct MenuItemRL *ChildrenMenuRL;
// 子节点(“左/右”菜单项中做反色显示判断用)
struct MenuItem *ChildrenMenus;
// 父节点(“左/右”菜单项中做“确定”功能调用菜单)
struct MenuItem *ParentMenus;
};
struct MenuItemRL
{
// 当前层节点数
unsigned char MenuCount;
// 菜单标题
unsigned char *DisplayString;
// 节点函数(“左/右”菜单项中做“确定”功能调用函数)
void (*Subs)();
// 反色显示方式判断
unsigned char Reverse;
struct MenuItem *ParentMenus;
// 显示内容索引号
unsigned char MenuIndex;
};
/*--------------------------------------------------------------*/
//结构体区
struct MenuItem TimeMenu[];
struct MenuItem GalleryMenu[];
struct MenuItem OrganiserMenu[];
struct MenuItem MediaMenu[];
struct MenuItem LedMenu[];
struct MenuItem SMSMenu[];
struct MenuItem OWNMenu[];
struct MenuItem MainMenu[];
/*--------------------------------------------------------------*/
//结构体成员
/* 菜单编写规则:
所有 主菜单项、子菜单项结构上均等同,子菜单通过父菜单的嵌套实现,
“上”、“下”功能键菜单为“左”、“右”功能键菜单的父菜单,“上
下”功能菜单对应菜单结构体中的“ChildrenMenus”成员变量,“左右”
功能菜单对应菜单结构体中的“ChildrenMenusRL”成员变量。对于“左
右”功能菜单有如下规定:
菜单显示开始于父菜单(即“上下”功能键菜单项)末,父菜单长度为偶
数个字节,补空格对齐,父菜单中“ChildrenMenusRL”成员变量不能为空,
可为除Null外的任何菜单类型变量。子菜单的显示按功能要求分为整体反白
显示和单个字符反白显示,功能选择有子菜单的“ChildrenMenusRL”成员
变量决定,当其为空时选择整体反白显示,不为空时选择按字符反白显示,
字符长度由子菜单中“MenuCount”成员变量定义,长度需与实际显示字符
数一致。
*/
#define TimeSetMenuCount 6
struct MenuItemRL TimeSetMenu[]=
{
{TimeSetMenuCount, "W12kkl", NullSubs, 1, MainMenu ,4},
};
#define DateSetMenuCount 6
struct MenuItemRL DateSetMenu[]=
{//MenuCount, DisplayString, Subs, ChildrenMenus, ParentMenus
{DateSetMenuCount, "ThisTe", NullSubs, Null, MainMenu ,110},
};
#define AlertSetMenuCount 7
struct MenuItemRL AlertSetMenu[]=
{//MenuCount, DisplayString, Subs, ChildrenMenus, ParentMenus
{AlertSetMenuCount, "YKBBCGM", NullSubs, 1, MainMenu ,9},
};
#define TimeMenuCount 4
struct MenuItem TimeMenu[]=
{//MenuCount, DisplayString, Subs, ChildrenMenus, ParentMenus
{TimeMenuCount, "1.TSet: ", NullSubs, TimeSetMenu, Null, MainMenu},
{TimeMenuCount, "2.DateSetMN: ", NullSubs, DateSetMenu, Null, MainMenu},
{TimeMenuCount, "3.AlertSet: ", NullSubs, AlertSetMenu, Null, MainMenu},
{TimeMenuCount, "4.Back ", NullSubs, Null, MainMenu, MainMenu},
{TimeMenuCount, "______ ", NullSubs, Null, Null, Null},
};
#define OWNMenuCount 14
struct MenuItem OWNMenu[]=
{//MenuCount, DisplayString, Subs, Chi