📄 main.c
字号:
//========================================================================
// 工程名称:MCS51_MzLH06_Menu
// 作 者: xinqiang Zhang(小丑) (email: xinqiang@Mzdesign.com.cn)
// 联系方式:QQ 644272644
// 版权所有:北京铭正同创科技有限公司 www.mzdesign.com.cn
// 适应芯片: MCS51 (本例选择AT89S52)
// 编程环境: Keil C51
// 实现功能: MzLH04模块的列表式菜单应用范例,并在各分项菜单中演示MzLH04的功能
//
// 系统要求: PC with CPU 233MHz,128MB RAM,
// Keil uVision3(or later)
// 组成文件:
//
// main.c ----主程序文件
// Key_Service.c ----键盘扫描服务程序
// Key_Service.h----键盘扫描服务程序的头文件
//
// LCD_Dis.c
// LCD_Dis.h
// LCD_Config.h
// ----MzLH06模块的基本驱动程序
// Menu_GUI.c
// Menu_GUI.h
// Menu_GUI_Config.h
// Menu_Resource.c
// ----列表式菜单服务程序源代码,包括资源定义以及菜单配置等
// BaseDraw.c
// BitmapTest.c
// CharShow.c
// NumberDirect.c
// ----各菜单项对应的用户定义功能程序,在此为演示液晶的各项功能
//
//
// 硬件连接:
// LCD CS ---P1.0
// LCD SCK ---P1.2
// LCD SDA ---P1.1
// LCD RST ---P1.3
// 端口定义请参考LCD_Config.h文件中的定义
//
// CPU运行频率11.0592MHz (每个指令为12周期)
//
// 键盘接入请参考该例程的电路示意图
// Key1 ---P0.0
// Key2 ---P0.1
// Key3 ---P0.2
// Key4 ---P0.3
// 键盘的另外一端接地,端口最好接上拉电阻
//
// 本例程仅提供参考,而例程中使用的键盘程序为简单的范例程序,用户可以参考,
// 或者根据自己的需要自行设计更合理的代码。
//
// 当前版本: V1.00
// 日期: 2009-02-19
//
// 参考文件:
// 维护记录:
//-------------------------------------------------------------------
// Version 2009-02-19-V10 Modified By Xinqiang Zhang(小丑)
//
//========================================================================
#include "LCD_Dis.h"
#include "Key_Service.h"
#include "Menu_GUI.h"
extern void BaseDraw(void);
extern void CharShow(void);
extern void BitmapTest(void);
extern void NumberDirect(void);
int main(void)
{
unsigned char uiKey=0;
//uiKey用于存放扫描的键值状态
unsigned char Item_Num,Update_Flag,Enter_Flag=0;
//Item_Num:当前菜单界面当中共有几项菜单项,刷新时使用
//Update_Flag:菜单界面刷新标识
//Enter_Flag:确定键按下标识~~
unsigned char PageItem_Num;
//PageItem_Num:每页(全显示屏内)可以显示多少个菜单项
unsigned char First_Index=0,Active_Index=0,Temp_Index=0;
//First_Index:当前处在显示屏当中的最前面的菜单项序号
//Active_Index:当前指向的菜单项,即当前活动的菜单项
//Temp_Index:中间变量
Key_Initial();
LCD_Init();
SetBackLight(100); //设置背光的亮度等级为0
ClrScreen(); //清屏
FontMode(0,1);
Item_Num = GetMLNum(Menu_List01); //获取要显示的菜单的菜单项个数
PageItem_Num = GetMLiNum_Page(Menu_List01); //获取要显示的菜单的页数
Initial_Menu(Menu_List01);
while(1)
{
KeyScan_Service();
uiKey = Key_Get();
if(uiKey)
{
switch(uiKey) //判断键值进行分支控制界面
{
case 4: //确定键按下
Enter_Flag=1; //enter flag set
break;
case 3: //down 向下键按下
if(Active_Index<Item_Num)
{
Active_Index++;
if(Temp_Index<PageItem_Num-1) Temp_Index++;
else if(First_Index<Item_Num) First_Index++;
Update_Flag = 1;
}
break;
case 1: //up 向上键按下
if(Active_Index>0)
{
Active_Index--;
if(Temp_Index>0) Temp_Index--;
else if(First_Index>0) First_Index--;
Update_Flag = 1;
}
break;
/* case 2: //返回键按下
Exit_flag = 0;//
break;*/
default:break;
}
}
if(Update_Flag) //Update_Flag为1时刷新菜单
{
UpDate_Menu(First_Index,Active_Index,(unsigned char**)Menu_List01);
Update_Flag=0;
}
if(Enter_Flag) //有确定键按下时,则进入相应的功能函数
{
Enter_Flag = 0;
switch(Active_Index)
{
case 0: //这里定义了响应第一项菜单
BaseDraw();
Redraw_Menu(First_Index,Active_Index,Menu_List01);
// Update_Flag = 1;
break;
case 1: //这里定义了响应第二项菜单
CharShow();
Redraw_Menu(First_Index,Active_Index,Menu_List01);
// Update_Flag = 1;
break;
case 2: //这里定义了响应第三项菜单
BitmapTest();
Redraw_Menu(First_Index,Active_Index,Menu_List01);
// Update_Flag = 1;
break;
case 3: //这里定义了响应第四项菜单
NumberDirect();
Redraw_Menu(First_Index,Active_Index,Menu_List01);
// Update_Flag = 1;
break;
case 4: break; //如感兴趣可以自己加进去玩玩
default:break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -