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

📄 test.c

📁 液晶6963模块 240*64,外接PS2键盘,多级菜单.这是我工作中的一个程序,有兴趣的可以看
💻 C
字号:
#include <REG52.h>
#include "T6963.h"
#include "KeyBoard.h"
#define LAST 5
#define NEXT 6
#define FATHER 7
#define CHILD 8
#define UC unsigned char
#define UI unsigned int
#define UL unsigned long
	UC xdata LCD_Num,LCD_Key,LCD_Now;
	UC xdata key;
	UC xdata d_num=0;
	UC xdata d[10];
	UC xdata Clock[7];//格式为: 秒 分 时 日 月 星期 年

void Task0(void)
{	Lcd_Num_Uchar(0,6,0,1);
	while(1)
   	{}
}
void Task1(void)//主屏幕
{ static  UC  Temp_LCD_Num=0;
//五个图标


	noab();
	ClearScreen();
	tx(1,2,0,0); 
	tx(7,2,1,0); 
	tx(13,2,2,0); 
	tx(19,2,3,0); 
	tx(25,2,4,0); 
	switch(Temp_LCD_Num)
	{	case 0:
			tx(1,2,0,1); 
		break;
		case 1:
			tx(7,2,1,1); 
		break;
		case 2:
			tx(13,2,2,1); 
		break;
		case 3:
			tx(19,2,3,1); 
		break;
		case 4:
			tx(25,2,4,1); 
		break;
	}
 	while(1)
    {
	 key=getchar();
//	 key=13;
	 if (key!=0)//按PC键盘开始测试
	   {
		if(key==LEFT)
		{ 	switch(Temp_LCD_Num){
			case 0:
				Temp_LCD_Num=4;
				tx(1,2,0,0); 
				tx(25,2,4,1); 
			break;
			case 1:
				Temp_LCD_Num=0;
				tx(1,2,0,1); 
				tx(7,2,1,0); 
			break;
			case 2:
				Temp_LCD_Num=1;
				tx(7,2,1,1); 
				tx(13,2,2,0); 
			break;
			case 3:
				Temp_LCD_Num=2;
				tx(13,2,2,1); 
				tx(19,2,3,0); 
			break;
			case 4:
				Temp_LCD_Num=3;
				tx(19,2,3,1); 
				tx(25,2,4,0); 
			break;
			}
		}
		else if(key==RIGHT)
		{ 	switch(Temp_LCD_Num){
			case 0:
				Temp_LCD_Num=1;
				tx(1,2,0,0); 
				tx(7,2,1,1); 
			break;
			case 1:
				Temp_LCD_Num=2;
				tx(7,2,1,0); 
				tx(13,2,2,1); 
			break;
			case 2:
				Temp_LCD_Num=3;
				tx(13,2,2,0); 
				tx(19,2,3,1); 
			break;
			case 3:
				Temp_LCD_Num=4;
				tx(19,2,3,0); 
				tx(25,2,4,1); 
			break;
			case 4:
				Temp_LCD_Num=0;
				tx(25,2,4,0); 
				tx(1,2,0,1); 
			break;
			}
		}
		else if(key==ENTER)
			{  LCD_Num=Temp_LCD_Num;
			   LCD_Key=CHILD;
			   return;
			}
   	  }	 
   }
}
void Task2(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,2,1);
	while(1)
   	{	key=getchar();
//	key=20;
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{  //LCD_Num=Temp_LCD_Num;
			   LCD_Key=FATHER;
			   return;
			}
		}
	 }
}


void Task3(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,3,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=ESC;	return;
			}
		}
	 }
}

