|
我用过OCMJ2X8C,对于单行反白:
如果你使用系统自带的反白命令,你会看到在液晶上反白了两行,这是因为液晶控制器控制跟液晶实际显示是有区别的,你看一下这个液晶显示的控制器资料就能明白,液晶上面的第一、三行在液晶控制器看来只是一行。
可以使用绘图命令来单独实现液晶显示层面上的单行反白,给你个例子:
/**
* 简介:任意行反白/取消反白
*
* @param line 行号(0,1,2,3)
* @param enable为1使能反白,为0取消反白
* @return 无
*/
void con_disp (uint32 _line,uint32 enable)
{
uint8 i,j;
for(j=0;j<16;j++) //每个中文字符占16个点
{
for(i=0;i<8;i++) //8个中文字符宽度,即LCD的一行
{
write_com(0x36); //扩充指令集
write_com(Lcd_Con_X_Y[_line][1]+j);
write_com(Lcd_Con_X_Y[_line][0]+i);
write_com(0x30);
if(enable==1) //使能指定行反白
{
write_data(0xff);
write_data(0xff);
}
else //还原指定反白行
{
write_data(0x00);
write_data(0x00);
}
}
}
write_com(0x36);
write_com(0x30);
}
其中,
uint8 const Lcd_Con_X_Y[4][2]={{0x80,0x80},{0x80,0x90},{0x88,0x80},{0x88,0x90}}; //LCD行反白显示坐标
第二个问题,这个液晶控制器自带的游标只能显示一个中文汉字大小,如果你是16*8的英文字符,要自己设计游标的,也是用绘图命令。
对于英文和数字的显示,我都是用反白来做的
给你个参考代码:
/**
* 简介:任意位置反白/取消反白
*
* 描述:此函数反白/取消反白一块区域(16*8大小),由于lm3033B液晶的控制芯片最小操作对象是16*16区域,所以,对这个最小区域分成左右两半。
* @param x为横坐标, x的取值为(第一行和第二行为0x80~0x87;第三行和第四行为0x88~0x8F)
* @param y为纵坐标, y的取值为(第一行和第三行:0x80;第二行和第四行:0x8F)
* @param direction=1为16*16的右半部,=0为16*16的左半部
* @return 无
*
*/
void con_disp8(uint32 x,uint32 y,uint32 direction)
{
uint8 j;
for(j=0;j<16;j++) //每个中文字符占16个点
{
write_com(0x36); //扩充指令集
write_com(y+j);
write_com(x);
write_com(0x30);
if(direction==1) //16*16区域的右半部反白
{
write_data(0x00);
write_data(0xFF);
}
else // 16*16区域的左半部反白
{
write_data(0xFF);
write_data(0x00);
}
}
write_com(0x36);
write_com(0x30);
} |
|