前言:
蓝桥杯嵌入式LCD是必考的一个点,虽然官方已经提供给我们LCD的驱动,但是经过博主实践发现,LCD自带的函数存在一点小瑕疵。比如我使用LCD_DisplayStringLine()函数来显示了10个字符,下一次我又需要在这一行上显示5个字符,那么后面这5个字符不会自动刷新掉,这需要我们去用空格连填补,可这样的工作量就大了起来,所以我就想了个一劳永逸的方法:直接修改LCD驱动。
正篇开始:
我们在LCD的驱动中找到LCD_DisplayStringLine()函数,下面是原有的函数:
void LCD_DisplayStringLine(u8 Line, u8 *ptr)
{
u32 i = 0;
u16 refcolumn = 319;//319;
while ((*ptr != 0) && (i < 20)) // 20
{
LCD_DisplayChar(Line, refcolumn, *ptr);
refcolumn -= 16;
ptr++;
i++;
}
}
我们稍微修改一下:
void LCD_DisplayStringLine(u8 Line, u8 *ptr)
{
u32 i = 0;
u16 refcolumn = 319;//319;
while (i < 20) // 20
{
if(*ptr==0)
{
LCD_DisplayChar(Line, refcolumn, ' ');
}
else
{
LCD_DisplayChar(Line, refcolumn, *ptr);
ptr++;
}
refcolumn -= 16;
i++;
}
}
在行打印的时候,我们其实是在打印字符,而打印字符的停止条件一个是看是否超过了每行的最大限度,也就是20个字符,另一个就是看指针*ptr是否指向了字符串的结尾“\0”。了解了这两点之后,我们让指针指到“\0”的时候继续打印空格,直到打印满20个,这样就不需要我们时时刻刻在自己写的函数里添加空格了,十分方便。