STM32-蓝桥杯嵌入式LCD字符颜色、高亮显示
在做第九届省赛电子定时器的时候,里面有一个要求是高亮显示某个字符,然后就研究了一下如何进行字符颜色更改和高亮。
一、重要函数介绍
首先,我们要特别注意下面这两个函数:
void LCD_SetTextColor(vu16 Color); // 设置字体颜色
void LCD_SetBackColor(vu16 Color); // 设置背景颜色
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);
void LCD_SetTextColor(vu16 Color);
这个函数只有一个参数,就是颜色,他起到的作用就是设置字体颜色。但是作用效果仅对后面的显示有效。下面举一个例子:
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line1 ," HELLO WORLD! ");
LCD_SetTextColor(Red);
LCD_DisplayStringLine(Line2 ," HELLO CT117E! ");
首先设置了字体颜色是白色,然后在Line1显示了" HELLO WORLD! “,这后面显示的字符都是白色。
然后又将字体颜色设置为红色,然后在Line2显示了” HELLO CT117E! “,这后面显示的字符都是红色,但是并不会对之前显示了” HELLO WORLD! "产生影响,仍然是白色,所以只对后面的生效。
-
void LCD_SetBackColor(vu16 Color);
和上面的函数一样,参数一样,也是只对后面的生效,区别在于这个函数是设置的背景颜色,这里就不举例了。 -
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);
这个函数有三个参数。
第一个参数是行选择。
第二个参数是列选择。由于官方没有给出每一列的宏定义,所以需要我们自己推一下。这里列选择需要了解一下我们这个lcd的分辨率。在官方给的参考资料里面介绍了分辨率是240RGBx320,我们知道我们的lcd一共分为10行,20列,所以一个字符的高实际上是24*16,所以我们可以看到lcd.h宏定义里面每一行之间的差值就是24,那么每一列之间的差值就是16啦,实际上表示一列的时候是反着来的,320表示第一列,320-16表示第二列,那么320-(16 * i)表示第i列。
第三个参数就是我们需要显示的字符了。下面举一个例子:
LCD_DisplayChar(Line4,(320 - (16 * 5)),'*');
// 作用:在Line4,第5列显示字符'*'
二、高亮显示字符
假设我们要在某一行显示一行字符串,指定某个字符高亮,可以用下面的代码:
思路:不是目标字符的时候正常显示,当我们要高亮显示某一个字符的时候,就将背景颜色更改为高亮颜色,然后再显示这个字符,最后我们还要背景颜色改回原本的颜色,以避免影响后面的显示。
void highlight(uint8_t *str,uint8_t pos)
{
int i = 0;
for(i = 0; i <= 19; i++)
{
if(i != pos)
LCD_DisplayChar(Line4,(320 - (16 * i)),str[i]);
}
LCD_SetBackColor(Yellow);
LCD_DisplayChar(Line4,(320 - (16 * pos)),str[pos]);
LCD_SetBackColor(Blue);
}
三、更改字体颜色.
和上面的例子一样,仅仅是把背景颜色改为字体颜色就行了。
void highlight(uint8_t *str,uint8_t pos)
{
int i = 0;
for(i = 0; i <= 19; i++)
{
if(i != pos)
LCD_DisplayChar(Line4,(320 - (16 * i)),str[i]);
}
LCD_SetTextColor(Yellow);
LCD_DisplayChar(Line4,(320 - (16 * pos)),str[pos]);
LCD_SetTextColor(Blue);
}