汉字点阵与OLED屏显学习记录

一.汉字点阵原理

1.什么是点阵?

我们用之前的方法一个IO口只能控制一个led,如果需要用更少的IO口控制更多的led怎么办?于是,就有了点阵。
例如:8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则1脚接高电平a脚接低电平,则第一个点就亮了。

2.汉字编码

区位码
点阵字库其实就是按照汉字内码的顺序,把汉字的字模信息存起来。16×16的点阵字库有94区,每个区有94个汉字的字模。这样总的有94×94个汉字。

在国标 GD2312—80 中规定,所有的国标汉字及符号分配在一个 94 行、94 列的方阵中,方阵的每一行称为一个“区”,编号为 01 区到 94 区,每一列称为一个“位”,编号为01 位到 94 位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。

区位码的前两位是它的区号,后两位是它的位号。用区位码就可以唯一地确定一个汉字或符号。

机内码
汉字的机内码是指在计算机中表示一个汉字的编码。机内码与区位码稍有区别。

汉字区位码的区码和位码的取值均在 1-94 之间,如直接用区位码作为机内码,就会与基本 ASCII 码混淆。为了避免机内码与基本 ASCII 码的冲突,需要避开基本 ASCII 码中的控制码(00H~1FH),还需与基本 ASCII 码中的字符相区别。

因此:先在区码和位码分别加上 20H,在此基础上再加 80H。
(此处“H”表示前两位数字为十六进制数)

经过这些处理,用机内码表示一个汉字需要占两个字节,分别称为高位字节和低位字节,这两位字节的机内码按如下规则表示:
高位字节 = 区码 + 20H + 80H(或区码 + A0H)
低位字节 = 位码 + 20H + 80H(或位码 + AOH)

由于汉字的区码与位码的取值范围的十六进制数均为 01H-5EH(即十进制的 01-94),所以汉字的高位字节与低位字节的取值范围则为 A1H-FEH(即十进制的 161-254)。

例如,汉字“啊”的区位码为 1601,区码和位码分别用十六进制表示即为 1001H,它的机内码的高位字节为 B0H,低位字节为 A1H,机内码就是 B0A1H。

3.点阵字库存储

在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是由一个矩形的点阵组成,0 代表没有,1 代表有点,将 0 和 1 分别用不同颜色画出,就形成了一个汉字。

字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库都是横向矩阵的存储方式(用得最多的应该是早期 UCDOS 字库),纵向矩阵一般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库矩阵做成纵向。

之后所描述的都是指横向矩阵字库。

16*16点阵字库
对于 1616 的矩阵来说,它所需要的位数共是 1616=256 个位,每个字为 8 位,因此,每个汉字都需要用 256/8=32 个字节来表示。

每两个字节代表一行的 16 个点,共需要 16 行,显示汉字时,只需一次性读取 32 个字节,并将每两个字节为一行打印出来,即可形成一个汉字。

1414与1212点阵字库
对于 1414 和 1212 的字库,理论上计算,它们所需要的点阵分别为(1414/8)=25, (1212/8)=18 个字节,但是,如果按这种方式来存储,那么取点阵和显示时,由于它们每一行都不是 8 的整位数,因此,就会涉到点阵的计算处理问题,会增加程序的复杂度,降低程序的效率。

为解决这个问题,有些点阵字库会将 1414 和 1212 的字库按 1614和 1612 来存储,即,每行还是按两个字节来存储,但是 1414 的字库,每两个字节的最后两位是没有使用,1212 的字节,每两字节的最后 4 位是没有使用,这个根据不同的字库会有不同的处理方式,所以在使用字库时要注意这个问题。

4.利用汉字机内码获取汉字

汉字的区位码和机内码的关系如下:

机内码高位字节 = 区码 + 20H + 80H(或区码 + A0H)
机内码低位字节 = 位码 + 20H + 80H(或位码 + AOH)
反过来说,我们也可以根据机内码来获得区位码:

区码 = 机内码高位字节 - A0H
位码 = 机内码低位字节 - AOH
这样,算出区位码之后,我们就可以用它在汉字库里面寻址找字模了。具体方式:
该汉字的偏移地址 =(区码-1)×94×一个字占用的字节数 + 位码×一个字占用的字节数

二.文字取模方法

软件初始设置
在这里插入图片描述
在这里插入图片描述

三.代码撰写

内容显示 TEST_MainPage函数->test.c文件

void TEST_MainPage(void)
{	
	GUI_ShowCHinese(28,20,16,"姚子敬",1);//中文姓名
	GUI_ShowString(4,48,"632107060310",16,1);//数字详细
	delay_ms(1500);		
	delay_ms(1500);
}

文字存储(举例)->oledfont.h文件

const typFNT_GB16 cfont16[] = 
{
	"系",0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
	0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00,/*"系",0*/
	"统",0x10,0x40,0x10,0x20,0x20,0x20,0x23,0xFE,0x48,0x40,0xF8,0x88,0x11,0x04,0x23,0xFE,
	0x40,0x92,0xF8,0x90,0x40,0x90,0x00,0x90,0x19,0x12,0xE1,0x12,0x42,0x0E,0x04,0x00,/*"统",1*/
	"设",0x00,0x00,0x21,0xF0,0x11,0x10,0x11,0x10,0x01,0x10,0x02,0x0E,0xF4,0x00,0x13,0xF8,
	0x11,0x08,0x11,0x10,0x10,0x90,0x14,0xA0,0x18,0x40,0x10,0xA0,0x03,0x18,0x0C,0x06,/*"设",2*/
	"置",0x7F,0xFC,0x44,0x44,0x7F,0xFC,0x01,0x00,0x7F,0xFC,0x01,0x00,0x1F,0xF0,0x10,0x10,
	0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0xFF,0xFE,0x00,0x00,/*"置",3*/
};

主函数->main.c文件

int main(void)
{	
	delay_init();	    	       //延时函数初始化	  
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{	
		TEST_MainPage();         //界面显示
	}
}

四.效果展示

请添加图片描述

  • 44
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当涉及串口屏显时,通常涉及以下几个方面的功能和组件: 1. 串口通信:串口是一种用于设备间通信的常见接口。它使用串行数据传输,通过发送和接收数据字节进行通信。串口通信涉及到波特率、数据位、停止位、校验位等参数的设置,以确保正确的数据传输。 2. 显示控制器:显示控制器是连接屏幕的硬件设备,负责将接收到的数据解析并控制屏幕上的像素点来显示图像或文本。它可以支持不同的显示模式和分辨率,并提供一些基本的绘图功能。 3. 显示屏幕:显示屏幕是用于显示图像或文本的输出设备。它可以是液晶显示屏(LCD)、有机发光二极管(OLED)等不同类型的屏幕。显示屏通常具有特定的分辨率和像素密度,用于呈现清晰的图像和文本。 4. 控制指令和数据:在串口屏显中,设备通过发送控制指令和数据到显示控制器来实现特定的操作。这些指令可以包括屏幕清除、文本写入、图像绘制等。控制指令和数据的格式通常由显示控制器的协议规定。 5. 应用程序接口:为了方便使用串口屏幕,通常会提供一些应用程序接口(API)或软件库,用于简化与屏幕的交互。这些接口可以提供高级的绘图功能、文本处理和用户界面设计等,使开发人员能够更轻松地使用串口屏幕。 总的来说,串口屏显是通过串口通信将控制指令和数据发送到显示控制器,然后由显示控制器控制屏幕进行图像或文本的显示。这种技术可以应用于各种嵌入式系统和设备中,提供可视化的用户界面和状态显示功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值