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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 1.2 struct和class最本质区别_马鸿凯_新浪博客

    C 43 43 中的struct对C中的struct进行了扩充 xff0c 它已经不再只是一个包含不同数据类型的数据结构了 xff0c 它已经获取了太多的功能 struct能包含成员函数吗 xff1f 能 xff01 struct能继承吗
  • 在 VSCode 终端里无法使用命令

    问题原因 xff1a 导致 vscode 的终端里执行命令报错 xff0c 但在 cmd 里能正常执行 的原因是 vscode 终端不能使用命令了 解决思路 xff1a 令 vscode 终端能够使用命令 解决方案 xff1a 1 右击 V
  • 使用 FFT 进行频谱分析

    下面的示例说明了如何使用 FFT 函数进行频谱分析 FFT 的一个常用场景是确定一个时域噪声信号的频率分量 首先创建一些数据 假设是以 1000 Hz 的频率对数据进行的采样 首先为数据构造一条时间轴 xff0c 时间范围从 t 61 0
  • CRC-16 / MODBUS 校验计算方法

    CRC 16 MODBUS xff1a 1 xff09 CRC寄存器初始值为 FFFF xff1b 即16个字节全为1 xff1b 2 xff09 CRC 16 MODBUS的多项式A001H 1010 0000 0000 0001B H
  • ZYNQ下驱动ADF5355试验成功

    前两个集BLOG分别给出了ADF5355接口的VERILOG设计实现以及设置频率的C语言算法 xff0c 我今天试验了以 xff0c 试验成功了 首先很重要的是ADF5355寄存器配置的设置 xff1a 可以在这个基础上修改输入以及输入频率
  • 基于sdrpi的openwifi实践1:编译openwifi-hw

    www github com open sdr openwifi hw是openwifi的硬件项目 hw应该就取haraware之意思 xff0c 包含就是支持多个板子的项目以及openwifi作者写的一系列的简洁好用工具软件 我在做sdr
  • lmx2594的verilog驱动

    应朋友请求写了一个纯VERILOG的LMX2594的配置 首先写一个SPI的接口 xff1a lmx2594 spi master lmx2594 spi master clk rst W0R1 pin mosi pin sclk pin
  • ZC706P+ADRV9009连接RADIOVERSE详解之三

    做好SD卡映像 xff0c 连接好硬件之后 xff0c 我们就可以尝试软件操作了 步骤1 xff1a 设置好网络 打开软件界面我们看到 xff0c 板子默认的地址为192 168 1 10 端口号为55555 我们一定也设置跟板子连接的以太
  • PCIE的AXI LITE MASTER端使用

    参考文章 xff1a https blog csdn net mcupro article details 121668833 spm 61 1001 2014 3001 5501 近期计划设计一个PCIE接口的使用AD9361芯片的SDR
  • ZC706P试验PL_DDR3内存条的步骤方法

    ZC706P 板卡完全兼容XILINX官方的ZC706 当然也支持PL外挂的1G的DDR3内存条 xff0c 这个片BLOG我提供从官方下载的一个文档和一个项目 xff0c 演示一下验证DDR3的步骤 步骤1 xff1a 准备好板子 xff
  • 【ZedBoard实验随笔】OV7670 摄像头 简单总结

    1 xff0c OV7670 有一大堆寄存器需要配置 xff0c 这些配置可以参考别人已经做好的代码 2 xff0c OV7670 设置为640 480 16的分辨率 xff0c 30帧每秒 xff0c 就是30FPS xff0c 每一个R
  • AXI STREAM ,AXIS总线的理解

    全兼容ZEDBOARD 开发板子 SYSCLK TAOBAO COM 1 xff0c VALID和READY 是所有AXI总线必须有的 xff0c VALID是MASTER告诉SLAVE数据已经展现在了总线上了 xff0c 你可以取走了 x
  • ZYNQ7 DACHE的重要操作

    Flush the SrcBuffer before the DMA transfer in case the Data Cache is enabled Xil DCacheFlushRange u32 TxPacket MAX PKT
  • OV7670摄像采集图像在VGA上显示的分析和实现,精确到每个时钟,每行代码。

    OV7670使用RGB565模式 xff0c 30FPS xff0c 采集分辨率为640X480 xff0c 保存在ZYNQ7芯片7Z020的内部BRAM VGA控制器在读出端读出数据 xff0c 并用12BIT的色彩深度现在VGA接口屏幕
  • Ubuntu 20.04 python2安装pip

    Ubuntu 20已经无法通过apt来安装python2的pip2了 xff0c 只能安装python3的pip 方法 先确保你有python2 暂时还是可以用apt安装python2 sudo apt install python2 下面
  • PetaLinux 2019.1详细安装步骤以及所需要文件

    这里主要根据UG1144文档 xff0c 这两天成功安装使用了PetaLinux的最新版本2019 1 一 xff0c 在虚拟机里安装Ubuntu16 04 1 xff0c 选Ubuntu 操作系统的版本是16 04 我最初尝试过18版本的
  • STC芯片在Keil中的添加与使用

    一 使用官方烧录工具 stc isp v6 88K exe在Keil中添加STC芯片 此烧录工具可在STC官网上下载 二 打开STC ISP软件 xff0c 选择右侧 Keil仿真设置 栏 三 选择 添加型号和头文件到Keil中 添加STC
  • boost 与 C++11 比较

    先不说boost的初始化表是多么怪异的形式了 c 43 43 11用大括号一括起来就OK了 auto 和 boost auto 差别太大了 xff0c 必须得告诉boost auto宏一个类型 xff0c 而非编译器本身的推断 xff0c
  • C++——struct和class的区别

    在C语言中struct是一种数据类型 xff0c 那么就肯定不能定义函数 xff0c 所以在面向c的过程中 xff0c struct不能包含任何函数 否则编译器会报错 而在C 43 43 中 xff0c 其特性也有了新发展 xff0c 就拿
  • roslaunch使用示例

    本文是看了学长ROS 的 roslaunch 中 xml 相关要点 文章之后做了小改动 xff0c 主要是对 roslaunch 文件的简单总结 需要完成的前序工作是已经创建了 catkin 工作空间 xff1b 创建了 catkin 程序

