版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FatFs与读写SD卡实验“第九章《GD32F3开发进阶教程——基于GD32F303ZET6》01实验内容本章的主要内容是学习字符编码、字库创建和字符索引的基本原理,掌握通过LCD屏显示中文字符的方法,最后基于GD32F3苹果派开发板在LCD屏上显示中文电子书,并实现通过GUI控件完成电子书的翻页功能。实验内容02实验原理1.GB2312编码方式使用ASCII编码方式已经足以实现英文字符的保存,英文单词的数量虽然多,但都由26个英文字母组成,因此仅用1字节编码长度即可表达所有英文字符。但对于汉字,如果类比英文字母,按照笔画的方式来保存,再将其组合成具体的文字,这样的编码方式将会极其复杂。因此,通常使用二进制数编码来保存单个汉字。字符编码字符编码如图9-1所示为区位码定位图,其中16代表的是区号。2.GBK编码方式由于GB2312可以表示的汉字个数只有6000多个(其余2000多个为汉字及日文等字符,不包含繁体字和生僻字),在特殊情况下,GB2312的字符量可能无法满足使用需求,而在GB2312基础上产生的GBK编码方式能够很好地解决这一问题。字符编码如图9-2所示,假设在LCD16x16区域显示中文字符“啊”,则可以按照一定顺序,如从左往右、从上往下依次将像素点点亮或熄灭,遍历整个矩形区域后字符“啊”将显示在屏幕上。现在用一个比特表示个像素点,假设0代表熄灭,1代表点亮,则可以按照从左往右、从上往下的顺序依次将像素点数据保存到一个数组中,这个数组即为汉字“啊”的点阵数据,即字模。将所有汉字的点阵数据组合在一起并保存到一个文件中,就是一个汉字字库。字模和字库的概念字模和字库的概念由于本章实验需要显示一本中文电子书,需要使用的中文字符量较大,所以需要用到软件自动生成的字库文件。在本章实验中,提前生成了一个GBK字库文件并保存在SD卡相应目录下,供程序调用。另外,由于字库中的字符数量较多,而GD32F303ZET6微控制器的内存容量有限,因此本实验将字库文件保存在SPIFlsh中,当程序需要显示中文字符时,可以访问SPIFlash获取对应字符的点阵数据。每个字符的点阵数据在Flash中都有相应的地址在调用的时候根据GBK码计算地址值,即可显示中文字符。LCD显示字符的流程本实验配套的电子书为txt文件,保存在SD卡相应目录中。文件中的文本为中文字符,当FatFs文件系统诗取其中的数据时。所获取的数提为对应中文字符的GBK码程序通过该数据即可计算相应的地址,并根据该地址获取对应字符的点阵数据并传到LCD驱动中,即可在LCD屏上显示对应的中文字符。LCD显示字符的流程03实验代码解析0102FontLib.h文件:在FontLib.h文件的“API函数声明”区,声明了3个API函数。FontLib.c文件:在FontLibc文件的“宏定义”区,定义了一个FONTFILBUFSIZE常量用于设置字库缓冲区大小为4KB。在“内部函数声明”区,声明了1个内部函数。FontLib文件对下面按照顺序解释说明CheckFontLib函数中的语句。(1)第3至10行代码:定义silFont字库文件,用来保存文件的基本属性。两个字库缓冲区fleBuf和flashBuf分别保存SD卡中的字库和外部Flash中的字库,用以对比校验。(2)第12至24行代码:使用内存管理模块来申请动态内存丙检查是否申请成功,然后使用f_open函数来打开保存在SD卡的“GBK24.FON”文件。(3)第40至93行代码:通过while语将SD卡中的字库文件与SPIFIash中的字库文件进行比对,以检验SPIFlash中的字库是否损坏。(4)第96至100行代码:关闭文件并释放相应内存空间。FontLib文件对下面按照顺序解释说明InitFontLb函数中的语句。(1)第4行代码:本实验中的字库文件保存在SPIFlash中,首先通过InitGD25QXX函数初始化SPIFlash芯片。(2)第7至15行代码:使用CheckFontLib函数校验字库,校验成功则不需要更新字库否则使用UpdataFontLib函数从SD卡中更新SPIFIash内的字库文件。FontLib文件对a下面按照顺序解释说明UpdataFontLib函数中的语句。(1)第3至8行代码:与字库校验函数类似,通过文件系统使用SD卡中的字库文件,首先创建字库文件对象,字库缓冲区fontBuf用来暂存字库数据。(2)第11至16行代码:使用内存管理模块创建暂存字库的动态内存。(3)第34至71行代码:通过while语,读取SD卡中的字库文件至缓冲区,并将该文件存储到SPIFlash中。FontLib文件对下面按照顺序解释说明GetCNFont24x24函数中的语句。(1)第8至9行代码:将GBK码分为高8位和低8位分别保存在gbkH和gbkL变量中,用于判断区号和位号。(2)第21至33行代码:在GBK编码方式中,由于低位0x7F没有使用,所以地址查询分为两段。当0x40≤gbkL≤0x7E时:addr-((gbkH-0x81)x190+(gbkL-0x40))x72;当0x80≤gbkLS≤0xFE时:addr-((gbkH-0x81)x190+(gbkL-0x41))x72。FontLib文件对0102LCD.h文件:本章实验使用LCD显示中文字符,由于原LCD驱动代码中没有中文显示函数,因此在LCD.h文件的“API函数声明区”,添加了如程序清单9-8所示的代码,ShowCNChar函数用于显示中文字符。LCD.c文件:在LCD.c文件的“包含头文件”区的最后,添加了代码#include"FontLib.h"。LCD文件对下面按照顺序解释说明NewPage函数中添加的语句。(1)第4行代码:定义cnChar用于保存汉字的GBK码。(2)第8行代码:将cnChar初始化为0。(3)第14至33行代码:添加中文显示的部分代码。其中第14行代码用于判断第一字节是否大于或等于0x81,如果满足条件则使用GBK编码方式进行解码。在第32行代码中,通过调用ShowCNChar函数进行中文字符显示。(4)第36至48行代码:由于中文字符的列空间比英文字符多一倍,需要重新计算列计数。FatFSTest.c文件GUIPlatform.c文件在本章实验中,使用GUI控件来显示电子书的标题,由于标题中含有中文字符,因此需要在GUIDrawChar函数中添加支持显示中文字符的部分代码,如程序清单9-11中的第5至8行代码所示。实验结果将SD卡插入开发板,下载程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年技术保密义务合同
- 2024年玻璃仪器及实验、医疗用玻璃器皿项目综合评估报告
- 2024年教育基金会教师资助协议
- 客服实习总结范文5篇
- 中小学2024年音乐兴趣小组活动计划(5篇)
- 2024年新形势下的润滑油供需合同
- 2024年拆迁补偿安置协议书
- 2024年城市地下空间利用设计合同
- 2024年XX影视制作发行合同
- 《基于DRL的虚拟链路驾驶行为智能体研究与UBI评估》
- 医科大学2024年12月精神科护理学作业考核试题答卷
- 2024-2025学年浙教版八年级上册科学期中模拟卷
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 智能制造工程生涯发展报告
- 二级公立医院绩效考核三级手术目录(2020版)
- 品牌授权工厂生产授权书合同
- 6人小品《没有学习的人不伤心》台词完整版
- 销售配合与带动-培训PPT课件
- 跨海大桥施工方案
- MATLAB语言课程论文 基于MATLAB的电磁场数值图像分析
- 暗挖隧道帷幕注浆专项方案[优秀工程方案]
评论
0/150
提交评论