void Task4(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,4,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		break;
			}
		}
	 }	 
}
void Task5(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,5,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		break;
			}
		}
	 }
}
void Task6(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,6,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}
void Task7(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,7,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		break;
			}
		}
	 }
}
void Task8(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,8,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		break;
			}
		}
	 }
}
void Task9(void)  //设置屏幕
{	static  UC  Temp_LCD_Num=0;	
	//五个图标
	noab();
	ClearScreen();
	xsch(7,0,0,0); 
	Lcd_printf(10,0,"设置系统时钟",0,0);
	xsch(7,4,0,0); 
	Lcd_printf(10,4,"设置机器参数",0,0);
	switch(Temp_LCD_Num){
		case 0:
			xsch(7,0,1,0); 
			Lcd_printf(10,0,"设置系统时钟",0,1);
		break;
		case 1:
			xsch(7,4,1,0); 
			Lcd_printf(10,4,"设置机器参数",0,0);
		break;
		default://出现异常
			xsch(7,0,1,0); 
			Lcd_printf(10,0,"设置系统时钟",0,1);
			Temp_LCD_Num=0;
		break;
		}
	while(1)
    {
	 key=getchar();
	 if (key!=0)//按PC键盘开始测试
	   {
		if(key==UP)
		{ 	switch(Temp_LCD_Num){
			case 0:
				Temp_LCD_Num=2;
				xsch(7,0,0,0); 
				Lcd_printf(10,0,"设置系统时钟",0,0);
				xsch(7,4,1,0); 
				Lcd_printf(10,4,"设置机器参数",0,1);
			break;
			case 1:
				Temp_LCD_Num=0;
				xsch(7,0,1,0); 
				Lcd_printf(10,0,"设置系统时钟",0,1);
				xsch(7,4,0,0); 
				Lcd_printf(10,4,"设置机器参数",0,0);
			break;
			default://出现异常
			 	ClearScreen();
				xsch(7,0,1,0); 
				Lcd_printf(10,0,"设置系统时钟",0,1);
				xsch(7,4,0,0); 
				Lcd_printf(10,4,"设置机器参数",0,0);
				Temp_LCD_Num=0;
			break;
			}
		}
		else if(key==DOWN)
		{ 	switch(Temp_LCD_Num){
			case 0:
				Temp_LCD_Num=1;
				xsch(7,0,0,0); 
				Lcd_printf(10,0,"设置系统时钟",0,0);
				xsch(7,4,1,0); 
				Lcd_printf(10,4,"设置机器参数",0,1);
			break;
			case 1:
				Temp_LCD_Num=0;
				xsch(7,4,0,0); 
				Lcd_printf(10,4,"设置机器参数",0,0);
				xsch(7,0,1,0); 
				Lcd_printf(10,0,"设置系统时钟",0,1);
			break;
 			default://出现异常
			 	ClearScreen();
				xsch(7,0,1,0); 
				Lcd_printf(10,0,"设置系统时钟",0,1);
				xsch(7,4,0,0); 
				Lcd_printf(10,4,"设置机器参数",0,0);
				Temp_LCD_Num=0;
			break;
			}
		}
		else if(key==ENTER)
		{	LCD_Num=Temp_LCD_Num; 
			LCD_Key=CHILD;
			return;
		}
		
	 	else if (key!=0)//按PC键盘开始测试
	   	{	if(key==ESC)
			{	LCD_Key=FATHER;
				return;
			}
		}
	  }
   }
}
void Task10(void)	  //时钟设置
{	noab();
	ClearScreen();
//		UC xdata Clock[7];//格式为: 秒 分 时 日 月 星期 年  
	Lcd_printf(4,0,"年份:",0,1);
	Lcd_Num_Uchar(9,0,Clock[0],2);
	Lcd_printf(4,2,"月份:",0,0);
	Lcd_Num_Uchar(9,2,Clock[0],2);
	Lcd_printf(4,4,"日期:",0,0);
	Lcd_Num_Uchar(9,4,Clock[0],2);
	Lcd_printf(4,6,"星期:",0,0);
	Lcd_Num_Uchar(9,6,Clock[0],2);
	Lcd_printf(17,0,"时钟:",0,0);
	Lcd_Num_Uchar(22,0,Clock[0],2);
	Lcd_printf(17,2,"分钟:",0,0);
	Lcd_Num_Uchar(22,2,Clock[0],2);
	Lcd_printf(17,4,"秒钟:",0,0);
	Lcd_Num_Uchar(22,4,Clock[0],2);
	ab(9,0);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}
