LCD-STM32液晶显示中英文-(7.字模及显示原理)

目录

字模介绍

什么是字模

字模的构成

字模显示原理

字模制作

如何制作字模

字模寻址公式

存储字模文件


字模介绍

什么是字模

        有了编码,我们就能在计算机中处理、存储字符了,但是如果计算机处理完字符后直接以编码的形式输出,人类将难以识别。因此计算机与人交互时,一般会把字符转化成人类习惯的表现形式进行输出,如显示、打印的时候。

        但是如果仅有字符编码,计算机还不知道该如何表达该字符,因为字符实际上是一个个独特的图形,计算机必须把字符编码转化成对应的字符图形人类才能正常识别,因此我们要给计算机提供字符的图形数据,这些数据就是字模,多个字模数据组成的文件也被称为字库。计算机显示字符时,根据字符编码与字模数据的映射关系找到它相应的字模数据,液晶屏根据字模数据显示该字符。

字模的构成

        已知字模是图形数据,而图形在计算机中是由一个个像素点组成的,所以字模实质是一个个像素点数据。为方便处理,我们把字模定义成方块形的像素点阵,且每个像素点只有0和1这两种状态(可以理解为单色图像数据)。

        下图两个宽、高为16x16的像素点阵组成的两个汉字图形,其中的黑色像素点即为文字的笔迹。计算机要表示这样的图形,只需使用16x16个二进制数据位,每个数据位记录一个像素点的状态,把黑色像素点以“1”表示,无色像素点以“0”表示即可。这样的一个汉字图形,使用16x16/8=32个字节来就可以记录下来。

        16x16的“字”的字模数据以C语言数组的方式表示,见下面的代码,在这样的字模中,以两个字节表示一行像素点,16行构成一个字模。

字模显示原理

        如果使用LCD的画点函数,按位来扫描这些字模数据,把为1的位以黑色来显示(也可以使用其它颜色),为0的数据位以白色来显示,即可把整个点阵还原出来,显示在液晶屏上。

        为方便讲解,编写一个使用串口printf利用字模打印字符到串口上位机的实验,实验效果如下:

LCD像素点显示字模正是运用了这个原理。

字模制作

        为方便使用,需要制作所有常用字符的字模,如程序只需要英文显示,那就需要制作包含ASCII码表中所有字符的字模,如程序只需要使用一些常用汉字,则可以选择制作GB2312编码里所有字符的字模,而且希望字模数据与字符编码有固定的映射关系,以便我们在程序中使用字符编码作为索引,查找字模。

        在网上搜索可找到一些制作字模的软件工具,可满足这些需求。下面以一取模软件“PCtoLCD”为例讲解如何制作字模,其它字模软件也是类似的。

如何制作字模

(1)配置字模格式,打开取模软件,点击“选项”菜单,会弹出一个对话框。

  • 选项“点阵格式”中的阴、阳码是指字模点阵中有笔迹像素位的状态是“1”还是“0”,像我们前文介绍的那种就是阴码,反过来就是阳码。本工程中使用阴码。
  • 选项“取模方式”是指字模图形的扫描方向,修改这部分的设置后,选项框的右侧会有相应的说明及动画显示,该设置会改变生成的字模数据位数的顺序,我们一般把它配置成“逐行式”
  • 取模走向,分为顺向(低位在前)和逆向(高位在前),此设置不影响不影响生成的字模数据位数的顺序,只是字模软件生成字体位序的不同,我们可任意设置
  • 选项“每行显示的数据”里我们把点阵和索引都配置成16,设置这个点阵的像素大小为16x16。

字模选项的格式保持不变,设置完我们点击确定即可,字模选项的这些配置会影响到显示代码的编写方式。

(2)生成ASCII字模

使用取模软件生成ASCII字库步骤如下

使用Sublime text 3

先打开索引文件,发现文件末尾默认添加了一个结束符,我们必须要删掉

再打开字模文件,自动以16进制形式打开,全选之后使用ctrl+shift+L可以进行所有行同时光标操作,添加0x和','

我们打开野火提供的两个ASCII文件

发现除了删除了文末结束符还删除了ASCII码前面32个无意义的字符,从0x20的“ ”空格开始表示

(3)生成GB2312字模

        配置完字模选项后,点击软件中的导入文本图标,会弹出一个“生成字库”的对话框,点击右下角的生成国标汉字库按钮即可生成包含了GB2312编码里所有字符的字模文件。

        在《LCD—液晶显示汉字》的工程目录下的《GB2312_H1616.FON》是用这个取模软件生成的字模原文件,若不想自己制作字模,可直接使用该文件。

字模寻址公式

        使用字模软件制作的字模数据一般会按照编码格式排列。如我们利用以上软件生成的字模文件《GB2312_H1616.FON》中的数据,是根据GB2312的区位码表的顺序存储的,它存储了区位码为0101-9494的字符,每个字模的大小为16x16/8=36字节。其中第一个字符“空格”的区位码为0101,它是首个字符,所以文件的前36字节存储的是它的字模数据;同理,36-72字节存储的则是0102字符“、”的字模数据。所以我们可以导出任意字符的寻址公式:

        Addr = (((CodeH-0xA0-1)*94) +(CodeL-0xA0-1))*16*16/8

        其中CodeH和CodeL分别是GB2312编码的第一字节和第二字节;94是指一个区中有94个位(即94个字符)。公式的实质是根据字符的GB2312编码,求出区位码,然后区位码乘以每个字符占据的字节数,求出地址偏移。

        由于区位码0000没有存储任何字符,第一个字符的区位码是0101,编码是0xA1A1,所以字符的高字节减去0xA0再减1,区码偏移量;字符的低字节减去0xA0再减1算出位码偏移量;最后乘字节数16*16/8就得到了该字符在字符数组中的起始下标。

存储字模文件

        上面生成的《GB2312_H1616.FON》文件的大小为576KB,比很多STM32芯片内部的所有FLASH空间都大,如果我们还是在程序中直接以C语言数组的方式存储字模数据,STM32芯片的程序空间会非常紧张,一般的做法是把字模数据存储到外部存储器,如SD卡或SPI-FLASH芯片,当需要显示某个字符时,控制器根据字符的编码算好字模的存储地址,再从存储器中读取,而FLASH芯片在生产前就固化好字模内容,然后直接把FLASH芯片贴到电路板上,作为整个系统的一部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

位运算常见算法题

文章目录 前言191. 位1的个数338. 比特位计数461. 汉明距离136. 只出现一次的数字260. 只出现一次的数字 III面试题 01.01. 判定字符是否唯一268. 丢失的数字371. 两整数之和137. 只出现一次的数字 II面试题 17.19. 消失的两个数字 前言 本篇文章会涉及多道位运算题目&#xf…

Vue中的事件处理

一,基本使用 1.使用v-on:事件名或者事件名绑定事件 常见的事件有: onclick, 鼠标单击事件; ondblclick, 鼠标双击事件;onmousedown,鼠标按下去的事件;onmouseup,鼠标弹起事件; onmouseover,onmouseente…

【代码随想录 | Leetcode | 第六天】链表 | 反转链表 | 两两交换链表中的节点 | 删除链表的倒数第 N 个结点

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来反转链表、两两交换链表中的节点和删除链表的倒数第N个节点的分享✨ 目录 前言206. 反转链表24. 两两交换链表中的节点19. 删除链表的倒数第 N 个结点总结 206. 反转链表 ✨题目链接点这里 给你…

【蓝图】p27开关门互动实现

p27开关门互动实现 创建一个门 添加初学者内容包 拖拽一个门到场景中 添加一个碰撞 创建盒体触发器 左侧模式->基础->盒体触发器,拖拽到门上,调整大小 开关门互动实现 做一个开门互动 要把开门逻辑写在关卡蓝图里 门设置为可移动 打开关卡蓝…

MySQL-DDL-表的结构-查询修改删除

DDL(表操作) 查询 查询当前数据库所有表:show tables 查询表结构:desc 表名 查询建表语句:show create table 表名 修改(主要还是通过图形化界面进行操作) 添加字段:alter table …

LayUi之手风琴的趣味案例

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.手风琴是什么 二.手风琴在什么时候使用…

业务开发“银弹” ——低代码开发平台

一、现状 低代码开发平台要让每个人,包括开发者和普通业务人员,都能够成为企业数字化过程中的主导者和构建者!让普通人更容易上手! 基于这一目标,应用需求多的云服务商成为低代码投资的主要来源。一家云服务商如谷歌云…

