📄 lcd.c.bak
字号:
/* 作 者:spot */
/* 输 入: */
/* col 图型的起始位置0~121 */
/* layer 图形的位置(Y坐标)0-下半部分 非0-上半部分 */
/* n 所要显示的十进制数字长度 */
/* mode 显示模式,0正显,1反显 */
/* */
/* 输 出:无 */
/* */
/* 历史记录: */
/* spot 2005-06-28 Creat Inital version. (Version 1.0) */
/****************************************************************************/
void disp_ram_data(u_char col,u_char layer,u_char n,u_char mode)
{
while(n--)
{
if (mode)
disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
else
disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
col += 8;
}
}
/****************************************************************************/
/* 函数名:dprintf */
/* 功 能:通用混合字串显示 */
/* 作 者:spot */
/* 输 入: */
/* col 图型的起始位置0~121 */
/* layer 图形的位置(Y坐标)0-下半部分 非0-上半部分 */
/* ptr 显示字串指针 */
/* mode 显示模式,0正显,1反显 */
/* */
/* 输 出:无 */
/* */
/* 历史记录: */
/* spot 2005-06-28 Creat Inital version. (Version 1.0) */
/****************************************************************************/
void dprintf(u_char col,u_char layer,u_char *ptr,u_char mode)
{
u_char c1,c2;
u_char i,j,k;
u_char ulen;
u_char ucol,ulayer;
ulen = 0;
ucol = col;
ulayer = layer;
while (ptr[ulen]!= 0)
{
ulen++; /* 探测字串长度 */
}
i=0;
while (i<ulen)
{
c1 = ptr[i];
c2 = ptr[i+1];
/* ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码 */
if(c1 <=128) /* ASCII */
{
if (mode)
disp_one_ascii(ucol,ulayer,c1,1);
else
disp_one_ascii(ucol,ulayer,c1,0);
ucol+=8;
i++; /* ASCII码的处理 */
}
else /* 中文 */
{
for (j=0; j<sizeof(hz16)/sizeof(hz16[0]); j++)
{ /* 查找定位当前汉字的点阵区 */
if ((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
break;
}
for (k=0; k<32; k++)
{
if (mode)
dot_buffer[k]=~hz16[j].zimo[k];
else
dot_buffer[k]= hz16[j].zimo[k];
}
draw_bmp(ucol,ulayer,16,dot_buffer);
ucol += 16;
i += 2; /* 中文的处理 */
}
}
}
/****************************************************************************/
/* 函数名:num_to_buff */
/* 功 能:将数值转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用 */
/* 作 者:spot */
/* 输 入:num */
/* 输 出:无 */
/* */
/* 历史记录: */
/* spot 2005-06-28 Creat Inital version. (Version 1.0) */
/****************************************************************************/
void num_to_buff(u_int num)
{
u_int i=0;
for (i=0; i<14; i++)
{
disp_buffer[i]=0;
}
for (i=0; i<10; i++)
{
disp_buffer[i] = num%10;
num = num/10;
if (num==0)
break;
}
}
/****************************************************************************/
/* 函数名:bcd_to_buff */
/* 功 能:将BCD码转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用 */
/* 作 者:spot */
/* 输 入:bcd */
/* 输 出:无 */
/* */
/* 历史记录: */
/* spot 2005-08-28 Creat Inital version. (Version 1.0) */
/****************************************************************************/
void bcd_to_buff(u_char bcd)
{
u_int i=0;
for (i=0; i<14; i++)
{
disp_buffer[i]=0;
}
disp_buffer[0] = (bcd & 0x0f);
disp_buffer[1] = ( (bcd & 0xf0) >> 4 );
}
/* 以下函数为固定液晶显示内容函数 */
void show_title(void)
{
lcd_clr();
dprintf(0,0," 欢迎使用 ",0);
dprintf(0,1,"圣通科技报警器 ",0);
}
void show_setmenu_a(void)
{
lcd_clr();
dprintf(0,0,"a设置温度阈值 ",1);
dprintf(0,1,"a设置模入阈值 ",0);
}
void show_setmenu_b(void)
{
lcd_clr();
dprintf(0,0,"a设置温度阈值 ",0);
dprintf(0,1,"a设置模入阈值 ",1);
}
void show_setmenu_c(void)
{
lcd_clr();
dprintf(0,0,"a设置模入阈值 ",0);
dprintf(0,1,"a设置光强阈值 ",1);
}
void show_setmenu_d(void)
{
lcd_clr();
dprintf(0,0,"a设置模入阈值 ",1);
dprintf(0,1,"a设置光强阈值 ",0);
}
/* 显示温度阈值上限设置 */
void show_temp_limit_high(u_char high_limit, u_char low_limit)
{
lcd_clr();
dprintf(0,0," 温度阈值 ",0);
dprintf(8,1,"上限",1);
num_to_buff(high_limit);
disp_ram_data(40,1,2,1);
dprintf(71,1,"下限",0);
num_to_buff(low_limit);
disp_ram_data(103,1,2,0);
}
/* 显示温度阈值下限设置 */
void show_temp_limit_low(u_char high_limit, u_char low_limit)
{
lcd_clr();
dprintf(0,0," 温度阈值 ",0);
dprintf(8,1,"上限",0);
num_to_buff(high_limit);
disp_ram_data(40,1,2,0);
dprintf(71,1,"下限",1);
num_to_buff(low_limit);
disp_ram_data(103,1,2,1);
}
/* 显示模拟量输入阈值上限设置 */
void show_analog_limit_high(u_int high_limit, u_int low_limit)
{
lcd_clr();
dprintf(0,0," 模入阈值 ",0);
dprintf(0,1,"上",1);
num_to_buff(high_limit);
disp_ram_data(16,1,4,1);
dprintf(61,1,"下",0);
num_to_buff(low_limit);
disp_ram_data(77,1,4,0);
}
/* 显示模拟量输入阈值下限设置 */
void show_analog_limit_low(u_int high_limit, u_int low_limit)
{
lcd_clr();
dprintf(0,0," 模入阈值 ",0);
dprintf(0,1,"上",0);
num_to_buff(high_limit);
disp_ram_data(16,1,4,0);
dprintf(61,1,"下",1);
num_to_buff(low_limit);
disp_ram_data(77,1,4,1);
}
/* 显示光强阈值上限设置 */
void show_light_limit_high(u_char high_limit, u_char low_limit)
{
lcd_clr();
dprintf(0,0," 湿度阈值 ",0);
dprintf(8,1,"上限",1);
num_to_buff(high_limit);
disp_ram_data(40,1,2,1);
dprintf(71,1,"下限",0);
num_to_buff(low_limit);
disp_ram_data(103,1,2,0);
}
/* 显示光强阈值下限设置 */
void show_light_limit_low(u_char high_limit, u_char low_limit)
{
lcd_clr();
dprintf(0,0," 湿度阈值 ",0);
dprintf(8,1,"上限",0);
num_to_buff(high_limit);
disp_ram_data(40,1,2,0);
dprintf(71,1,"下限",1);
num_to_buff(low_limit);
disp_ram_data(103,1,2,1);
}
/* 显示继电器开状态 */
void show_relay_on(void)
{
lcd_clr();
dprintf(0,0," 继电器 开 ",0);
}
/* 显示继电器关状态 */
void show_relay_off(void)
{
lcd_clr();
dprintf(0,0," 继电器 关 ",0);
}
/* 显示模拟量输出值 */
void show_analog_out(u_int analog_data)
{
lcd_clr();
dprintf(16,0,"模拟量输出",0);
num_to_buff(analog_data);
disp_ram_data(32,1,4,0);
}
/* 显示当前温度、光强、模拟量输入、开关量输入 */
void show_current_environment(u_char temp, u_char lumin, u_int analog_in, bit switch_in)
{
lcd_clr();
dprintf(0,0,"温度",0);
num_to_buff(temp);
disp_ram_data(32,0,2,0); /* 在lcd第一行左半部分显示温度 */
dprintf(64,0,"光强",0);
num_to_buff(lumin);
disp_ram_data(96,0,2,0); /* 在lcd第一行右半部分显示光强 */
dprintf(0,1,"模入",0);
num_to_buff(analog_in);
disp_ram_data(32,1,4,0); /* 在lcd第二行左半部分显示模拟量输入 */
dprintf(64,1,"开入",0);
if (switch_in)
dprintf(104,1,"1",0);
else
dprintf(104,1,"0",0); /* 在lcd第二行右半部分显示开关量输入 */
}
/* 显示当前时间 */
void show_time(void)
{
lcd_clr();
bcd_to_buff(date[0]);
disp_ram_data(0,0,2,0);
dprintf(16,0,"年",0);
bcd_to_buff(date[1]);
disp_ram_data(40,0,2,0);
dprintf(56,0,"月",0);
bcd_to_buff(date[2]);
disp_ram_data(80,0,2,0);
dprintf(96,0,"日",0);
bcd_to_buff(date[4]);
disp_ram_data(0,1,2,0);
dprintf(16,1,"时",0);
bcd_to_buff(date[5]);
disp_ram_data(40,1,2,0);
dprintf(56,1,"分",0);
bcd_to_buff(date[6]);
disp_ram_data(80,1,2,0);
dprintf(96,1,"秒",0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -