(二)随处可见的LED广告屏是怎么工作的呢?代码实现

书接上回,上一篇中我们聊到了LED点阵屏的工作原理和一些电气参数。本篇以第一篇为基础,对软件层面进行展开,同时也为下一篇接入GUI做铺垫。文章较第一篇有所增长,大概需要5~7分钟可以看完。

【目标】

能够随心所欲的显示我们想要的图像,为此我们分三步来进行。限于阅读体验和展示效果,软件部分将以伪代码、图片的形式进行展示。实际代码会在文后附上gitee的仓库地址。

【行列控制驱动】

上一篇中提到点阵屏的工作原理:使用HC595来控制列数据,译码器控制行显示,利用视觉暂留,形成整幅图案。其中HC595是一个组合时序,译码器是一个组合逻辑。

HC595驱动

从时序图中我们知道:数据输入引脚SI在SCK的上升沿时写入到移位寄存器中,在SCLR的上升沿完成锁存,在使能引脚拉低时完成并口数据输出。

类比到点阵屏的控制上,数据引脚R1、R2在CLK的上升沿写入移位寄存器,在LAT的上升沿完成数据锁存,在EN低电平时完成并口数据的输出。

因点阵屏列数据控制上串联了多个595,所以最后的锁存和输出,我们放到整行的显示控制中。

伪代码如下:

1.拉低CLK
2.准备数据,取出单个byte的其中一个bit
3.将bit输出至R1、R2所连接的GPIO
4.拉高CLK,产生上升沿

1~4循环8次发送出去一个byte

串转并输出

通过四个IO来表示一个十六进制数即0~15,这16个数。

1.找到定义的4个连续的IO口
2.赋值

【整屏显示输出】

基础的行、列驱动搞定后,下边就是对整屏的输出控制。上一篇中讲到32*128需要128/8=16个HC595来做列数据的刷新,通过R1、R2来分别控制上下两个16*128的显示区域。伪代码如下:

1.循环16次HC595的数据发送
2.使用译码器选择当前行
3.产生一个锁存信号
4.使能HC595的并口输出
5.延时一段时间,用于视觉暂留
6.关闭HC595的并口输出,便于下次数据传输

1~6循环16次,完成16 + 16行的数据刷新

填坑:

这里填一下第一篇留下的坑,第一篇中提到1/16扫的亮度比较低,一般用在室内。在这里我们结合上述代码做一下分析:人眼看电视或者动态图像时,一般的帧数不能低于24帧/秒。以我们实验的这个点阵屏为例来讲,单行最大的显示延时时间是1/24/16约等于2.6ms。如果换成1/4扫,单行最大的显示时间是1/24/4约等于10ms。LED处于点亮状态的时间增加了4倍,继而整体亮度也会随之变大。

我们使用一个OLED屏来模拟一下数据的刷新,可以看到,1/4扫单行亮起的时间明显长于1/16扫。

整屏输出测试:

为了测试我们的底层驱动,我们对上述代码做一下修改,主要改动的是for循环部分。让屏幕每间隔8个像素亮、灭交替显示。

实际显示效果:

【图像取模到实际显示】

以上两节,我们已经能够点亮屏幕,下一步就是点睛之笔,如臂使指的控制它。

我们通过取模软件,自由绘制一幅32*128的点阵图像,之后将生成数组导入到程序中,看屏幕是否能按照我们绘制的图像进行显示。

取模软件我们使用PCtoLCD2002,选择图像模式,新建一个宽度是128,高度是32的图像。

PCtoLCD2002图像编辑界面

在选项中配置取模方式:阴码、逐行式、逆向(低位在前)、C51格式。

阴码:标识LED灯珠是共负极,1是亮,0是灭。

逐行式:参看整屏输出的伪代码,我们是一行一行的刷新数据的。

逆向(低位在前):HC595的驱动代码中,我们先发送的是低位。

C51格式:使用C语言的格式进行数据输出。

我们现在拖动鼠标在32*128的画布上画个图案。

之后我们点击生成、保存字模,生成的取模数据如下。我们在程序中创建一个二维u8型数组来存储这些数据。

之后将数组作为参数传入整屏输出控制函数“led_data_update”中,实际显示如下:

【结束】

到此如何驱动LED点阵屏已经基本完成,小伙伴们可以自己尝试画个图形,或者将绘制好的图案数组放到评论区,我们来帮大家呈现到屏幕上。

在之后的第三篇中,我们会尝试将一个适用于OLED屏幕的GUI移植到LED屏幕的显示控制上,通过GUI来控制点阵屏的显示。

see you soon!

注:文章中部分图片来源于网络,如侵权请联系删除。

gitee代码仓:https://gitee.com/tuZiLiaoDianLu/led_drive

<第二篇END>


道阻且长,行则将至。

欢迎大家关注“兔子聊电路”,会不定期的分享一些遇到的电路问题和一些有趣的电路设计,更欢迎大家一起交流电路设计上的心得。同时,也会分享一些有意义的非技术类书籍。


【好物推荐】

1九阳榨汁机家用多功能小型便携式水果电动榨汁杯迷你炸果机果汁机【包邮】

【推荐理由】30天热卖2千+, 赠送运费险退货无忧!

【券后价】 84.9 元

【优惠券】 25 元

5覆ZHI5$IGYRdS0kZsH$:// MF3084,打開/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图是一种非常重要的数据结构,它可以用来描述各种杂的关系和结构。下面我将描述一些身边中与图有关的事物,并探索哪些应用或内部算法用到了图结构。 1. 社交网络 社交网络是一个典型的图形结构,其中每个用户可以被视为一个节点,用户之间的关系可以被视为边。通过分析社交网络中的图形结构,可以实现用户推荐、信息传播和舆情分析等功能。在社交网络中,常用的图算法包括广度优先搜索和最短路径算法等。 2. 电力网络 电力网络也是一个典型的图形结构,其中每个发电站和变电站可以被视为一个节点,相邻的发电站和变电站之间可以被视为边。通过分析电力网络中的图形结构,可以实现电力供应、故障排查和优化运营等功能。在电力网络中,常用的图算法包括最小生成树算法和最短路径算法等。 3. 地图导航 地图导航也是一个典型的图形结构,其中每个道路和交叉口可以被视为一个节点,相邻的道路和交叉口之间可以被视为边。通过分析地图导航中的图形结构,可以实现路径规划、交通状况预测和智能驾驶等功能。在地图导航中,常用的图算法包括最短路径算法和最小生成树算法等。 4. 计算机网络 计算机网络中的路由器和交换机也可以被视为图的节点,网络之间的连接可以被视为边。通过分析计算机网络中的图形结构,可以实现网络拓扑分析、带宽分配和网络优化等功能。在计算机网络中,常用的图算法包括最短路径算法和最小生成树算法等。 综上所述,图是一种非常重要的数据结构,它可以用来描述各种复杂的关系和结构。在实际应用中,开发者可以根据具体的问题需求和性能要求选择合适的图形结构,并采用相应的算法来实现数据的处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值