STM32中LCD显示少量汉字

来源:互联网 发布:网络客户服务的优势有 编辑:程序博客网 时间:2024/05/04 04:01

在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
原创粉丝点击