LCD12864自带的指令集里面有反白指令,但很不实用,只能对某一行反白。在制作菜单的时候,往往需要对一些特定的位置进行反白。代码如下,原理是通过异或实现。
/****************LCD12864开始画图****************/
void LCD_startGraphic(void)
{
lcd12864_write_cmd(0x34);
lcd12864_write_cmd(0x36);
}
/****************LCD12864结束画图****************/
void LCD_endGraphic(void)
{
lcd12864_write_cmd(0x36);
lcd12864_write_cmd(0x30);
}
/*******************LCD12864反白函数*******************/
//row : 行号,0-3
//col : 列号,0-7
//charNum: 要反白的字符数量
void LCD_Inverse_16X16(uchar row ,uchar col, unsigned char charNum,unsigned char reverse)
{
unsigned char i, ch;
uchar x = row;
uchar y = col*16;
if(col>1)
{
y=(col-2)*16;
}
LCD_startGraphic();
for (i = 0; i < 16; i++)
{
lcd12864_write_cmd(0x80 + y + i); //垂直地址y
if(col>1)
{
lcd12864_write_cmd(0x88 + x);
}
else
lcd12864_write_cmd(0x80 + x); //水平地址x
for (ch = 0; ch < charNum; ch++)
{
lcd12864_write_data(reverse ? 0xff : 0x00);
lcd12864_write_data(reverse ? 0xff : 0x00);
}
}
LCD_endGraphic();
}