STM32LCD中英文显示

液晶显示器(LCD)是一种广泛使用的显示技术,它通过控制液晶分子的排列来调节光线的透过率,从而实现图像的显示。

一、中文显示原理

已知字模是图形数据,而图形在计算机中是由一个个像素点组成的,所以字模实质是一个个像素点数据。为方便处理,我们把字模定义成方块形的像素点阵,且每个像素点只有0和1这两种状态(可以理解为单色图像数据),下图两个宽、高为16x16的像素点阵组成的两个汉字图形,其中的黑色像素点即为文字的笔迹。计算机要表示这样的图形,只需使用16x16个二进制数据位,每个数据位记录一个像素点的状态,把黑色像素点以“1”表示,无色像素点以“0”表示即可。这样的一个汉字图形,使用16x16/8=32个字节来就可以记录下来。

二、字模的生成

1.字模

字模,也称为字型或字体,是显示字符的图形表示。在LCD显示设备中,字模的生成是一个重要的步骤,它涉及到将字符转换成显示器可以识别和显示的像素模式。

可以使用PCtoLCD2002生成字模

2.生成字模

在下方栏目中输入欲显示的汉字,此时设置的字宽16,字高16。

        点击右下方【生成字模】,即可显示在下方。可选中十六进制数部分,右击【复制】然后粘贴到编程软件里。

 汉(0) 字(1) 显(2) 示(3)

DB 00H 00H E4H 1FH 48H 10H 48H 10H 41H 10H 82H 08H 92H 08H 90H 08H;
DB 08H 05H 08H 05H 07H 02H 04H 02H 04H 05H 84H 08H 44H 10H 30H 60H;"汉",0

DB 40H 00H 80H 00H FEH 7FH 02H 40H 01H 20H F8H 07H 00H 02H 00H 01H;
DB 80H 00H FFH 7FH 80H 00H 80H 00H 80H 00H 80H 00H A0H 00H 40H 00H;"字",1

DB 00H 00H F8H 0FH 08H 08H 08H 08H F8H 0FH 08H 08H 08H 08H F8H 0FH;
DB 20H 02H 22H 22H 24H 22H 28H 12H 28H 0AH 20H 02H FFH 7FH 00H 00H;"显",2

DB 00H 00H FCH 1FH 00H 00H 00H 00H 00H 00H 00H 00H FFH 7FH 80H 00H;
DB 80H 00H 88H 08H 88H 10H 84H 20H 82H 40H 81H 40H A0H 00H 40H 00H;"示",3

说明

        字宽16,字高16,逐列式取模

        高度16个位可拆分为16/8=2字节,高度16*宽度16 = 2字节*宽度16 = 32字节控制一个字符显示。

2412字体:即高度24*宽度12,

        高度24个位可拆分为24/8=3字节

        高度24*宽度12 = 3字节*宽度12 = 36字节控制一个字符显示。

3.LCD显示中英文

        需要将中文字符转换为计算机可以识别的编码格式。如前所述,GB2312、GBK或GB18030是常用的简体中文字符编码方式。

GBK编码和GB2312编码都是中文字符的编码方式,它们主要用于简体中文字符的

GB2312编码:
GB2312是中国国家标准的简体中文字符编码标准,发布于1980年。
它使用两个字节来表示一个字符,其中第一个字节的范围是0xA1-0xFE,第二个字节的范围是0xA1-0xFE。
GB2312编码只包含了6763个汉字和682个其他符号,包括拉丁字母、日文假名、数字和标点符号等。
GBK编码:
GBK是GB2312的扩展,它在GB2312的基础上增加了对繁体中文、日文、韩文等的支持。
GBK编码同样使用两个字节来表示一个字符,但是它的范围更广,可以表示更多的字符。
GBK编码可以表示21000多个汉字,包括简体和繁体,以及其他一些符号和字符。

GB2312编码对所收录字符进行了“分区”处理,共94个区,每区含有94个位,共8836个码位。这种表示方式也称为区位码。
01-09区收录除汉字外的682个字符。
10-15区为空白区,没有使用。
16-55区收录3755个一级汉字,按拼音排序。
56-87区收录3008个二级汉字,按部首/笔画排序。
88-94区为空白区,没有使用。
举例来说,“啊”字是GB2312编码中的第一个汉字,它位于16区的01位,所以它的区位码就是1601。

        英文字母简单,只有26个英文字母,构建的ASCII表也非常简单。因此,显示英文的方法一般都是把全部ASCII用字模创建出来

示例代码
#include <LiquidCrystal.h>

// 初始化LCD,参数分别为RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// 定义一个GB2312编码的中文字符串
const char chineseText[] = {0xB3, 0xA1, 0xD7, 0xD6}; // "你好"的GB2312编码

void setup() {
  // 设置LCD的列数和行数
  lcd.begin(16, 2);
  // 清除屏幕
  lcd.clear();
  // 设置光标位置并打印中文字符串
  lcd.setCursor(0, 0);
  lcd.print("你好, 世界!"); // 这里我们混合了GB2312编码和ASCII字符
}

void loop() {
  // 这里可以添加代码来更新LCD显示或响应用户输入
}
注意事项

字库支持:确保你的LCD驱动程序和图形库配置正确。
库函数:字体文件的加载和处理可能因你的具体项目和使用的图形库而异。你可能需要查看图形库的文档以了解如何加载和使用字体文件。
字符映射:中英文混合显示时,你可能需要为中文和英文分别设置字体,或者使用其他方法(如两个标签或文本块)来处理。
根据你的项目需求,你可能还需要处理其他文本渲染特性,如换行、滚动、字体大小调整等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值