void Task11(void)	    //流水单元
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,11,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}void Task12(void)		  //机器参数
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,12,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}void Task13(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,13,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}void Task14(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,14,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{LCD_Key=FATHER;		return;
			}
		}
	 }
}void Task15(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,15,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}void Task16(void)
{		noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,16,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;
				//LCD_Num=FATHER;
				return;

			}
		}
	 }
}
void Task17(void)	    
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,11,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}
void Task18(void)	    
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,11,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Key=FATHER;		return;
			}
		}
	 }
}



void Task19(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,19,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Num=FATHER;		break;
			}
		}
	 }
}void Task20(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,20,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Num=FATHER;		break;
			}
		}
	 }
}void Task21(void)
{	noab();
	ClearScreen();
	Lcd_Num_Uchar(0,6,21,1);
	while(1)
   	{	key=getchar();
	 	if (key!=0)//按PC键盘开始测试
	   	{
 	 		if(key==ESC)
			{	LCD_Num=FATHER;		break;
			}
		}
	 }
}

code void (*LCD[])(void) =
{	Task0,
	Task1,
	Task2,
	Task3,
	Task4,
	Task5,
	Task6,
	Task7,
	Task8,
	Task9,
	Task10,
	Task11,
	Task12,
	Task13,
	Task14,
	Task15,
	Task16,
	Task17,
	Task18,
	Task19,
	Task20,
	Task21,
};
 
// LCD菜单显示数据结构
char code LCD_MSK[22][7]={//新的菜单ID,本屏菜单ID
//0-4是子菜单ID,5是前菜单,6是后菜单,7父菜单
/* Child0;Child1;Child2;Child3;Child4;Last;Next;Father;*/
1,1,1,1,1, 1,1,//0初始化
2,17,16,6,9, 1,1,//1主屏幕
3,3,3,4,3, 2,2,//2
3,3,3,3,3, 3,3,//3
4,4,4,4,4, 4,4,//4
5,5,5,5,5, 5,5,//5
6,6,6,6,6, 6,6,//6
7,7,7,7,7, 7,7,//7
8,8,8,8,8, 8,8,//8
10,11,12,13,9, 9,9,//9设置屏幕
10,10,10,10,10, 10,10,//10时间设置屏幕
11,11,11,11,11, 12,12,//11
12,12,12,12,12, 11,11,//12
13,13,13,13,13, 13,13,//13
14,14,14,14,14, 15,15,//14机器参数设置屏幕A
15,15,15,15,15, 14,14,//15机器参数设置屏幕B
16,16,16,16,16, 16,16,//16
17,18,17,17,17, 17,17,//17
18,18,18,18,18, 18,18,//18
19,19,19,19,19, 19,19,//19
20,20,20,20,20, 20,20,//20文件起名屏幕
21,21,21,21,21, 21,21,//21文件删除屏幕


}; 
void Push_LCD(UC dat)
{	if(d_num<10)
	{	d[d_num]=dat;
		 d_num++;
	}
}   
UC  Pop_LCD(void)
{	UC dat;
	if(d_num>0)
	{	d_num--;
		dat=d[d_num]; 
	}
	return dat;
}
/*************************************
  名称:main
  功能:主函数
  输入参数:无
  输出参数:无
 *************************************/
void main(void) 
{


	init_kb();
	T6963_init();
	noab();

 
	LCD_Now=1;
	(*LCD[LCD_Now])();//调用标准请求

	while(1)
	{  
		if(LCD_Key==CHILD)
		{	Push_LCD(LCD_Now);
			LCD_Now=LCD_MSK[LCD_Now][LCD_Num];
		}
		else if(LCD_Key==FATHER)
		{	
			LCD_Now=Pop_LCD();
		}
		else 
		{	if(LCD_Num<7)
				LCD_Now=LCD_MSK[LCD_Now][LCD_Num];
			else
			  	LCD_Now=LCD_Num;//直接调用菜单ID号
		}


		(*LCD[LCD_Now])();//调用函数


 
	}

}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -