📄 mbm12864lcd 090430.c
字号:
else {lcd_pro_BACKLIGHT=1;LCD_BACKLIGHT=1;}
if((indata_buf[4]==0)&&(lcd_pro_REVERSE!=0))
{lcd_pro_REVERSE=0;write_lcd_ordor(LCD_DISPLAY_REV_NOR);}
if((indata_buf[4]!=0)&&(lcd_pro_REVERSE==0))
{lcd_pro_REVERSE=1;write_lcd_ordor(LCD_DISPLAY_REV_REV);}
}
}
else
if((indata_buf[0]=='W')&&(indata_buf[1]<=WIN_NO_MAX))
{
windows_show_no=indata_buf[1];
display_renew_Flag=1;
}
display_data_renew_flag=0;
}
}
//******************************************************
//显示程序
//根据显示数据刷新显示屏
//******************************************************
void display_prom()
{
if(display_renew_Flag==1)
{
display_renew_Flag==0;
time_redisplay=TIME_5sVAL;
}
}
//******************************************************
//LCD指令写入
//******************************************************
void write_lcd_ordor(unsigned char data)
{
LCD_DATA_PORT=data;
LCD_RW=0;
LCD_RS=0;
LCD_E=1;
asm("NOP");
LCD_E=0;
}
//******************************************************
//LCD显示数据写入
//******************************************************
void write_lcd_data(unsigned char data)
{
LCD_DATA_PORT=data;
LCD_RW=0;
LCD_RS=1;
LCD_E=1;
asm("NOP");asm("NOP");asm("NOP");
LCD_E=0;
}
//******************************************************
//LCD显示数据读出:读出两次如果不相等重读,以保证读出数据可靠性
//******************************************************
unsigned char read_lcd_data(void)
{
char i1,i2;
TRISD=0b11111111; //设置D口为输入
LCD_DATA_PORT==0x00; //将输出口写入0xff
asm("NOP");asm("NOP");asm("NOP");
do{
LCD_RW=1;
LCD_RS=1;
LCD_E=1;
asm("NOP");asm("NOP");asm("NOP");
i1=LCD_DATA_PORT;
asm("NOP");
LCD_E=0;
asm("NOP");asm("NOP");asm("NOP");
LCD_RW=1;
LCD_RS=1;
LCD_E=1;
asm("NOP");asm("NOP");asm("NOP");
i2=LCD_DATA_PORT;
asm("NOP");
LCD_E=0;
}
while(i1!=i2);
TRISD=0b00000000; //设置D口为输出
asm("NOP");asm("NOP");asm("NOP");
return(i1);
}
//******************************************************
//设置LCD当前列地址
//******************************************************
void set_lcd_column(unsigned char column_address)
{
//宏泰液晶屏 起始显示地址为1 有别其他显示屏,为保持与其他液晶屏兼容,列地址+1
//程序编制时列仍然0--127
column_address++;
LCD_DATA_PORT=(((column_address>>4)&0x0f)|0x10);
LCD_RW=0;
LCD_RS=0;
LCD_E=1;
asm("NOP");
LCD_E=0;
asm("NOP");
LCD_DATA_PORT=(column_address&0x0f);
LCD_RW=0;
LCD_RS=0;
LCD_E=1;
asm("NOP");
LCD_E=0;
}
//******************************************************
//设置LCD当前页地址
//******************************************************
void set_lcd_page(unsigned char page_address)
{
LCD_DATA_PORT=((page_address&0x0f)|0xb0);
asm("NOP");
LCD_RW=0;
LCD_RS=0;
LCD_E=1;
asm("NOP");
LCD_E=0;
}
//******************************************************
//在当前位置写入单个字符(数字或符号)
//char s为符号或数字的ASCI2码
//例如:putchar('c');putchar('1');putchar(NOP);输出空
// putchar(12);输出第X符号
//注意写1 应该putchar('1');而不是putchar(1);
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void putchar(unsigned char s)
{
char i;
const char *p;
p=fuhao_ku;
p=p+2*HZFH_MOD*(s);
set_lcd_page(lcd_page-1);
for(i=0;i<HZFH_MOD;i++)
{
if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
else write_lcd_data((*p++)^0xff);
}
set_lcd_page(lcd_page);
set_lcd_column(lcd_column);
for(i=0;i<HZFH_MOD;i++)
{
if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
else write_lcd_data((*p++)^0x1f);
}
lcd_column=(lcd_column+HZFH_MOD);
}
//******************************************************
//在当前位置写入半个符号
//char s为符号的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void putHALFchar(unsigned char s)
{
char i;
const char *p;
p=half_fuhao_ku;
p=p+HZFH_MOD*(s);
set_lcd_page(lcd_page);
set_lcd_column(lcd_column);
for(i=0;i<HZFH_MOD;i++)
{
if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
else write_lcd_data((*p++)^0x1f);
}
lcd_column=(lcd_column+HZFH_MOD);
}
//******************************************************
//在X Y位置写入一个字符串(数字符号)字符串以\0空符号结束
//符号库中ASCI2码偏移位置与标准 0-0x20为自定义符号
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void outtextxy(unsigned char column_address,unsigned char page_address,unsigned char *s)
{
char i;
const char *p;
do
{
p=fuhao_ku;
p=p+2*HZFH_MOD*(*s++);
set_lcd_page(page_address-1);
set_lcd_column(column_address);
for(i=0;i<HZFH_MOD;i++)
{
if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
else write_lcd_data((*p++)^0xff);
}
set_lcd_page(page_address);
set_lcd_column(column_address);
for(i=0;i<HZFH_MOD;i++)
{
if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
else write_lcd_data((*p++)^0x1f);
}
column_address=(column_address+HZFH_MOD);
}
while(*s!='\0');
lcd_page=page_address;lcd_column=column_address+HZFH_MOD;
}
//******************************************************
//在当前位置写入一个汉字
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void putHZtext(unsigned char s)
{
char i;
const char *p;
p=hzk_ku;
p=p+4*HZFH_MOD*s;
set_lcd_page(lcd_page-1);
set_lcd_column(lcd_column);
for(i=0;i<(2*HZFH_MOD);i++)
{
if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
else write_lcd_data((*p++)^0xff);
}
set_lcd_page(lcd_page);
set_lcd_column(lcd_column);
for(i=0;i<=(2*HZFH_MOD);i++)
{
if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
else write_lcd_data((*p++)^0x1f);
}
lcd_column=(lcd_column+2*HZFH_MOD);
}
//******************************************************
//在x y位置写入一个2字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out2HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2);
}
//******************************************************
//在x y位置写入一个3字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out3HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3);
}
//******************************************************
//在x y位置写入一个4字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out4HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
}
//******************************************************
//在x y位置写入一个5字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out5HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
unsigned char s5)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
putHZtext(s5);
}
//******************************************************
//在x y位置写入一个6字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out6HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
unsigned char s5,unsigned char s6)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
putHZtext(s5); putHZtext(s6);
}
//******************************************************
//在x y位置写入一个7字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out7HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
unsigned char s5,unsigned char s6,unsigned char s7)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
putHZtext(s5); putHZtext(s6);putHZtext(s7);
}
//******************************************************
//在x y位置写入一个8字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out8HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
unsigned char s5,unsigned char s6,unsigned char s7,unsigned char s8)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
putHZtext(s5); putHZtext(s6);putHZtext(s7); putHZtext(s8);
}
//******************************************************
//在x y位置写入一个9字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out9HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
unsigned char s5,unsigned char s6,unsigned char s7,unsigned char s8,
unsigned char s9)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
putHZtext(s5); putHZtext(s6);putHZtext(s7); putHZtext(s8); putHZtext(s9);
}
//******************************************************
//在x y位置写入一个10字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out10HZtextxy(unsigned char column_address,unsigned char page_address,
unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
unsigned char s5,unsigned char s6,unsigned char s7,unsigned char s8,
unsigned char s9,unsigned char s10)
{
lcd_page=page_address;lcd_column=column_address;
putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
putHZtext(s5); putHZtext(s6);putHZtext(s7); putHZtext(s8);
putHZtext(s9); putHZtext(s10);
}
//******************************************************
//在x y位置写入百分数指示条
//char bar_length指示条长度, char percent 百分数
//||||||||||||||
//-------------86%-------------
//||||||||||||||
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void draw_bar_xy(unsigned char column_address,unsigned char page_address,
unsigned char bar_length,unsigned char percent)
{
char i,j,zimo_temp;
char s[4]; //100%
const char *p;
sprintf(s,"%3d%%",percent);
//sprintf(s,"%3d.%2d%%",(percent/100),(percent-100*(percent/100)));
//if((percent-100*(percent/100))<10) str[4]='0';
lcd_page=page_address;
lcd_column=column_address;
set_lcd_page(lcd_page);
set_lcd_column(lcd_column);
percent=(char)((int)bar_length*percent/100);//折算
if(percent>bar_length) percent=bar_length;
for(i=0;i<bar_length;i++)
{
if(i<percent) write_lcd_data(0x1f);
else write_lcd_data(0x00);
}
set_lcd_page(lcd_page-1);
set_lcd_column(lcd_column);
for(i=0;i<bar_length;i++)
{
if(i<percent)
{
if((i>(column_address+bar_length/2-7*HZFH_MOD))&&(i<(column_address+bar_length/2-3*HZFH_MOD))) write_lcd_data(0xff);
else write_lcd_data(0xbf);
}
else
{
if((i>(column_address+bar_length/2-7*HZFH_MOD))&&(i<(column_address+bar_length/2-3*HZFH_MOD))) write_lcd_data(0x00);
else write_lcd_data(0x40);
}
}
write_lcd_ordor(LCD_MODIFL_READ_ON);
lcd_page=(page_address);
lcd_column=(column_address+bar_length/2-3*HZFH_MOD);
for(j=0;j<4;j++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -