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

📄 main.c

📁 液晶程序液晶程序液晶程序液晶程序液晶程序液晶程序
💻 C
字号:
#include<reg52.h>
//宏定义
#define   KEY_ENTER      0x01
#define   KEY_MOVE       0x02
#define   KEY_DOWN       0x03
#define   KEY_UP         0x04
#define   KEY_SET        0x05
#define   KEY_ESC        0x06
//----------------------------------------------------

typedef unsigned char uchar;

//全局变量声明
extern unsigned char xdata KEY_BUF;
extern unsigned char xdata XPOS;//XPOS为0~7
extern unsigned char xdata YPOS;//YPOS为0~127
extern bit FB_FLAG;//反白标志位
//-----------------------------------------------------------------------
//函数声明
extern void	lcm_init();	//键盘初始化
extern void	clearscreen();	//清屏
extern void putchar(unsigned int singlecharnum);//输出一个字符
extern void putstr(unsigned int *STR);
void init_frame(unsigned int *STRTAB[]);

void main_disp();//参数显示
void main_bset();//系统设置
void main_adset();//保护设置
void main_record();//操作日志
void main_order();//电容状态
void main_error();//故障处理

//-----------------------------------------------------------------------

//全局变量定义
unsigned char xdata selenum;//选择的字符串号,16位
unsigned char xdata i;   //第二行显示的字符串号
unsigned char xdata fbchar;  //fbchar为反白字节,4时第一行反白,2时第二行反白,1时最后一行反白
unsigned char xdata TOTALNUM;//该页共有几个选项
//------------------------------------------------------------------------------------------

//字符串定义
unsigned int code CLEAR[] = {0x0000,0x0000,0x0000,0x0000,0x00ff};//清楚故障
unsigned int code STR0maintitle[] = {0x801A,0x801B,0x801C,0x801D,0x00ff};//功能菜单
unsigned int code STR1_disp[]   = {0x0001,0x801E,0x801F,0x8020,0x8021,0x00ff};//1参数显示
unsigned int code STR2_bset[]  = {0x0002,0x8022,0x8023,0x8024,0x8025,0x00ff};//2系统设置
unsigned int code STR3_adset[] = {0x0003,0x800F,0x8026,0x8027,0x8028,0x00ff};//3保护设置
unsigned int code STR4_capastate[]  = {0x0004,0x802D,0x802E,0x8024,0x8025,0x00ff};//4电容状态 
unsigned int code STR5_record[]  = {0x0005,0x8029,0x802A,0x802B,0x802C,0x00ff}; //5操作日志 
unsigned int code STR6_error[] = {0x0006,0x802F,0x8030,0x8031,0x8032,0x00ff}; //6故障查询
unsigned int * code STRMAINTAB[7] = {STR0maintitle,STR1_disp,STR2_bset,STR3_adset,STR4_capastate,STR5_record,STR6_error};
//-------------------------------------------------------------------------------------------------------------

//显示两行
void display2list(unsigned int *STRTABLE[])
{
	bit fblist_1,fblist_2;
	
	if(fbchar==4)
	{
		selenum=1;	//字符串号
		fblist_1=1;
		fblist_2=0;
	}
	else if(fbchar==2)
	{
		selenum=2;
		fblist_1=0;
		fblist_2=1;
	}
	
	XPOS=0;
	YPOS=0;
	FB_FLAG=0;
	putstr(STRTABLE[0]); 
	
	XPOS=2;
	YPOS=0;
	FB_FLAG=fblist_1;
	putstr(STRTABLE[1]);//显示第1行
	
	XPOS=4;
	YPOS=0;
	FB_FLAG=fblist_2;   //显示第2行
	putstr(STRTABLE[2]);
}  
//-------------------------------------------------------------------------
//两行选项上移
/*void list2_key_up_move(unsigned int *STRTAB[])
{
	fbchar=4;
	display2list(STRTAB);
	KEY_BUF=0xff;
}
//--------------------------------------------------------------------------
//两行选项下移
void list2_key_down_move(unsigned int *STRTAB[])
{
	fbchar=2;
	display2list(STRTAB);
	KEY_BUF=0xff;
} 
*///-----------------------------------------------------------------------

