一直想买一个阅读器来着,但是被价格劝退了,索性自己做一个,便宜又可以拓展。

一.材料

物料清单如下:

此外还有一块3.7v锂电池,500mAh就能用很久,

以及一张32gb以下,256mb以上的tf卡

二.原理图

1.电池模组

2.芯片模组

3.其他外设:

1.tf卡

2.按键

3.tft彩屏

三.设计思路

我比较懒啊,使用了clion+stm32cubemx的开发环境,初始化配置啥的特别方便,然后代码提示ai功能也很全面,然后项目的基本初始化就不展示了,具体看main.c即可。

1.cubemx配置

芯片引脚(其实自己设置的只要三个KEY和两个CS引脚,)

spi配置

fafts配置

2.main.c

main.c 是整个电子书阅读器的主控文件,负责系统初始化、TF 卡挂载、书籍扫描、字库初始化、书架显示以及阅读状态和书架状态之间的切换,是整个程序的入口和调度中心。

3.fatfs.c

fatfs.c 负责初始化 FatFs 文件系统,并把底层的 USER_Driver 驱动连接到 FatFs,使程序能够通过 f_mountf_openf_readf_write 等函数访问 TF 卡文件。

4.booklist.c

booklist.c 负责扫描 0:/book 目录,筛选出 .txt.TXT 文件,并把书名和完整路径保存到书籍列表中,供主界面的书架显示和打开阅读使用。

5.reader.c

reader.c 是阅读器的核心文件,负责打开小说文件、读取文本内容、解析 UTF-8、排版显示正文、翻页、上一页以及保存和恢复每本书的阅读进度。

6.key.c

key.c 负责按键扫描和消抖处理,采用非阻塞方式检测按键,只在按键稳定按下的一瞬间产生一次事件,避免按键抖动和程序卡顿。

7.lcd_st7735.c

lcd_st7735.c 负责 ST7735 液晶屏的底层驱动,包括 SPI 写命令、写数据、初始化屏幕、设置显示区域、清屏、画点、画线、显示英文字符、显示中文字符以及刷 RGB565 图像块。

8.font_manager.c

font_manager.c 负责管理外置中文字库,从 TF 卡中的字库索引文件和字模文件中查找汉字点阵,并加入缓存机制,提高中文显示速度。

9.utf8.c

utf8.c 负责 UTF-8 编码解析,把文本文件中的 1 字节、2 字节或 3 字节 UTF-8 字符转换成 Unicode 编码,为中文显示提供基础。

10.sdcard_spi.c

sdcard_spi.c 负责 TF 卡的 SPI 底层通信,包括 SD 卡初始化、发送命令、读取扇区和写入扇区,是 FatFs 访问 TF 卡的底层支撑。

11.bmp.c

bmp.c 负责显示 BMP 图片,将 24 位 BMP 图片数据读取出来,并转换成 LCD 使用的 RGB565 格式后显示到屏幕上。

12.text_slice.c

text_slice.c 负责按 UTF-8 字符长度对文本文件进行切片,避免把一个中文字符从中间截断,主要用于把较长文本预处理成多个小文件。

13.font_ascii_8x8.c

font_ascii_8x8.c 保存 8×8 的 ASCII 字符点阵数据,用于显示英文字符、数字、符号以及菜单中的简单文字。

14.font_ascii_8x16.c

font_ascii_8x16.c 保存 8×16 的 ASCII 字符点阵数据,可用于更高的英文字符显示效果。

15.font_cn16.c

font_cn16.c 保存少量 16×16 中文点阵数据,可作为内置中文测试字库或在外置字库不可用时显示部分固定汉字。

16.font_lib.c

font_lib.c 目前主要作为字库相关模块的占位文件或接口补充文件,本身代码较少,主要配合 font_lib.h 和其他字库文件使用

17.user_diskio.c

user_diskio.c 是 FatFs 和 SD 卡 SPI 驱动之间的适配层,负责把 FatFs 的磁盘操作接口转换成底层 SD 卡读写函数。它实现了磁盘初始化、状态查询、扇区读取、扇区写入和控制命令,使 FatFs 能够通过 SD_Init()SD_ReadBlock()SD_WriteBlock() 等函数访问 TF 卡

然后其他的必要库文件cmake自动生成包含,不多赘述。项目结构是clion自动生成,没什么好调整的。

四.使用方法

TF卡里面要有三个文件夹,如图:

book里面放txt文件,utf-8格式,必须英文名!!!

font是字库,可以自己生成也可以用我的这套,自己生成的要注意文字总数不能超过4500字(含标点),可用python快速生成。

cfg的话不用管,是存阅读数据的。

到这里就基本差不多了,就是按钮功能方面:下一页充当下一个和下一页;菜单充当确认退出。

最后是代码文件,放在gitcode上了TXTReader - AtomGit | GitCode

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