时间过的很快,比赛马上就要结束了,一直没时间写总结,昨晚上加班后稍微写了点,弄得比较晚,早上又加了点。 这个设计从功能上来说是一个很简单的东西,就是从互联网获取了一些信息,再从LED点阵屏上播放出来。下面就简单地总结一下吧。 先列一个硬件清单: 1、 LED点阵双色屏(半屏16*64); 2、 STM8S103(和003一样用)最小系统板(作为LED屏控制卡); 3、 字库芯片(提供汉字显示); 4、 ESP12F模块(主控是ESP8266,用于获取网络信息); 5、 人体感应模块(实现节电功能); 6、 5V/3A电源适配器; 7、 电阻、电容、导线、插针等等基本元件和耗材。 由于硬件电路比较简单,就没有画PCB,直接搭棚了;主要说下软件部分。 LED点阵屏的驱动。用STM8S103做主控,从功能上做了兼容设计,暂时使用不同的通讯协议加以区分:自由协议用作网络信息展示,MODBUS-RTU用作串口助手屏,这里就不介绍怎么用MODBUS命令设置串口助手屏的方法了,具体见程序。 驱动HUB08接口的双色点阵屏(半屏16*64)的显示;最高250帧的刷新频率(目前使用的是200帧,宏定义可调);亮度0-15可调(已经根据人眼优化);做了上下左右4个方向的字符串移动动画效果;并且根据网络信息展示内容,定制了一些显示效果。 上电是默认是网络信息展示功能,任何时候如果通过MODBUS协议传输有效的命令过来,则切换为串口助手屏功能,否则延时一分钟后退回到网络信息展示功能。这些功能在软件上都已经完成,不过由于硬件上串口被ESP12F模块占用,实际上串口助手屏功能暂时不能同时使用。等以后有时间了想再用一个ESP12F模块做一个无线串口发送器,把信息输入到这个ESP12F模块的串口,此模块再把信息通过WiFi转发到连接LED屏的ESP12F模块,再由它转成MODBUS协议传给STM8S103并显示,这样就实现了两个功能同时使用,并且还是无线串口。 由于需要显示中文,加了字库芯片,单片机RAM不够大(大部分用于显示缓冲、串口缓冲和显示内容缓冲),字符串长度也不固定,所以显示字符动画时都是实时地从字库芯片里取出再显示,这样对于STM8S103来说压力很大。 综合下来,STM8S103的flash和ram就用掉了大部分了,Code=7023,Ram=937,包括CPU也是满负荷运行,好在不是工业控制环境,就无所谓了,所以如果是商用或者追求更多功能或特效的话,STM8S103是不够的。 正因为小马拉大车,程序设计时一定要把握好逻辑顺序,要不然显示就会不稳定,所以刷新每一行LED都必须要定时间中断优先运行。其他功能都必须让道,这是非常关键的,就算是换了性能更好的单片机也一样。 ESP12F模块的网络信息获取。使用了开源的nodemcu进行二次开发,开发语言是Lua,第一次用,虽然程序写的不好看,但是学到了很多。 完成的功能有:网页WiFi配置、SNTP时间的同步、获取实时天气预报信息、获取实时新闻热点标题信息、获取今日油价信息。其实这些网络信息的获取方法大同小异,所以就挑了这几个“有点用”的信息用于展示了,开发过程主要是熟悉了nodemcu、Lua的使用、以及一些网络应用。 由于不熟悉,一些基本的操作也花了好多时间,比如怎么使用开源固件,怎么编辑上传Lua脚本,Lua如何使用,如何获取网络资源,怎么解决并防止程序弄错了老是重启等等的细节。 节电功能的实现。用人体感应模块,人来了就开,人走了延时再关。由ESP12F模块采集信号并整合成标志发给STM8S103,控制LED屏的显示开关。同时也决定ESP12F模块是否更新网络信息。 还有些细节就不一一在这里说了,源程序过几天分享给大家(毕竟比赛还没结束,对同个题目的参赛者不公平),有兴趣的同学可以看看,也可以做一个玩玩。有好点子也可以一起完善,有写的不好的地方也请尽量指出,一起学习成长!
|
你好,代码已经上传,27楼