最近做设计因为要用到菜单显示,由于时间关系没怎么去看而且也看不太懂,所以我利用修改标志位的方式写了一个模拟4级菜单。现在贴出来供大家参考,有什么问题的望大家指正!大家共同进步,谢谢!
/********************************************
宽带放大器-软件实现模块
********************************************/
unsigned char cx = 6,cy = 2;
unsigned long a1 = 0,a2 = 0,a3 = 0,a4 = 0,a5 = 0,a6 = 0,a7 = 0;
unsigned int Enter_Control = 0,wei=0;
unsigned int Gain_number =0;
unsigned int Menu1_Flag = 1;//菜单1的标志位
unsigned int Menu2_Flag = 1;//菜单2的标志位
unsigned int Menu2_Return_Flag = 1;//菜单2 “返回”标志位
unsigned int Menu2_Enter_Flag= 1;//菜单2 “确定”标志位
unsigned int Menu3_Enter_Flag = 1;//菜单3的标志位
//unsigned int Cancel_Return = 1;//取消 返回 功能标志位
/**********************************
module : 主菜单
function: SoftW_LCD_Menu1()
返回值 : 无
功能 : 显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu1()
{
LCD_12864_string(1,2,"宽带放大器");
LCD_12864_string(2,1,"系统增益:");
LCD_12864_string(2,6,"99");
LCD_12864_string(2,8,"dB");
LCD_12864_string(3,1,"输出电压:");
LCD_12864_string(3,6,"33");
LCD_12864_string(3,8,"mV");
LCD_12864_string(4,7,"预设");
}
/*********************************
module : 二级菜单
function: SoftW_LCD_Menu2()
返回值 : 无
功能 : 显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu2()
{
LCD_12864_string(1,2,"增益预置模式");
LCD_12864_string(3,3,"确定继续?");
LCD_12864_string(4,1,"返回");
LCD_12864_string(4,7,"确定");
}
/*********************************
module : 三级菜单
function: SoftW_LCD_Menu3()
返回值 : 无
功能 : 显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu3()
{
LCD_12864_string(1,3,"预置界面");
LCD_12864_string(2,1,"预置增益:");
LCD_12864_string(2,8,"dB");
LCD_12864_string(4,1,"返回");
LCD_12864_string(4,7,"确定");
}
/*********************************
module : 四级菜单
function: SoftW_LCD_Menu4()
返回值 : 无
功能 : 显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu4()
{
LCD_12864_string(2,2,"增益设置完成");
LCD_12864_string(3,3,"请返回!");
LCD_12864_string(4,1,"返回");
}
/*********************************
module : Enter 预置值
function: SoftW_Enter_Gain()
返回值 : 无
功能 : 输入增益预设值,完成设置
**********************************/
void SoftW_Enter_Gain()
{
if(Enter_Control)
{
if(Key_Val > 0 && Key_Val < 11)
{
wei++;
if(Key_Val == 10) Key_Val = 0;
}
switch (wei)
{
case 1: Gain_number += Key_Val*10; break;
case 2: Gain_number += Key_Val; break;
default: break;
}
Key_Val = 0;
if(wei == 0)
LCD_12864_string(3, 6, "^");
else if(wei == 1)
LCD_12864_string(3, 6," ^");
//else if(wei == 2)
//LCD_12864_string(3, 6," ");
//else if(wei == 3)
//LCD_12864_string(3, 3, " ^");
else
wei = 0;
LCD_12864_address_set(cx,cy);
write_data(Gain_number/10 + 0x30);
write_data(Gain_number%10 + 0x30); //个位
}
}
/*********************************
module : 控制增益
function: SoftW_VG()
返回值 : 无
功能 : 增益预置、显示
**********************************/
void Key_SoftW_VG()
{
/**************主页显示**********/
if(Menu1_Flag)
{
SoftW_LCD_Menu1();//显示主界面
Menu1_Flag = 0;//清除标志位,避免一直显示主界面
}
/**********进入二级菜单***********
Control key:16
*********************************/
if(Menu2_Flag)
{
if(Key_Val==16)
{
Key_Val = 0;//关闭键值功能
wei = 0;//清除按键输入增益次数标志
clr_screen(); //清屏
delay();//延时约15ms,避免显示不准确
SoftW_LCD_Menu2();//显示二级菜单
Menu2_Flag = 0;//清除标志位,避免该菜单显示不稳定
Key_Menu2_ValF = 0;//清除菜单2按键中断标志位,为该菜单下的其他操作备用
Menu2_Return_Flag = 1;//为该菜单下的 返回 用
Menu2_Enter_Flag = 1;//为该菜单下的 确定 用
//Cancel_Return = 1;//返回功能正常
}
}
/**********进入三级菜单**********
Control key:16
********************************/
if(!Menu2_Flag&&Key_Menu2_ValF&&Menu2_Enter_Flag)
{
if(Key_Val==16)//进入三级菜单
{
Enter_Control = 1;//按键输入增益控制字开
Key_Val = 0;//关键值功能
wei = 0;//清除按键输入增益次数标志
clr_screen(); //清屏
delay();//延时约15ms,避免显示不准确
SoftW_LCD_Menu3();//显示三级菜单
Key_Menu3_ValF = 0;//清除菜单3按键中断标志位,为该菜单下的其他操作备用
Menu2_Enter_Flag = 0;//清除标志位,避免该菜单显示不稳定
Menu3_Enter_Flag = 1;//为该菜单下的 确定 用
//Cancel_Return = 0;//取消该级菜单的返回功能
}
}
/**********进入四级菜单**********
Control key:16
*********************************/
if(!Menu2_Enter_Flag&&Key_Menu3_ValF&&Menu3_Enter_Flag)
{
if(Key_Val==16)//进入四级菜单
{
Enter_Control = 0;//关按键输入增益控制字
Key_Val = 0;
wei = 0;
clr_screen(); //清屏
delay();//延时约15ms,避免显示不准确
SoftW_LCD_Menu4();
//传输 Gain_number 给外设
Menu3_Enter_Flag = 0;//清除标志位,避免该菜单显示不稳定
Gain_number = 0;
//Cancel_Return = 1;//返回功能正常
}
}
/**********返回主菜单************
Control key:13
*********************************/
if(!Menu2_Flag&&Menu2_Return_Flag/*&&Cancel_Return*/)
{
if(Key_Val==13)//菜单返回主菜单
{
Enter_Control = 0;
wei = 0;
Key_Val = 0;
clr_screen(); //清屏
delay();//延时约15ms,避免显示不准确
SoftW_LCD_Menu1();//回到 主界面
Menu2_Flag = 1;//为主菜单 进入 备用
Menu2_Enter_Flag = 1;//避免菜单2和菜单4的显示乱
Menu3_Enter_Flag = 0;//避免菜单2和菜单4的显示乱
Menu2_Return_Flag = 0;//清除标志位,避免该菜单显示不稳定
}
}
SoftW_Enter_Gain();//键盘输入预设键值
}