AD从原理图到PCB超详细教程

AD超详细教程 前言一、建立一个工程模板二、原理图1.设计原理图。2.使用AD自带库和网上开源原理图库3.画原理图库4.编译原理图 三、PCB1.确定元器件尺寸大小2.绘制PCB Library①使用元器件向导绘制元件库②原理图与PCB的映射 3.绘制PCB①更新PCB②调整元件位置③布线④漏线检查…

代理模式【静态代理和动态代理实现业务功能扩展】

静态代理 我们在不修改业务的情况下想要给它增加一些功能,这就需要使用代理模式。我们不会在原有业务上直接修改,为了避免修改导致程序不可逆转的破坏。三种角色:抽象角色-接口、真实角色-实现类和代理角色-代理类。真实角色和代理角色继承的…

raid5故障导致上层文件系统不可用的服务器数据恢复案例

服务器数据恢复环境: 一台服务器上有两组分别由4块SAS硬盘组建的raid5磁盘阵列,这两组raid5阵列划分LUN并组成LVM结构,格式化为EXT3文件系统。 服务器故障: 一组raid5阵列上的一块硬盘未知原因离线,热备盘上线替换离线…

Redis远程字典服务

目录 前言 1.NoSQL 1.1NOSQL和关系型数据库比较 1.2非关系型数据库的优势 1.3关系型数据库的优势 ​编辑 2.主流的NOSQL产品 键值(Key-Value)存储数据库 列存储数据库 文档型数据库 图形(Graph)数据库 3.Redis简介 redis的应用场景 4.命令操作 4.1字符串类型 s…

Linux内核的任务:

硬件与软件之间的中间层:内核在技术层面上充当硬件和软件之间的中间层,负责将应用程序的请求传递给硬件,并处理硬件设备和组件的寻址和操作。 应用程序的接口:对于应用程序来说,内核是它们与硬件之间的接口。应用程序通…

vscode 端口转发实现端口映射,实现端口自由

用vscode连接server进行开发, 是非常方便的,但很多时候,server的端口开放的很有限,那么就可以利用vscode进行端口映射 举一个应用场景: 先通过A利用vscode 连接B,然后再vscode 的port窗口进行端口转发&…

每日一刷——替换空格

题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 我的思路:从左向右循环遍历字符串,定义一个空串。如果遇到空格&#xf…

【广州华锐互动】VR地铁消防逃生路线演练系统

随着城市轨道交通的不断发展,事故应急演练的重要性也越来越受到重视。而VR技术的应用,为地铁消防逃生路线演练带来了许多亮点,包括以下几个方面: 首先,VR技术可以提供高度真实的模拟场景。在传统的事故应急演练中&…

Lottie源代码解析

Lottie-iOS Lottie动画的原理: 一个完整动画View,是由很多个子Layer 组成,而每个子Layer主要通过shapes(形状),masks(蒙版),transform三大部分进行动画。Lottie框架通过…

【Linux】内存使用相关

free 命令 查看内存大小 free -g :G单位 free -h : 可读性较高较理解 free -m : MB单位 total: 总内存used: 正在运行的进程使用的内存(used total – free – buff/cache)free: 未使用的内存 (free total – used – buff/cache)shared: 多个进程共享的内存buffers: 内存保留…

linux安装mysql以及使用navicat连接mysql

目录 一、下载mysql 二、安装mysql 三、使用Navicat连接MySQL 四、常见问题 1、启动服务时报错 Failed to start mysql.service: Unit not found. 的解决方法。 2、登录过程出现:access denied for user’root’‘localhost’(using password:Yes) 的解决方…

常见的网络攻击

​ 1.僵木蠕毒 攻击业内习惯把僵尸网络、木马、蠕虫、感染型病毒合称为僵木蠕毒。从攻击路径来看,蠕虫和感染型病毒通过自身的能力进行主动传播,木马则需要渠道来进行投放,而由后门木马(部分具备蠕虫或感染传播能力)构…

一本通1919:【02NOIP普及组】选数

这道题感觉很好玩。 正文: 先放题目: 信息学奥赛一本通(C版)在线评测系统 (ssoier.cn)http://ybt.ssoier.cn:8088/problem_show.php?pid1919 描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k&#…