📄 lcd.c
字号:
#define LCDLIGHT_ON() {DDRG|=0X08;PORTG|=0X08;} //开LCD背光
#define LCDLIGHT_OFF() {DDRG|=0X08;PORTG&=0XF7;} //关LCD背光
#define LCDBCOLOR 0X03 //定义背景色为蓝色
#define LCDFTCOLOR 0X20 //定义字体颜色为黑色
#define LCDFW1COLOR 0XE0 ///定义边框颜色及按钮颜色为红色
#define LCDFW2COLOR 0XE3 //定义不可触摸按钮颜色为紫色
#define LCDFSCOLOR 0XFC //定义选择颜色为黄色
static unsigned char lcd_bcolor@0x8005;
static unsigned char lcd_fcolor@0x8004;
static unsigned char lcd_data@0x8006;
static unsigned char lcd_psw@0x8007;
static unsigned char lcd_xaddrl@0x8000;
static unsigned char lcd_xaddrh@0x8001;
static unsigned char lcd_yaddrl@0x8002;
static unsigned char lcd_yaddrh@0x8003;
eeprom unsigned char erl=1; //功率时间界面通道选择寄存器 1=R 2=L
eeprom unsigned char en=0; //功率时间当前编号
eeprom unsigned char epl[20][5]; //左通道功率值
eeprom unsigned char epr[20][5]; //右通道功率值
eeprom unsigned int etl[20][7]; //左通道时间值
eeprom unsigned int etr[20][7]; //右通道时间值
eeprom unsigned char eyq[20]; //左通道氩气时间
eeprom unsigned char elq[20]; //左通道冷却时间
eeprom unsigned char eks[20][5]; //开始时间
eeprom unsigned char ejs[20][5]; //结束时间
eeprom unsigned long int esc=999; //试用次数
eeprom unsigned char eqy=120; //起升电压
eeprom unsigned long int eyqc=100; //延期次数
eeprom unsigned long int esyc=0; //本机使用次数
eeprom unsigned long int ebbh=11; //软件版本号
eeprom unsigned long int eyqmm; //延期密码
eeprom unsigned long int esymm; //使用密码
eeprom unsigned long int eycmm=123456; //原厂密码
eeprom unsigned long int exgmm=123456;
eeprom unsigned char esymm_en=0;
eeprom unsigned char eksset[5]={1,2,4,8,16};
eeprom unsigned char ejsset[5]={1,2,4,8,16};
eeprom unsigned char esd=2; //单双头标志
unsigned char rn; //数据存储界,提取界面用临时存储序号
unsigned char rset[5]; //控制界面用临时SET值
unsigned char rks[5]; //控制界面用临时开始时间
unsigned char rjs[5]; //控制界面用临时结束时间
unsigned char rks_number; //控制界面设置开始时间用序号
unsigned char rjs_number; //控制界面设置结束时间用序号
unsigned char picture_number; //当前界面编号
unsigned char picture_number_bak; //上次界面编号
unsigned char rt_number; //p/t曲线界面时间设置计数器
unsigned char rp_number; //p/t曲线界面功率设置计数器
unsigned char rp[2]; //功率调整界面用临时存储器
unsigned char rp_count; //功率调整用计数器
unsigned char rp_ad; //功率增加减少标志寄存器
unsigned char rt[3]; //时间调整界面用临时存储器
unsigned char rt_count; //时间调整界面用计数器
unsigned char rkj; //开始时间结束时间选择寄存器
unsigned char rdk[6]; //数字软键盘用临时存储器
unsigned char rdk1[6]; //数字软键盘用临时存储器
unsigned char rdk_count; //数字软键盘用计数器
unsigned char rdk_mcount; //数字软键盘中输入最大个数
unsigned char rdl_number; //登录界面用序号
unsigned char login_timer; //登录用按键超时定时器
unsigned long int rsc; //试用次数
unsigned char rqy; //起升电压
unsigned long int ryqc; //延期次数
unsigned long int rsyc; //本机使用次数
unsigned long int rbbh; //软件版本号
unsigned long int ryqmm; //延期密码
unsigned long int rsymm; //使用密码
unsigned long int rycmm; //原厂密码
unsigned char rsd;
unsigned long int rxgmm;
unsigned char rcc_number;
unsigned char rcc_state;
unsigned char rycmm_en;
unsigned char ryqmm_en;
unsigned char rksset[5],rjsset[5];
unsigned char ksjs;
/***********************************************************************
数字显示程序
***********************************************************************/
unsigned char flash * number(unsigned char a){
unsigned char flash *p;
if(a>=20){
switch(a-20){
case 0:
p=n10_2;
break;
case 1:
p=n1_2;
break;
case 2:
p=n2_2;
break;
case 3:
p=n3_2;
break;
case 4:
p=n4_2;
break;
case 5:
p=n5_2;
break;
case 6:
p=n6_2;
break;
case 7:
p=n7_2;
break;
case 8:
p=n8_2;
break;
case 9:
p=n9_2;
break;
}
}
else{
switch(a){
case 0:
p=n10;
break;
case 1:
p=n1;
break;
case 2:
p=n2;
break;
case 3:
p=n3;
break;
case 4:
p=n4;
break;
case 5:
p=n5;
break;
case 6:
p=n6;
break;
case 7:
p=n7;
break;
case 8:
p=n8;
break;
case 9:
p=n9;
break;
case 10:
p=o7;
break;
case 11:
p=o8;
break;
case 12:
p=o10;
break;
case 13:
p=o11;
break;
}
}
return(p);
}
void com1_draw(unsigned int xstart,unsigned int ystart,unsigned int xstop){
unsigned int i;
lcd_yaddrl=ystart;
lcd_yaddrh=ystart>>8;
lcd_xaddrl=xstart;
lcd_xaddrh=xstart>>8;
for(i=0;i<((xstop-xstart)/8);i++){
lcd_data=0xff;
}
void com2_draw(unsigned int xstart,unsigned int ystart,unsigned int ystop){
unsigned int i;
lcd_yaddrl=start_y;
lcd_yaddrh=(start_y>>8);
lcd_xaddrl=start_x;
lcd_xaddrh=(start_x>>8);
for(i=0;i<(stop_y-start_y);i++){
lcd_data=color;
}
}
void draw(unsigned int start_x,unsigned int start_y,unsigned int stop_x,
unsigned int stop_y,unsigned char color){
unsigned int i,j;
lcd_psw=0x06;
lcd_fcolor=color;
lcd_bcolor=0x00;
com1(start_x,start_y,stop_x);
com1(start_x,start_y+1,stop_x);
com1(start_x,stop_y,stop_x);
com1(start_x,stop_y-1,stop_x);
lcd_psw=8;
com2(start_x,start_y,stop_y);
com2(start_x+1,start_y,stop_y);
com2(start_x,start_y,stop_y);
com2(stop_x,start_y,stop_y);
com2(stop_x-1,start_y,stop_y);
}
/*********************************************************************************
LCD清屏程序
入口参数:
color:LCD清屏颜色
*********************************************************************************/
void lcd_cls(unsigned char color){
unsigned int x,y; //行列计数器
lcd_bcolor=0x00;
lcd_psw=0x06;
lcd_fcolor=color;
for(x=0;x<480;x++){
lcd_yaddrl=x;
lcd_yaddrh=x>>8;
lcd_xaddrl=00;
lcd_xaddrh=00;
y=0;
while(y<100){
lcd_data=0xff;
y++;
}
}
}
/*************************************************************************************
LCD汉字写入程序
入口参数:
xaddr:横向首地址
yaddr:纵向首地址
number:字号,只能是8的倍数,如8代表8×8的点阵
bcolor:字体背景颜色
fcolor:字体前景颜色
word_data:字模数据首地址
*************************************************************************************/
void write_word(unsigned int xaddr, unsigned int yaddr,unsigned int width,unsigned int high,
unsigned char bcolor,unsigned char fcolor,unsigned char flash *word_data){
unsigned int x=0,y=0; //行列计数器
lcd_psw=0x06; //设置写入方式
lcd_bcolor=bcolor; //LCD背景色
lcd_fcolor=fcolor; //LCD前景色
for(y=0;y<high;y++){ //在相应位置写入数据
lcd_yaddrl=y+yaddr;
lcd_yaddrh=(y+yaddr)>>8;
lcd_xaddrl=xaddr;
lcd_xaddrh=(xaddr>>8);
x=0;
while(x<(width/8)){
lcd_data=*word_data; //写入字模数据
word_data++;
x++;
}
}
}
/************************************************************************************
画线程序
入口参数:
start_x:横向起始点,起始时间
stop_x:横向结束点,结束时间
start_y:纵向起始点,开始百分比
stop_y:纵向结束点,结束百分比
注意:start_x-stop_x不能大于正负100,start_y-stop_y不能大于正负100
绘图区域起始坐标:x:152,656 y:36,256
绘图区域:x:500,y:200
************************************************************************************/
void draw_line(unsigned int start_x,unsigned int start_y,unsigned int stop_x,
unsigned int stop_y,unsigned char color){
unsigned int a=0; //X坐标差值
signed int b=0; //Y坐标差值
unsigned int x=0,x1=0,y=0; //临时坐标增量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -