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

news2024/12/25 23:58:19

书接上回,上一篇中我们聊到了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,打開/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenWrt之IPv6设置详解

文章目录前言网络结构1. WAN口设置2. LAN口设置3. NAT6配置4. 接口状态5. 网站测试6. 关于端口放行后话前言 最近电信终于肯下发v6的地址了, 得为路由器配置一下了, 之前一直是处于关闭的状态, 今天重新设置回去. 从此有了v4与v6双公网地址. 网络结构 光猫设置为桥接路由器设…

金三银四必看的软件测试面试题宝典,背完offer随便拿

怎么来设计测试方案根据测试需求&#xff08;包括功能需求和非功能性需求&#xff09;&#xff0c;识别测试要点&#xff0c;识别测试环境要求&#xff0c;安排测试轮次&#xff0c;根据项目计划和开发计划做整体的测试安排。 被测试的特性&#xff1a;通过对需求规格说明书进行…

【软件测试】一位转型测试开发成功,工作两年测开岗的经验总结......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小伍&#xff1a; 在…

win10电脑性能优化设置

win10电脑性能优化设置 目录win10电脑性能优化设置1.桌面图标显示2.wini2.1 “系统”2.1.1专注助手 关2.1.2 电源和睡眠 设置为从不2.1.3 存储 开2.2 网络和Internet2.3 个性化2.4 应用2.5 账户2.6 游戏2.7 隐私墨迹书写和键入个性化&#xff1a;关活动历史记录&#xff1a;全部…

怎么样用香港主机搭建游戏网站

香港是全球主要的互联网骨干节点&#xff0c;拥有质量较高的网络基础设施&#xff0c;在网络速度和稳定性方面表现良好。因此&#xff0c;使用香港主机搭建游戏网站可以使用户在游戏中的体验流畅且基本不会延迟情况。本文将向用户解释如何使用香港主机搭建游戏网站。在搭建游戏…

python gui构造openai api可视化页面

背景&#xff1a;最近chatgpt很火&#xff0c;前几天也想注册体验一下&#xff0c;一顿操作之后&#xff0c;卡在该国家不支持。最后发现自己的代理开在香港&#xff0c;改在漂亮国就行了。虽然有chatgpt可以用&#xff0c;但是小平是自己封装了一个&#xff0c;我不能输。正好…

基于Spring Boot开发的社区物业管理系统

文章目录项目介绍主要功能截图&#xff1a;登录车位收费管理物业收费管理投诉信息管理车位管理保修统计分析部分代码展示设计总结项目获取方式&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料…

使用Nginx解决跨域问题

目录 使用Nginx解决跨域问题 1、修改浏览器、客户端访问地址 2、在nginx.conf配置文件需配置server 3、在Nginx中配置客户端访问的接口&#xff08;按照规则或通配&#xff09;&#xff0c;并设置被代理的服务器 4、在Nginx中统一配置客户端访问的头部信息&#xff08;解决…

Power BI 常见数据导入错误(查询超时、找不到文件、数据类型错误、找不到表格)

本系列的文章&#xff1a; 《Power BI windows下载安装流程&#xff09;》《Power BI 11个必学官方示例数据案例&#xff08;附下载链接&#xff09;》《Power BI 数据导入&#xff08;SQL Server、MySQL、网页数据&#xff09;》《Power BI 存储模式介绍&#xff08;导入、Di…

C#将非模态窗体置顶显示方法

Winform 窗口有一个属性&#xff1a;TopMost&#xff0c;表示该窗体是否始终显示在此属性未设置为 true 的所有其他窗体之上&#xff1b;我的理解就是&#xff0c;如果一个 Winform 项目有多个窗体&#xff0c;其中有一个窗体的 TopMost 属性设为 true 了&#xff0c;而其他窗体…

Spring 中,有两个 id 相同的 bean,会报错吗

我们知道&#xff0c;spring容器里面的bean默认是单例的&#xff0c;所以id是唯一的。但是需要注意&#xff0c;同一类型的bean可以有不同的id&#xff0c;比如有id1->bean&#xff0c;也可以有id2->bean。 下面再来详细回答一下文章的问题。 首先&#xff0c;在同一个…

汽车DTC故障内码与标准故障码的解析与转换

目录 一、故障内码与标准故障码的解析 &#xff08;1&#xff09;故障内码的信息格式与解析 &#xff08;2&#xff09;故障内码中DTC状态的解析 &#xff08;3&#xff09;故障内码与标准故障码之间的对应关系 二、故障内码与标准故障码的转换代码 一、故障内码与标准故障…

数字化项目管理如何推动项目快速上市?【洞见6】

AIGC时代的到来&#xff0c;标志着互联网从信息化的轻工业时代正式进入了互联网数字化的重工业时代。随之迎来的是人工智能技术的广泛引用&#xff0c;如何在项目管理中应用也是一个挑战&#xff0c;因为的项目本身的特点就是变化、复杂。笔者在为了进行突破&#xff0c;开始不…

vue父子组件传值不能实时更新

最近做项目&#xff0c;遇到个大坑&#xff0c;这会爬出来了&#xff0c;写个总结&#xff0c;避免下次掉坑。 vue父子组件传值不能实时更新问题&#xff0c;父组件将值传给了子组件&#xff0c;但子组件显示的值还是原来的初始值&#xff0c;并没有实时更新&#xff0c;为什么…

基于TCP协议的文件传输系统

最简单的一对一的服务端网络端通信(socket) Socket&#xff08;IP地址&#xff1a;端口号&#xff09;&#xff0c;例如&#xff1a;如果IP地址是210.37.145.1&#xff0c;而端口号是23&#xff0c;那么得到套接字就是(210.37.145.1:23) socket可以理解成计算机提供给程序员的接…

R语言实现常用的5种分析方法(主成分+因子+多维标度+判别+聚类

R语言多元分析系列之一&#xff1a;主成分分析 主成分分析&#xff08;principal components analysis&#xff0c; PCA&#xff09;是一种分析、简化数据集的技术。它把原始数据变换到一个新的坐标系统中&#xff0c;使得任何数据投影的第一大方差在第一个坐标&#xff08;称为…

Android Application启动流程

详细流程分析 从 ActivityThread.java 的main方法开始看&#xff1b; public static void main(String[] args) {...ActivityThread thread new ActivityThread();thread.attach(systemfalse, startSeq);//1... }进入attach方法&#xff1b; if(!system){final IActivityMa…

flask配置https协议

感谢https://blog.csdn.net/qq_33934427/article/details/127456673&#xff0c;文中多有参考再实践一、要用https协议需要有ca证书&#xff0c;在windows10先下载windows版本openssl&#xff0c;地址如下https://share.weiyun.com/vfjVrMAb我是64位的选择下载完毕安装后配置环…

vmvare NAT模式设置

一、前言 这里为什么会写关于设置vmvare NAT模式的笔记呢&#xff0c;以前使用linux虚拟机都是使用桥接模式获取IP地址。最近出差仙林医院&#xff0c;发现使用无线网络&#xff0c;虚拟机桥接获取不到IP地址&#xff0c;所以使用NAT模式。 二、设置步骤 1.设置网络适配器 …

hudi系列-文件布局(file layout)

概念 hudi的文件布局是能实现增量查询、数据更新等特性的基础&#xff0c;每个hudi表有一个固定的目录&#xff0c;存放元数据(.hoodie)以及数据文件&#xff0c;其中数据文件可以以分区方式进行划分&#xff0c;每个分区有多个数据文件(基础文件和日志文件)&#xff0c;这些数…