0
点赞
收藏
分享

微信扫一扫

一个LED16X16点阵屏

逸省 2022-03-18 阅读 20

序言


20年毕业后,工作之余还是抽出了点时间来做一个自己一直想做的一个项目,那就是一个点阵屏。

衍生

我当时设想的是先显示一些简单的字体什么的但后面又觉得太low了,于是又加了个外部存储芯片,费了好大劲做好字库并将字库写进存储芯片里面,字库包括中英文以及特殊字符全给整上。但是随即又遇到新的问题,总不能我想让它显示其他什么汉字的时候每次都要重新下载程序吧。
在存储芯片里存储完字库以后仍然剩余大部分的空间,于是我将剩余的空间虚拟成U盘,然后在U盘里面创建一个txt文档;文档里面保存着我所需要的显示的中英文内容;这样我写芯片应用的时候只需要通过fatfs读取出txt内容后,根据内容翻译出对应字库中的gbk地址,根据地址读取出相应的点阵字库后通过LED显示即可。
同样的道理,stm32的flash空间也虚拟成U盘,这样我想更新程序就可以不必再依赖于下载器了,只要有根数据线连接usb即可。而且,我还可以提前将一些应用备份到外部存储芯片中去,这样我想换个程序运行的时候将提前备份好的bin文件复制过去或者让其自动复制过去即可。
后来发现灯太亮了,又加了调光。

设计思路

我的设想还是16X16的点阵屏可以满足绝大部分的汉字。如果做大一点的话比如32X32的话也不是不可以,就是led灯太多了,难焊。而且PCB板的大小也超过10X10CM,嘉立创要收费。。。。容我思考了一秒钟后16X16的大小足以显示汉字,而且还可以用便宜点的芯片比如使stm32f103c8t6这样的。
(当时我用这块芯片的时候它价格还在疯涨,最后还是淘宝上搞的几块钱的,毕竟刚出来兜里比我脸还干净。)
在点阵屏的显示这块的思路主要就是利用整个GPIOB作为列数据,采用译码器选择性的让每一个列通电即可,只要显示的频率够快,人眼就分辨不清楚它在闪。
ykun0

硬件设计

原理图

单纯想着用32个io当然不可能啦,实际上我只用了20个io引脚来控制led灯,其中16个用于数据显示,刚好对应u16的数据,另外4个通过译码器来完成16线的切换。
ykun1

PCB

线好像也只能这样布了;
ykun2

3D图

ykun3
ykun4

焊接后的实物

led灯有点难焊,重新画了板做固定才焊接的间隙一致的,其他的还好。现在灯都有点生锈了。
ykun5

软件设计

首先是第一层应用软件,主要负责的事情就是将芯片变成U盘或者跳转到U盘的起始地址去运行bin文件。
ykun6
再然后就是所编写的bin文件内容主要是通过fatfs读取外部flash里面存储的字符串,再读取完成以后将字符串进行循环显示即可。不过再读取txt文件的时候遇到一个坑,,fatfs文件系统只能读取ANSI编码的文件,如果txt文件是UTF-8编码的话在读取中文的时候会报错
ykun7

U盘

我把芯片内部flash,以及外部剩余的15Mflash虚拟成U盘。
ykun8
外部flash中主要是一个备份文件跟一个txt文件。
ykun9
备份文件中还保存着我写着一些斌文件,不过主要是用来备份字库的;通过文件系统读取字库数据后再将其写到指定的地址上;
ykun10
芯片内部flash虚拟出来的这个盘主要用于存储要运行的bin文件,有优点也有缺点
优点:不需要下载器,只要有数据线就行、对bin文件的取名无要求;
缺点:在更新bin文件前要确保U盘里面是空的,否则的文件话就放不到指定位置运行了;(bin文件同名的话可以直接覆盖掉
ykun11
ykun12

实物显示

可惜了,这个平台传不了视频也传不了动图。。。
索性上个图片吧;(远一点会比较好看

ykun13

资源连接

原理图PCB以及软件链接

举报

相关推荐

0 条评论