TFTLCD上显示汉字的相关准备工作:
1、硬件平台:STM32开发板、TFTLCD显示模块
2、代码编辑、编译:Keil uVision4
3、程序下载方法:使用“mcuisp”,利用串口助手将程序下载到开发板
4、取模工具:TFTLCD显示汉字需要用到的取模软件如下图
5、硬件电路设计:
LCD_LED
对应 PC10;
对应 PC10;
LCD_CS 对应 PC9;
LCD _RS 对应 PC8;
LCD _WR 对应 PC7;
LCD _RD 对应 PC6;
LCD _D[17:1]
对应 PB[15:0];
在这里只列出了硬件原理图,在显示汉字的时候会用到前面章节学习到的内容TFTLCD显示。这里只讲解汉字显示方法。接下来介绍与汉字显示相关的函数。
//画点
//x,y:坐标
//POINT_COLOR:此点的颜色
void LCD_DrawPoint(u16 x,u16 y)
{
LCD_SetCursor(x,y);
//设置光标位置
LCD_WriteRAM_Prepare();
//开始写入GRAM
LCD->LCD_RAM=POINT_COLOR;
}
//在LCD上的(x,y)处画点
//color:点的颜色
void LCD_Draw_Point(u16 x,u16 y,u16 color)
{
u16 temp;
temp=POINT_COLOR;
POINT_COLOR=color;
LCD_DrawPoint(x,y);
POINT_COLOR=temp;
}
//在指定位置 显示1个16*16的汉字
//(x,y):汉字显示的位置
//index:tfont数组里面的第几个汉字
//color:这个汉字的颜色
//
void LCD_Show_CH_Font16(u16 x,u16 y,u8 index,u16 color)
{
u8 temp,t,t1;
u16 y0=y;
for(t=0;t<32;t++)//每个16*16的汉字点阵 有32个字节
{
if(t<16)temp=tfont16[index*2][t]; //前16个字节
else temp=tfont16[index*2+1][t-16]; //后16个字节
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Draw_Point(x,y,color);//画实心点
else LCD_Draw_Point(x,y,BACK_COLOR); //画空白点(使用背景色)
temp<<=1;
y++;
if((y-y0)==16)
{
y=y0;
x++;
break;
}
}
}
}
//在指定位置 显示1个24*24的汉字
//(x,y):汉字显示的位置
//index:tfont数组里面的第几个汉字
//color:这个汉字的颜色
void LCD_Show_CH_Font24(u16 x,u16 y,u8 index,u16 color)
{
u8 temp,t,t1;
u16 y0=y;
for(t=0;t<72;t++)//每个24*24的汉字点阵 有72个字节
{
if(t<24)temp=tfont24[index*3][t]; //前24个字节
else if(t<48)temp=tfont24[index*3+1][t-24]; //中24个字节
else temp=tfont24[index*3+2][t-48]; //后24个字节
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Draw_Point(x,y,color);//画实心点
else LCD_Draw_Point(x,y,BACK_COLOR); //画空白点(使用背景色)
temp<<=1;
y++;
if((y-y0)==24)
{
y=y0;
x++;
break;
}
}
}
}
注意:
1、该文章采用的是将取模后的汉字利用头文件保存到工程,然后编译下载到开发板。
这种方法所支持的汉字仅限头文件中包含的经过取模后的汉字。
2、显示汉字函数与取模方法是存在对应关系,取模方法不一样对应的汉字显示函数是不一样的。
本文章上面有取模软件的设置方法,而下面的汉字显示函数是与上面有取模软件的设置方法对应的。