//显示一屏的3行,通过改变全局变量fbchar,i有不同的显示效果,并改变全局变量selenum,
void display3list(unsigned int *STRTABLE[])
{
	bit fblist1,fblist2,fblist3;
	
	if(fbchar==4)	//反白第一行
	{
		selenum=i;
		fblist1=1;
		fblist2=0;
		fblist3=0;
	}//通过反白情况,改变全局变量selenum
	else if(fbchar==2)	//反白第二行
	{
		selenum=i+1;
		fblist1=0;
		fblist2=1;
		fblist3=0;
	}
	else if(fbchar==1)	//发白第三行
	{
		selenum=i+2;
		fblist1=0;
		fblist2=0;
		fblist3=1;
	}
	else if(fbchar==0)	//没有反白
	{
		fblist1=0;
		fblist2=0;
		fblist3=0;
	}
	XPOS = 0;
	YPOS = 28;
	FB_FLAG = 0;
	putstr(STRTABLE[0]);//每页第一行为标题
	
	if(i == 1)
	{//第一页,打印向下的箭头
		YPOS = 96;
		putchar(0x0017);//空格
		YPOS += 8;
		putchar(0x0019);//下箭头
	}
	else if(i == (TOTALNUM-2))
	{//最后一页,打印向上的箭头
		YPOS = 96;
		putchar(0x0017);//空格
		YPOS += 8;
		putchar(0x0018);//上箭头
	}
	else
	{//打印向上和向下的箭头
		YPOS = 96;
		putchar(0x0018);
		YPOS += 8;
		putchar(0x0019);
	}
	
	XPOS = 2;
	YPOS = 24;
	FB_FLAG = fblist1;
	putstr(STRTABLE[i]);//显示第二行
	
	XPOS = 4;
	YPOS = 24;
	FB_FLAG = fblist2;
	putstr(STRTABLE[i+1]);//显示第三行
	
	XPOS = 6;
	YPOS = 24;
	FB_FLAG = fblist3;
	putstr(STRTABLE[i+2]);//显示第四行
}
    
//-------------------------------------------------------------
//三行选项上移
void key_up_move(unsigned int *STRTAB[])//按上移键,反白上移,若为第一条则不动,输入:字符串地址列表*STRTAB[]
{
	if(fbchar==4)
	{
		if(i!=1)
		i--;
	}
	else fbchar<<=1;
	display3list(STRTAB);
	KEY_BUF=0xff;
}
//-------------------------------------------------------------------------------------
//三行选项下移
void key_down_move(unsigned int *STRTAB[],unsigned char num)//按下移键,反白下移,若为最后一条则不动,
{
	if(fbchar==1)     //输入:字符串地址列表数组*STRTAB[],选项总数num,
	{
		if(i!=(num-2))
		i++;
	}                      
	else
		fbchar>>=1;
	display3list(STRTAB);
	KEY_BUF=0xff;
}
//-------------------------------------

//按下ENTER键,进入各分支
void key_enter_move()//按enter键,进入各分支
{
	if(selenum==0x01)
		main_disp();//显示
	else if(selenum==0x02)
		main_bset();//基本设置
	else if(selenum==0x03)
//		main_adset();//保护设置
//	else if(selenum==0x04)
//		main_record();//操作日志
//	else if(selenum==0x05)
	{
		KEY_BUF=0xff;
//		main_capastate();
	}//命令
	else if(selenum==0x06)
//		main_error(); //故障处理
	KEY_BUF=0xff;
}
//-------------------------------------

//初始页面,第一屏,反白项第一项
void init_frame(unsigned int *STRTAB[])
{  
	i=1;
	fbchar=4;
	if(TOTALNUM==2)
		display2list(STRTAB);
	else
		display3list(STRTAB);
}

//-----------------------------------------------------------------------------

main()
{
    unsigned char remfbchar,remselenum,mremi,tcounter=0;
    TOTALNUM=6;

	EA = 1;				//开总中断
	EX0 = 1; 			//允许外部中断0中断

	lcm_init();
	clearscreen();

    KEY_BUF = 0xff;
//	i = 1;
//	fbchar = 4;
	init_frame(STRMAINTAB);

	while(1)
	{
		if(KEY_BUF == KEY_UP)
			key_up_move(STRMAINTAB);
		else if(KEY_BUF == KEY_DOWN)
			key_down_move(STRMAINTAB,TOTALNUM);
		else if(KEY_BUF == KEY_ENTER)
		{
			remfbchar=fbchar;
			remselenum=selenum;
			mremi=i;
			key_enter_move();
			TOTALNUM=6;
			selenum=remselenum;
			fbchar=remfbchar;
			i=mremi;
			clearscreen();
			display3list(STRMAINTAB);
		}
		else if(KEY_BUF == KEY_ESC)
		{
//			i = remi;
			init_frame(STRMAINTAB); 
			XPOS=2;
			YPOS=80;
			FB_FLAG=0;
//			putstr(CLEAR);
			KEY_BUF=0xff;
		}
		//can_common();
	}
}

⌨️ 快捷键说明

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