随机推荐

  • 四旋翼的运动原理及几个飞行问题

    四旋翼的运动及原理 飞行的问题 调试 四旋翼飞行器通过调节四个电机转速来改变旋翼转速 xff0c 实现升力的变化 xff0c 从而控制飞行器的姿态和位置 四旋翼飞行器是一种六自由度的垂直升降机 xff0c 但只有四个输入力 xff0c 同时
  • 以太网数据包长度限制

    我们使用以太网进行数据传输 xff08 UDP TCP xff09 xff0c 数据包的大小是有限制的 xff0c 并不是多长都可以 TCP IP协议从下到上包含 xff1a 链路层 IP层 传输层 应用层 链路层 xff1a 链路层的数据
  • 串口接收完整一帧数据包的3种方法

    本文介绍3种使用串口接受一帧完整数据包的方法 xff0c 串口接收数据是字节接收的 xff0c 串口每接收1字节数据 xff0c 产生一个串口中断 xff0c 我们在中断中将接收到的数据存放到buf中进行保存 xff0c 但是数据的发送和接
  • 补码原码转换

    本文主要讲述补码和原码之间的换算 1 原码 转 补码 xff1a 正整数的补码是它本身 xff0c 即 1的原码是0000 0001 xff0c 补码 还是 0000 0001 负整数的补码是符号位不变 xff0c 其余位按位取反 xff0
  • 有符号数与无符号数之间的转换

    本文讲解有符号数和无符号数之间的转换 针对同一数据类型有符号数和无符号数之间的转换 xff0c 例如 int 和 unsigned int 之间和 char 和 unsigned char 之间 这种情况下 xff0c 二者之间的数据类型长
  • Ubuntu由于修改etc/profile文件导致开机无法登陆问题解决办法(仅供参考)

    在安装jdk或者arm linux gcc等开发工具时需要修改profile xff0c 一不小心导致无法正常登录系统 xff0c 这时候可以试试用以下办法解决 xff1a 1 进入ubuntu登录页面 xff0c 按alt 43 ctrl
  • 一文看懂,用示波器查看串口UART的波形,什么是数据位、起始位、奇偶校验位

    先介绍一些概念 起始位 先发出一个逻辑 0 的 信号 xff0c 表示传输数据的开始 校验位 xff1a 数据位加上这一位后 xff0c 使得 1 的位数应为偶数 偶校验 或奇数 奇校验 xff0c 以此来校验数据传送的正确性 就比如传输
  • Could not get lock /var/lib/dpkg/lock 问题解决方法

    今天在ubuntu上安装sqlite 时 xff0c 执行命令sudo apt get y install sqlite3 时 xff0c 系统提示 xff1a Could not get lock var lib dpkg lock op
  • Linux 应用开发之系统调用

    系统调用 xff08 System Call xff09 是操作系统提供给用户程序调用的一组 特殊 函数接口 Linux 系统分为内核空间和用户空间 xff0c 用户空间只能通过系统调用接口与内核空间进行通信 Linux 系统提供了两种方式
  • Linux Qt 开发之多线程

    Qt 应用程序中所有的界面响应事件都在一个主线程中运行 xff0c 当我们去调用QApplication对象的exec 方法时 xff0c Qt就不断去循环查询当前的事件队列中有没有事件发生 xff0c 如果有则转去执行对应的槽函数 xff
  • Linux根文件系统的制作(转载)

    Linux根文件系统的制作 什么是文件系统 计算机的文件系统是一种存储和组织计算机数据的方法 xff0c 它使得对其访问和查找变得容易 xff0c 文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念 xff0
  • vector

    原网址 xff1a http www cnblogs com zjfdlut archive 2010 11 13 1876409 html 个人菜鸟 xff0c 发表下对头文件包含顺序的看法 xff1a 首先是常规的包含 xff1a 1
  • add_libraries, add_executable, target_link_libraries, link_libraries用法

    相关命令用法 add libraries将指定的源文件生成库文件 add executable将指定的源文件生成可执行文件 target link libraries跟在add xxxx后 xff0c 表示在上述两命令生成的文件后进行外部库
  • cmake 链接动态链接库

    使用相对路径的时候 xff0c 你要让cmake能够搜索到找到你动态库 xff0c 就像直接使用gcc g 43 43 来链接的时候一样 xff0c 要使用 L来指定第三方库所在路径 cmake可以使用 LINK DIRECTORIES 命
  • TI毫米波雷达芯片(AWR2243)MIMO模式设置

    1 AWR 2243 支持的MIMO模式 awr 2243为三发四收 xff0c 支持时分多路复用 xff08 TDM xff09 MIMO模式 xff0c 以及三个发射天线同时工作的BPM MIMO模式 xff08 二进制调制相位调制 x
  • Odroid U3 烧写镜像文件

    点击打开链接 用SD卡烧写镜像文件 1 在liunx 终端建工作目录 xff1a mkdir linux img cd linux img 2 下载镜像 wget http odroid in ubuntu 14 04 1lts ubunt
  • win下批处理控制扩展屏幕

    仅电脑屏幕 displayswitch internal 复制 displayswitch clone 扩展 displayswitch extend 仅第二屏幕 displayswitch external 引用来源 xff1a http
  • ubuntu 安裝deb_.deb文件如何安装,Ubuntu下deb安装方法图文详解

    deb包是Debian xff0c Ubuntu等Linux发行版的软件安装包 xff0c 扩展名为 deb xff0c 是类似于rpm的软件包 xff0c Debian xff0c Ubuntu系统不推荐使用deb软件包 xff0c 因为
  • day3. -2 NX的SPI操作

    1 NVIDIA在线文档 https docs nvidia com jetson l4t index html page Tegra 20Linux 20Driver 20Package 20Development 20Guide hw
  • (二)随处可见的LED广告屏是怎么工作的呢?代码实现

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