⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 本代码实现的是12864图形LCD模块
💻 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 + -