📄 main.c
字号:
//========================================================================
// 工程名称:Menu_MzLH01_MCS51.spj
// 作 者: xinqiang Zhang(小丑) (email: xinqiang@Mzdesign.com.cn)
// 联系方式:QQ 644272644
// 版权所有:北京铭正同创科技有限公司 www.mzdesign.com.cn
// 适应芯片: S51/S52/MCS51兼容MCU
// 实现功能: 以MzL02-12864 带LCD显示模块为显示平台的MzMenu_GUI软件包
// 的演示程序
//
// 系统要求: PC with CPU 233MHz,128MB RAM,
// Keil uVision 2.0及以上版本
//
// 涉及的库:(a)
//
// 组成文件:
// main.c ----主程序文件
// Driver/LCD_Driver/ ----LCD驱动程序
// Driver/Key_Service/ ----键盘扫描程序
// MzMenu_GUI/ ----MzMenu_GUI的软件包源码
//
// 硬件连接:
// LCD DB0~DB7 ---P0.0~P0.7
// LCD EP ---P2.4
// LCD RW ---P2.3
// LCD A0 ---P2.2
// LCD Reset ---P2.1
// LCD CS ---P2.0
// LCM 3.3V供电~~~(建议)
//
// Key1 接P2.0
// Key2 接P2.1
// Key3 接P2.2
// 键盘的公共端接地,接键盘的端口接上拉电阻
//
//
// 当前版本: V1.0
// 日期: 2007-07-26
//
// 参考文件:
// 维护记录:
//-------------------------------------------------------------------
// Version 2007-07-26-V10 Modified By Xinqiang Zhang(小丑)
//
//========================================================================
#include "./Driver/LCD_Driver/LCD_Dis.h"
#include "./Driver/Key_Service/Key.h"
#include "./MzMenu_GUI/Menu_GUI.h"
void Show_DotTest(void);
void Show_LineTest(void);
void Show_RectanglTest(void);
void Show_HelpTest(void);
void CharTest_Menu(void);
void Show_CharTest(void);
void Show_StringTest(void);
void Show_ChTest(void);
//========================================================================
// 文件名: main.c
// 作 者: xinqiang Zhang(小丑) (email: xinqiang@Mzdesign.com.cn)
// 日 期: 2007/07/26
// 描 述: 以MzLH01-12864 带汉字库LCD显示模块为显示平台的MzMenu_GUI软件包
// 的演示程序
//
// 参 考: 无
// 版 本:
// 2007/07/26 First version Mz Design
//========================================================================
void main(void)
{
//add your code here
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(); //初始化LCD
Item_Num = GetMLNum(Menu_List01); //获取要显示的菜单的菜单项个数
PageItem_Num = GetMLiNum_Page((unsigned char **)Menu_List01); //获取要显示的菜单的页数
Initial_Menu((unsigned char**)Menu_List01);
while(1)
{
uiKey = Key_Get(); //获取键值
if(uiKey) //如有键按下则响应
{
switch(uiKey) //判断键值进行分支控制界面
{
case 3: //确定键按下
Enter_Flag=1; //enter flag set
break;
case 2: //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;
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: //这里仅定义了可以响应第一项菜单
Show_DotTest();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List01);
Update_Flag = 1;
break;
case 1:
Show_LineTest();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List01);
Update_Flag = 1;
break; //如感兴趣可以自己加进去玩玩
case 2:
Show_RectanglTest();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List01);
Update_Flag = 1;
break;
case 3:
CharTest_Menu();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List01);
Update_Flag = 1;
break;
case 4:
Show_HelpTest();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List01);
Update_Flag = 1;
break;
case 5: break;
default:break;
}
}
KeyScan_Service(); //键盘扫描的服务程序,最好在1KHz的定时/时基中断调用
}
}
//绘点菜单项响应函数
void Show_DotTest(void)
{
unsigned int Key=0;
unsigned Exit_flag=1;
ClrScreen(0); //清屏
SetPaintMode(0,1); //设置绘图模式及前景色
PutPixel(0,0); //绘制点
PutPixel(2,0);
PutPixel(4,0);
PutPixel(6,0);
PutPixel(8,0);
PutPixel(9,0);
PutPixel(10,0);
PutPixel(0,2);
PutPixel(0,4);
PutPixel(0,6);
PutPixel(0,8);
PutPixel(0,10);
while(Exit_flag)
{
Key = Key_Get();
if(Key!=0)
Exit_flag = 0; //任意键按下则返回
KeyScan_Service();
}
}
//绘直线菜单项响应函数
void Show_LineTest(void)
{
unsigned int Key=0;
unsigned Exit_flag=1;
ClrScreen(0); //清屏
SetPaintMode(0,1); //设置绘图模式及前景色
Line(127,63,0,63); //绘制一条直线
Line(10,12,10,42);
while(Exit_flag)
{
Key = Key_Get();
if(Key!=0)
Exit_flag = 0; //任意键按下时,退出返回
KeyScan_Service();
}
}
//绘矩形菜单项响应函数
void Show_RectanglTest(void)
{
unsigned int Key=0;
unsigned Exit_flag=1;
ClrScreen(0); //清屏
SetPaintMode(0,1); //设置绘图模式及前景色
Rectangle(12,12,42,42,1); //矩形填充
Rectangle(52,12,82,42,0); //绘制矩形框
while(Exit_flag)
{
Key = Key_Get();
if(Key!=0)
Exit_flag = 0; //任意键按下时,退出返回
KeyScan_Service();
}
}
//帮助菜单项响应函数
void Show_HelpTest(void)
{
unsigned int Key=0;
unsigned Exit_flag=1;
ClrScreen(0); //清屏
SetPaintMode(0,1); //设置绘图模式及前景色
FontSet(1,1); //设置字体类形,字符色为1
PutString(5,10,"Wellcome to MzDesign!!"); //显示字符串
PutString(5,50,"www.mzdesign.com.cn");
Line(4,60,120,60); //绘制一条直线
while(Exit_flag)
{
Key = Key_Get();
if(Key!=0)
Exit_flag = 0; //任意键按下时,退出返回
KeyScan_Service();
}
}
//字符演示菜单项响应函数
void CharTest_Menu(void)
{
//add your code here
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:中间变量
unsigned char Exit_flag = 1;
Item_Num = GetMLNum(Menu_List02); //获取要显示的菜单的菜单项个数
PageItem_Num = GetMLiNum_Page((unsigned char **)Menu_List02); //获取要显示的菜单的页数
Initial_Menu((unsigned char**)Menu_List02);
while(1)
{
uiKey = Key_Get(); //获取键值
if(uiKey) //如有键按下则响应
{
switch(uiKey) //判断键值进行分支控制界面
{
case 3: //确定键按下
Enter_Flag=1; //enter flag set
break;
case 2: //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;
default:break;
}
}
if(Update_Flag) //Update_Flag为1时刷新菜单
{
UpDate_Menu(First_Index,Active_Index,(unsigned char**)Menu_List02);
Update_Flag=0;
}
if(Enter_Flag) //有确定键按下时,则进入相应的功能函数
{
Enter_Flag = 0;
switch(Active_Index)
{
case 0: //这里仅定义了可以响应第一项菜单
Show_CharTest();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List02);
Update_Flag = 1;
break;
case 1:
Show_StringTest();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List02);
Update_Flag = 1;
break; //如感兴趣可以自己加进去玩玩
case 2:
Show_ChTest();
Redraw_Menu(First_Index,Active_Index,(unsigned char**)Menu_List02);
Update_Flag = 1;
break;
case 3: Exit_flag = 0;break;
default:break;
}
}
KeyScan_Service(); //键盘扫描的服务程序,最好在1KHz的定时/时基中断调用
}
}
//二级菜单中,单个西文字符菜单项响应函数
void Show_CharTest(void)
{
unsigned int Key=0;
unsigned Exit_flag=1;
ClrScreen(0); //清屏
SetPaintMode(0,1); //设置绘图模式及前景色
Rectangle(64,0,127,63,1); //半边绘制填充的矩形
FontSet(1,1); //设置字体类形,字符色为1
PutChar(10,10,'A'); //显示字符
PutChar(10,40,'8'); //显示字符
FontSet(1,0); //设置字体类形,字符色为0
PutChar(80,10,'A'); //显示字符
PutChar(80,40,'8'); //显示字符
while(Exit_flag)
{
Key = Key_Get();
if(Key!=0)
Exit_flag = 0; //任意键按下时,退出返回
KeyScan_Service();
}
}
//二级菜单中,西文字符串菜单项响应函数
void Show_StringTest(void)
{
unsigned int Key=0;
unsigned Exit_flag=1;
ClrScreen(0); //清屏
SetPaintMode(0,1); //设置绘图模式及前景色
FontSet(1,1); //设置字体类形,字符色为1
PutString(5,10,"Wellcome to MzDesign!!"); //显示字符串
PutString(5,50,"www.mzdesign.com.cn");
Line(4,60,120,60); //绘制一条直线
while(Exit_flag)
{
Key = Key_Get();
if(Key!=0)
Exit_flag = 0; //任意键按下时,退出返回
KeyScan_Service();
}
}
//二级菜单中,中文字符菜单项响应函数
void Show_ChTest(void)
{
unsigned int Key=0;
unsigned Exit_flag=1;
ClrScreen(0); //清屏
SetPaintMode(0,1); //设置绘图模式及前景色
FontSet(2,1); //设置字体类形,字符色为1
PutChar(10,20,0); //显示汉字 铭
PutChar(30,20,1); //显示汉字 正
PutChar(50,20,2); //显示汉字 同
PutChar(70,20,3); //显示汉字 创
while(Exit_flag)
{
Key = Key_Get();
if(Key!=0)
Exit_flag = 0; //任意键按下时,退出返回
KeyScan_Service();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -