📄 main.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 + -