站内搜索
发作品签到
专业版

【立创开发板】基于梁山派的小说阅读器、电子书阅读器设计

工程标签

1.3k
0
0
10

简介

使用从【立创开发板】官网申请的”立创梁山派“开发板,制作一个基于GD32的小说阅读器、电子书阅读器

简介:使用从【立创开发板】官网申请的”立创梁山派“开发板,制作一个基于GD32的小说阅读器、电子书阅读器

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2024-09-20 12:44:43更新时间:2024-10-16 14:10:49

描述

一、项目名称

基于梁山派的小说阅读器、电子书阅读器设计

二、项目目标

100%开源、节约成本

源代码、PCB(这部分很菜,可以忽略)、设计思想、算法思路......等全部开源,当然由于本人大二刚开始,模电数电并未学多少,有关PCB硬件的部分必定不如我软件方面,还请见谅!!!

有关核心代码部分例如:从TF卡中读取字库的点阵信息、以及GB2312编码和ASCII的处理部分、汉字在LCD屏上的显示的自动换行、LCD屏居中显示的 代码,处理文件目录且无数量限制的算法等,我尽量提高其可移植性,即:在之后的其它项目中也可以用到,从而避免代码仅适用于梁山派的局限性。

三、项目初心

首先,有关使用STM32或者GD32做一个小说阅读器,网上的资料非常有限,就算有也是ESP32居多,而且在B站上的有关STM32的小说阅读器项目仅是资料竟然售卖20元,所以我打算做一个100%开源的基于【立创开发板】梁山派的小说阅读器项目,并希望其中有关字库操作、LCD的自动换行、居中显示、无限目录、读取TXT文件等核心代码能够给同学们提供一些帮助!!!

其次,感谢【立创开发板】的项目支持!!!

最后,“愿普天之下所有资料都开源”!!!!!

四、功能介绍

①配置SDIO和FATFS文件系统,通过文件系统读取字库的点阵信息并将要显示的汉字、字符显示在LCD屏上。

②SD卡已用,未用容量以UI界面的形式显示出来(LCD接口函数绘制),会根据SD卡容量自动切换单位

②阅读小说,即TXT文件,可以通过按键进行上下翻页,且不出现任何乱码。

③之前【立创梁山派游戏机】的代码中扫描的nes目录最大只有100个;我做的是扫描无限目录,并且在不会内存泄漏的情况下,实现没有数量限制的小说目录读取——立创梁山派游戏机的代码可以据此进行优化。

④支持插入书签,并将书签以BIN文件的形式保存在TF卡中,实现书签的掉电不丢失,存在书签的情况下,进入小说自动跳转值书签页,否则跳转至初始页。

⑤LCD屏幕亮度调节通过按键调节,长按一键至最亮、最暗。

⑥字体切换,在设置界面进行切换字体,【仿宋】、【黑体】、【楷体】、【华文行楷】、【宋体】、【新宋体】、【隶书】等,准备了这些常见的,着具有可扩展性,可以根据需求进行扩增。

⑦针对图片Logo,我使用的是立创梁山派游戏机的Logo,但使用方式大有不同——梁山派游戏机的Logo是通过取模存放在单片机的Flash内部的,这样每次烧录代码都要好长一段时间,这很不方便,于是我通过在单片机上运行代码,将图片取模的数据通过文件系统,制作成BIN文件保存在TF中,这样可以大大节约烧录时间。

⑧串口同步打印操作信息。

五、技能掌握

①我学到了什么:

首先,通过这个小说阅读器项目,我对文件系统的使用变得更加的得心应手,对于多级菜单的编写的能力也进一步提高,针对GB2312编码与ASCII编码的处理也更加熟练,之后若是再遇到要在LCD屏幕上显示汉字的部分,就可以通过文件系统轻松解决;有关与C语言部分得到了前所未有的进步,例如:代码中有较多指针的使用、结构体数组、结构体,以及动态内存的申请与释放,C语言的这类部分之前用的都非常少,但在次项目中有了不少的运用,然我体会到这些数据类型的方便。

其次,PWM调节LCD屏亮度;状态机检测按键,并进行长按短按的识别;通过CubeMx配置文件系统;结合文件系统与字库,实现从TF内读取字库点阵信息;通过文件系统读取TXT文本,并显示在LCD屏幕上;文件目录的无限扫描;

②不足:

对于PCB设计部分,有不少的遗憾,我目前的情况是:我的硬件设计能力支撑不起我的软件设计能力,这就导致我原本想加的一些功能,因为硬件能力的不足,而不得不裁剪掉;所以希望在之后的时间里,我能够好好弥补硬件的能力。

六、碰到的问题与解决方法

①有关使用STM32CubeMx配置SDIO,自动生成的代码导致TF卡初始化失败的问题

解决方法:SDIO初始化要以一位数据线初始化,而CubeMx生成的代码是以四位数据线初始化的,这好像是CubeMx的BUG。

