STM32中LCD显示少量汉字

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

在STM32中怎样在LCD显示屏中对汉字进行显示(只是汉字),下面针对这个问题是我的一点小小的看法,如有问题希望读者留言;

以下程序主要针对STM32中库函数进行操作:

在LCD显示汉字,首先需要对汉字进行取模,我们都知道一个汉字所占用的空间大小是2B。接下来通过取模软件对所需要显示的汉字进行取模(注意有的取模软件可能存在问题)。

在这我们要补充一个知识就是汉字在计算机中存储形式:

输入码:汉字的字数繁多,字形复杂,常用的汉字有6000—7000个,比英文的26个字母要多得多。在计算机系统中使用汉字,首先遇到的问题就是如何把汉字输入到计算机内。为了能直接使用西文标准

键盘进行输入,必须为汉字设计相应的编码方法。汉字编码方法主要分为三类:数字编码、拼音编码和字形编码。
机内码:计算机中字符的实际存储码。如西文字符,在计算机中是以ascii码的形式进行存储的,而我们的汉字,是在区位码的基础上加上A0H(16进制),就变成了汉字在计算集中的存储码,也就是机内码。 汉字点阵码是一种用黑白两色点阵来表示汉字字形的编码。 定义汉字点阵结构体

typedef struct typFNT_GB16                 // 汉字字模数据结构
{
       signed char Index[2];               // 汉字内码索引
       char Msk[32];                       // 点阵码数据
};

紧接着建立自己所需的字库,在这我随意创建一个:

struct typFNT_GB16 code GB_16[] =          // 数据表
{
“饼”, 0x20,0x00,0x21,0x08,0x20,0x90,0x3C,0x00,
      0x47,0xFC,0x48,0x90,0xA0,0x90,0x20,0x94,
      0x27,0xFE,0x20,0x90,0x20,0x90,0x24,0x90,
      0x28,0x90,0x31,0x10,0x22,0x10,0x04,0x10,


“昌”, 0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,
      0x10,0x10,0x10,0x10,0x1F,0xF0,0x00,0x08,
      0x3F,0xFC,0x20,0x08,0x20,0x08,0x3F,0xF8,
      0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,


“除”, 0x00,0x40,0x78,0x40,0x48,0xA0,0x50,0xA0,
      0x51,0x10,0x62,0x0E,0x55,0xF4,0x48,0x40,
      0x48,0x50,0x4F,0xFC,0x68,0x40,0x51,0x50,
      0x42,0x4C,0x44,0x44,0x41,0x40,0x40,0x80,
}

其中定义的汉字结构体元素中Index[2]存放汉字,而Msk用于存放点阵码。

具体程序如下:

void show_chinese(uint16_t x, uint16_t y, uint8_t *p, 
                     uint16_t wordColor, uint16_t backColor)
{
uint8_t i, wordByte ;
uint16_t color,wordNum;


u8 k=0;

while(*p != ‘\0’)
{



for(wordNum=0;wordNum<3;wordNum++)
{
if(*p==chinese[wordNum].Index[0] && *(p+1)==chinese[wordNum].Index[1])

tft_set_window(x, y, x+15, y+15);  
for(wordByte = 0;wordByte < 32; wordByte++)
{
uint8_t color = chinese[wordNum].Msk[wordByte];
for ( k = 0;k<8; k++) 
{
if ((color&0x80) == 0x80)
{
tft_wrdat(wordColor);
}
else
{
tft_wrdat(backColor);
}

color = color<<1;
}
 
}
p+=2;
x += 16;
if(x > 225)   
{
x = 0;
y += 16; 
}
 
}
}





}

}

其中tft_set_window(x, y, x+15, y+15)设置要操作的窗口范围,tft_wrdat(wordColor)LCD写数据,

然后就可以直接在主函数中进行汉字的显示程序编写:

int main()
{
tft_init(); //TFT彩屏初始化
LED_Init(); //LED初始化
tft_clear_screen(BLACK); //清屏
show_chinese(6,20,”饼昌除”,MAGENTA,YELLOW);  //YELLOW
while(1)
{
led_display(); //LED闪烁
}

}

具体的LED和TFT的初始化各位应该都是很清楚的,在这就不多说了。

点这里可以跳转到人工智能网站

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请发表评论。x
()
x