LCD中文字符显示机制

您所在的位置:网站首页 16*16点阵显示汉字原理 LCD中文字符显示机制

LCD中文字符显示机制

2024-07-12 13:44| 来源: 网络整理| 查看: 265

一、字符显示机制1. 字符显示原理

要在LCD上显示一个字符,需要以下两步:

① 占据屏幕上的一块地方,大小由字体大小说了算;② 在占据的地方上依次控制每个像素点是否显示。

比如中文字符24×24字体大小表示水平需要24个像素点、垂直需要24个像素点。

在这块24×24的地盘上,每个像素点是否显示由字模说了算,字模中的每1位数据表示一个像素点,如果该位为0则表示此处像素点不显示、为1则表示显示(阴码规则)。

所以,字符显示的函数只需要基于打点函数实现即可。在程序中逐位读取字模,如果该位为0则该点写入背景颜色,如果该位为1则写入前景颜色。

图片图片2. 字模生成(点阵字体)

正因为LCD显示字符的机制,所以该种字体被称为点阵字体。

为了方便大家理解原理,这里我首先使用小工具生成字模。

设置工具的字模生成规则如下,阴码、逐行式、顺向取模(图中有误)、C51格式:

图片图片

接着生成汉字的字模:

图片图片

接着复制生成数据,在程序中定义为一个二维数组作为字库,第一个值表示字库中的元素个数,可以由编译器自行判断,第二个值是每个元素的大小,必须要指明,这样我们就可以用 hz_16x16[0] 来找到汉字 ”春”在字库中的位置:

代码语言:javascript复制#ifndef _HZ_H_ #define _HZ_H_ const unsigned char hz_16x16[][32] = {      {0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x3F,0xF8,0x02,0x00,0xFF,0xFE,0x08,0x20, 0x10,0x10,0x2F,0xE8,0xC8,0x26,0x08,0x20,0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0},/*"春",0*/ /* (16 X 16 , 宋体 )*/ }; #endif /* _HZ_H_*/

我们选择的字体是16x16,所以:

水平方向有16个像素点,每个像素点占1位,需要16bit,两个字节来表示一行;垂直方向有16行,所以整体有2*16=32个字节;

此处需要注意,软件每16个字节生成一对花括号,这会影响二维数组取值,需要将中间多余的花括号去除。

二、如何将字符显示到LCD1. 打点函数支持

字符显示需要打点函数的支持,这里我使用RGB-LCD的打点函数:

代码语言:javascript复制void lcd_draw_point(uint16_t x, uint16_t y, uint16_t color);2. 字库支持

引入刚刚我们创建二维数组的头文件:

代码语言:javascript复制#include "hz.h"3. 读取字模显示代码语言:javascript复制void lcd_show_chinese(uint16_t x, uint16_t y, char ch, uint16_t back_color, uint16_t font_color, uint8_t font_size) {     uint16_t i, j;     uint16_t x_pos, y_pos, size, font_width, font_height;     uint8_t *font_ptr;     uint8_t bit_width, temp;       if((x > (LCD_WIDTH - font_size)) || (y > (LCD_HEIGHT - font_size))) {         return;     }       x_pos = x;     y_pos = y;     font_height = font_size;     font_width = font_size;     bit_width = 8;     size = (font_width / 8 + ((font_width % 8) ? 1 : 0)) * font_height;          font_ptr = (uint8_t*)&hz_16x16[ch];     for (i = 0; i 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3