这里我封装了一个SDIO初始化修复函数,以一位数据线对SDIO初始化,最后再将数据线修改为四位,来解决这个问题。

②有关字库编码的选择与处理,如何显示通过使用字库显示汉字?

字库我制作了三种大小的字库:16*16,24*24,32*32

一个16*16汉字=16*16/8=32Byte

一个24*124汉字=24*24/8=72Byte

一个32*32汉字=32*32/8=128Byte

字体我制作了【仿宋】、【黑体】、【楷体】、【华文行楷】、【宋体】、【新宋体】、【隶书】共7种字体

网址:GB2312 编码表 - 锤子在线工具 (toolhelper.cn)

网站:ASCII码 - 基本ASCII码和扩展ASCII码,中文最全ASCII码对照表0~255 (asciim.cn)

这里我选用的是GB2312编码格,这里要先了解一下GB2312编码格式,GB2312编码是一种汉字编码,GB2312字库内无论是汉字还是英文都占两个字节,第一字节范围[0xA1,0xF7],第二字节范围[0xA0,0xFF]。

小说的或是TXT文件一定要是GB2312编码格式,否则会出现乱码,这部分可以用编码格式转换工具进行操作

③如何实现中英文混合显示?

屏幕厂商提供的屏幕驱动代码大多是中英文区分显示的,不能通过一个函数同时显示中英文,这导致使用起来非常的不方便。我想实现的是像printf("你好世界Hello")打印在电脑上那样,显示在LCD屏上。在那之前我们要先分析一下"你好世界Hello"这个字符串,该字符串中有:有四个汉字,六个英文。在代码中,汉字是GB2312编码格式,而英文是ASCII码格式。汉字可以根据代码本身的编码进行寻址,英文字母则需要转换成GB2312编码中对应的英文字符编码,ASCII的32到126编码字符与GB2312的0xA30xA0到0xA30xFE对应,所以可以据此得出偏移计算公式addr=((0xa3-0xa1)*94+(uint8_t)*gbk+128-0xa1)*Font.ByteSize;(Font.ByteSize为一个GB2312编码字符的字节大小,16号字体占32字节,24号字体占72字节,32号字体占128字节,*gbk为英文字符对应的ASCII编码),最后将点阵信息通过文件系统读到缓存中,并借用LCD的底层显示函数,显示到屏幕上。

④由于TXT文件内混有GB2312编码的中文和ASCII的英文,该如何处理,从而避免乱码?

设计思想:由于我们无法预估文件系统读取到什么地方,刚好是一个完整字符;如果每次都以固定的字节数进行读取,倘若刚好读了一个汉字的第一个字节,却刚好满足了字节数,则会导致汉字编码被截断,导致之后的部分会出现乱码。我的思想是:屏幕大小是固定的,屏幕四周有弧度部分,所以我使用部分来显示字符,13*15=195个字符,即:每次显示195个字符,假设读取的195个字符全是GB2312编码的汉字,则最多也就390个字节,这里不可避免的会出现一些占字节,却是不可显示的字符,如换行符:CR+LF(占两个字节),而我们需要略过这些不可显示字符,所以这里为了保险起见,往后读500个字节,每显示完一个字符,都进行加一,同时根据是GB2312编码还是ASCIII编码统计字节数,将统计的字节数进行返回并进行累加,把累加后的结果当作是下一次读取的起始字节。以上是针对向后读取的,而针对先前读取的方法与之类似,从当前位置,向前读取500个字节,并进行统计,统计到刚好有195个字符时返回字节数,当前位置向前偏移返回的字节数,然后从偏移后的位置,向前位置向后读取返回的字节数,并显示在LCD屏上,不过这里要特别注意,若当时的字节数到文件起始位置不足500字节时,要将位置偏移文件的起始位置。

⑤如何实现小说插入书签的功能?

一开始,我是打算使用AT24C或W25Q的,但这类存储芯片的容量都比较小,而且若将电子书和书签分开,非常不便于管理,于是我就继续使用文件系统进行创建BIN文件来保存书签;一个书签为八个字节,四个用于存储页码,四个用于存储字节的偏移位置。针对书签的设计思想,当进入某部小说并阅读时,先检测是否有书签,若存在书签则跳转至书签页并且页码会变成红色,但若没有书签,则跳转至小说的起始页。当想插入书签时,通过长按确认键进行书签插入,插入成功后,页码变为红色。

⑥如何实现字体切换?

通过结构体定义字库,结构体内存放字体大小、字库存放位置、一个字符的所占字节大小等重要信息,修改字体即:重新对字库信息进行初始化,也就是修改字库的位置信息。

六、项目声明

本项目开源的内容更多的是在软件方面

该项目的代码你可以移植到自己的项目中使用,若在自己的项目中造成任何后果,本人概不负责!!!

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
系统.zip
85
2
字库制作软件.zip
31
3
编码格式转换工具.zip
29
4
演示视频.mp4
49
5
源代码.zip
152
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航