本篇文章并不完善,目前可能会有错误。

仅供个人参考。

暂时无代码,后续更新代码!


 首先用的是单色LED点阵屏模块

8*8点阵屏就如图所示,共阴极和共阳极两种。但也都差不多。

点亮 点阵屏 的方法有很多

①可以直接接到单片机的IO口,就是占用的IO口多了些,需要16个,好处就是比较简单。

②可以用八位锁存器进行控制,列如74HC573。此时只需要9个IO口就能实现点亮LED。好处就是比第一种方式简单,而且占用IO口较少。

③可以用38译码器,但是一次刷新只能显示个别点,不能全显示。不推荐,但可以用。只需要6个IO端口。

④使用位移缓存器74HC595,可将串行输入转化为并行输出,并且可以级联,只需占用3个IO端口。

⑤使用MAX7219多位LED显示驱动器。可级联,只需3个IO端口。除了贵点别的还行。

(假如要使用MAX7219显示的话,可使用Max72xxPanel库,这样一来就比较简单了)

GitHub - markruys/arduino-Max72xxPanel: Arduino interface for Adafruit-GFX to control a set of 8x8 LEDs with a MAX7219 or MAX7221https://github.com/markruys/arduino-Max72xxPanel

https://github.com/markruys/arduino-Max72xxPanel

先看看74HC595吧,觉得这个芯片还可以。

74HC595输出引脚为三态输出引脚(高电平、低电平、高阻态)。

查看的是 深圳市富满电子 提供的关于 74HC595D 的数据手册

 哎嘿??10、13引脚啥都没做?这就是把 RST 和 ENABLE 直接砍掉了吧。

相比东芝提供的数据手册:

可以看出10脚SCLR#的逻辑功能是R,13脚G#的逻辑功能是EN3。推测是RST和ENABLE功能,并且都是低电平有效。

经查,10脚SCLR#是移位寄存器清零端。13脚G#是输出使能端。

使用时只需将SCLR#接入高电平,即不使用清零功能,清零可由程序清零。G#直接接地,永远使用输出使能端。

这俩引脚无关紧要。还是按照富满的手册看即可。

主要就仨脚和单片机相连

(不用管每个公司标注的一不一样!只要芯片型号一样,引脚就一样的功能。)

引脚 符号 功能
11 SCK 移位寄存器时钟,上升沿移位(数据输入时钟线)
12 RCK 锁存寄存器时钟,高电平存储(锁存器存储时钟线)
14 SER 串行数据输入端
9 Q7' 串行数据输出端

真值表

SCK RCK 功能
X 移位寄存器存储。Qn=Qn-1
X H 存储移位寄存器的值

逻辑:

工作时序图:

一定要记住:移位寄存器哈 ~  后来的数据就把以前的数据拱掉了。

第一个移位寄存器的数据被挤出来后,会从输出口输出,给第二个寄存器。

这就表示,如果4个74HC595串联,尾部的595的数据是最先传入595的连接链的。经过位移4*8=32次后,方可设置RTC使其共同输出数据。

示例:

MAX7219

这个芯片查了一下,有点小贵。可能因为最近什么芯片都涨钱的问题。

MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器 与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。

8×8点阵就是64个独立的LED。

典型应用电路

时序图

数据结构

串行数据在 DIN 输入 16 位数据包,无论 LOAD 端处于何种状态,在时钟的上升沿数据均移入到内部 16 位移位寄存器。

对 MAX7221 来说,无论数据输入或输出LOAD必须为低电平。然后数据在LOAD的上升沿被载入数据寄存器或控制寄存器。LOAD端在第 16 个时钟的上升沿同时或之后,下个时钟上升沿之前变为高电平,否则数据将会丢失。

在 DIN 端的数据传输到移位寄存器在 16.5 个时钟 周期之后出现在 DOUT 端。在时钟的下降沿数据将被输出。

数据位标记为 D0-D15。D8-D11 为寄存器地址位。D0-D7 为数据位。D12-D15 为无效位。在传输 过程中,首先接收到的是 D15 位,是非常重要的一位(MSB)。

数据寄存器和移位寄存器

下面是 14 个可寻址的数据寄存器和控制寄存器。

数据寄存器由一个在片上的 8×8 的双向SRAM来实现。它们可以直接寻址所以只要在 V+大于 2V 的情况下每个数 据都可以独立的修改或保存。

控制寄存器包括编码模式显示亮度扫描限制关闭模式以及显示检测五个寄存器。

掉电模式就不考虑了,用不到

MAX7219 掉电后,扫描震荡器关闭,所有段电流源和地连接,所有数字驱动与 V+相 连,所以显示熄灭。

MAX 7221 除了数字驱动呈现高阻抗以外其他都与 MAX7219 一样。 在数据和控制寄存器里的数据是不变的。

停机模式可以节省电源,当有一个连续的警报使显示器发光时,便能离开掉电模式。

为了满足掉电模式最低的工作电流,逻 辑输入应该在 GND 或 V+(CMOS 的逻辑电位)。

MAX7219 和 MAX7221 可以在小于 250μs 的时间内离开掉电模式。

在掉电模式下,显示驱动是可以编程的,而且在显示检测的时候不用考虑他是否在掉电模式工作。

Shutdown Register Format (Address (Hex) = 0xXC)

初始状态

在初始状态下,所有的控制寄存器将被重置,显示器熄灭,MAX7219/MAX7221 进入掉电模式。对显示驱动预先编程为以后显示而用。否则它将以最初的设置来扫描每一 位数据,不对数据寄存器里的数据进行扫描,显示亮度寄存器设置为最小值。

译码模式寄存器

用来设置对每个数据进行 B 型 BCD 译码或者不译码。寄存器中的每一位对应一个数据。逻辑高电平用来选择译码低电平取消译码。下表举例说明了译码控制寄存器的 格式。

Decode-Mode Register Examples (Address (Hex) = 0xX9)

当选择译码模式时,译码器只对数据的低四位进行译码(D3-D0),D4-D6 为无效位。 D7 位用来设置小数点,不受译码器的控制且为高电平。下表为 B 型译码的格式。

Code B Font

当选择不译码时,数据的八位与 MAX7219/MAX7221的各段线上的信号 一致。下表列出了每个数字对应的段位码。

No-Decode Mode Data Bits and Corresponding Segment Lines

亮度控制

MAX7219/MAX7221通过加在V+和ISET之间的一个外部电阻来控制显示亮度。段驱动电流一般是流入ISET端电流的100倍。这个电阻可以是固定的,也可以是可变电阻,通过前面板来控制以选择合适的亮度。其最小值为9.53KΩ ,它设定段电流为40mA。

显示亮度也可以通过亮度寄存器来控制。 数字控制显示亮度是通过亮度寄存器的低四位来控制的脉宽调制器来控制。调制器将段电流平均分为16个阶次,最大值为由RSET设置的最大电流的31/32,最小值为电流峰值的1/32 (MAX7221为15/16到1/16)。下表列出了亮度寄存器的格式。最小数据熄灭时间设置为时钟周 期的1/32。

扫描控制寄存器

扫描控制寄存器用来设定扫描显示器的个数,从 1 个到 8 个.它们将以 800Hz 的扫描 速率进行多路扫描显示。如果数据少的话,扫描速率为 8*fosc/N,N 是指需要扫描数字的个 数。扫描数据的个数影响显示亮度,所以不能将扫描寄存器设置为空扫描。表 8 列出了扫描 寄存器的格式。

Intensity Register Format (Address (Hex) = 0xXA)

 Scan-Limit Register Format (Address (Hex) = 0xXB)

如果扫描寄存器被设置扫描 3 个数据或者更少,个别的数据驱动将损耗过多的能量。所以,RSET 的值必须根据显示数据的个数来确 定,从而限制个别数据驱动对能里的浪费。 下列出了不同个数字被扫描时所对应的最大需求段电流。

Maximum Segment Current for 1-, 2-, or 3-Digit Displays

显示检测寄存器

显示检测寄存器有正常和显示检测两种工作状态。显示检测状态在不改变所有其他控 制和数据寄存器(包括关闭寄存器)的情况下将所有 LED 都点亮。在此状态下,8 个数据都会被扫描,工作周期为 31/32。下表列出了显示检测寄存器的格式。

Display-Test Register Format (Address (Hex) = 0xXF)

注意:MAX7219/MAX7221仍处于显示测试模式(所有LED亮起),直到重新配置显示测试寄存器用于正常操作。

不工作寄存器

当有多个MAX7219或MAX7221被串接使用时要用到不工作寄存器。把所有的芯片的LOAD/CS 端联接在一起,把相邻的芯片的DOUT和DIN连接在一起。DOUT是一个CMOS逻辑电平的输出口,他 可以很容易的驱动下一级的DIN口。例如,如果四个MAX7219被连接起来使用,然后向第四个芯片 发送必要的16位数据,后面跟三组NO-OP代码(如表2所示,十六进制的0xXX0X)。然后使LOAD/CS 端变为高电平,数据则被载入所有芯片。前三个芯片接收到 NO-OP 代码,第四个接收到有效数据。

假设:8×8点阵显示如图所示

第一行写显示的数据

往MAX7219写的数据

一位一位的写。

示意:

//伪代码
write(0x01);    //0000 0001
write(0x3c);    //0011 1100

假如串行写数据,和74HC595类似的。

假设点两个8×8点阵

数据写入

最后一行:右侧为先输入的数据

//伪代码
write(0x01);    //0000 0001
write(0x70);    //0111 0000write(0x01);    //0000 0001
write(0x3c);    //0011 1100

就也是一位一位的挤压过去的,移位寄存器嘛

//写数据//假如要写  0x3f    0011 1100CS = 0;//=======写0
CLK = 0;
DIN = 0;
CLK = 1;
//=======写0
CLK = 0;
DIN = 0;
CLK = 1;
//=======写1
CLK = 0;
DIN = 1;
CLK = 1;
//=======写1
CLK = 0;
DIN = 1;
CLK = 1;//=======写1
CLK = 0;
DIN = 1;
CLK = 1;
//=======写1
CLK = 0;
DIN = 1;
CLK = 1;
//=======写0
CLK = 0;
DIN = 0;
CLK = 1;
//=======写0
CLK = 0;
DIN = 0;
CLK = 1;CS = 1;

OK了,就这样吧 ~

我搞清楚原理啦 ~ 这就可以啦 ~ !

等我验证完程序在再这里附上程序!

用 MAX7219 点亮 8*8点阵显示屏(倒不如说是 8*8 LED模块)相关推荐

  1. 基于51单片机16*32点阵显示屏的设计与实现

    文章目录 设计要求 一.开发软件 1.Keil 2.Proteus 3.PCtol2002 4.Altium Designer 二.硬件部分 1.51单片机最小系统 2.LED点阵屏 3.74HC59 ...

  2. LED 16*16点阵显示屏

    实验二   16*16点阵 高亮度LED发光管构成点阵,通过编程控制可以显示中英文字符.图形及视频动态图形.所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库(如ASC16.HZ16) ...

  3. 8乘8led点阵显示数字_基于51单片机的8乘8LED点阵显示屏的设计

    1 基于单片机的 8*8LED 点阵显示屏的设计 随着单片机在各个领域的广泛应用,许多用单片机作控制驱动 LED 显示屏也应运产生.本系统设 计使用单片机 MCS-51 控制扫描方法实现 LED 点阵 ...

  4. 51单片机点阵c语言程序,使用51单片机点亮我们的点阵灯

    通过前面我们都知道点亮我们的不管是点阵,数码管,还是LED灯,不仅要熟悉我们的代码还要会看我们的原理图和真值表,所以我们如果真的要写代码倒是其次的,首先我们得学会看我们的原理图和真值表,但是认识那个我 ...

  5. 基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资料)

    资料编号:086 采用stm32单片机,可以通过蓝牙app控制点阵显示不同效果, 具体功能请看演示视频,全套资料齐全: 86-基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资 ...

  6. 手机led显示屏控制软件大全,手机led显示屏控制软件哪个好?

    led显示屏在我们的日常生活中随处可见,尤其是机场.车站都是通过led显示屏控制软件来展示相关车次及出发和到达时间.led显示屏控制软件还可以显示天气.日历.节日.婚庆等信息,非常实用. 1.屏掌控 ...

  7. Arduino Uno 使用MAX7219驱动单个8*8点阵LED模块

    还记得之前做的一个怦然心动的8*8点阵实验吗? 很多小伙伴都会觉得,插口都用完了还能用其他的功能吗? 现在使用MAX7219这个驱动模块 只占用3个IO口,就可以控制8*8点阵的显示,非常实用,简单. ...

  8. 计算机开机后黑屏一闪一闪怎么办,电脑屏幕老一闪一闪的,一会黑屏一会又亮了,有时...-显示屏闪黑屏重新开机...

    电脑屏幕老一闪一闪的,一会黑屏一会又亮了,有时... 电脑屏幕闪烁,一会黑屏的原因和解决方法 一:电脑主机故障 (1)主机电源引起的故障,检查电源并修理. (2)配件质量引起的故障.这时用替换法更换下 ...

  9. c语言c51单片机点亮8个灯,单片机课程设计-8个LED灯来回点亮

    <单片机课程设计-8个LED灯来回点亮>由会员分享,可在线阅读,更多相关<单片机课程设计-8个LED灯来回点亮(20页珍藏版)>请在人人文库网上搜索. 1.目录第一章 绪论-3 ...

最新文章

  1. 链表类型题目需要用到的头文件list.h
  2. mysql安装尝试创建新用户失败_Linux MySQL yum安装 创建新用户
  3. ElementUI中el-select下拉框选择不同的项控制其他控件(单选控件)的显示和隐藏
  4. 又拍网架构中的分库设计
  5. 了不起的女子力:美妆消费蓝海与趋势赛道
  6. C++7行代码实现求最大公约数
  7. ASP.NET Identity “角色-权限”管理 2
  8. 为什么说算法是程序猿“修仙”的必经之地?
  9. python自动化办公入门书籍-Python自动化办公实战教程2020最新带源码
  10. Android视频录制-MediaRecorder流程
  11. java .class 实例对象_Java产生Class类的三种实例化对象的方法
  12. Django之ORM性能优化
  13. 企业常用的RPC框架比较
  14. perl python json_JSON Perl
  15. 创建Django项目
  16. mysql front不能上到_mysqlfront不能上到Mysql服务器连接quot;192.168.5.*_MySQL
  17. 已解决:虚拟机安装windows server 2012 出现“找不到任何设备驱动程序。请确保安装介质包含正确的驱动程序”
  18. 2020年1月使用Mac线刷红米Note3全网通
  19. 用数字万用表精确测量小电阻
  20. RESTful风格的springMVC

热门文章

  1. 马云的又一招棋,平台基因怎么让飞猪成为出境游领军者
  2. 深入浅出XDL(三):framework
  3. 干货分享!杭州知名SEO公司清法网络告诉你如何玩转小红书
  4. 中电科45家研究所:北上第一梯队,南京、成都、合肥和重庆第二梯队
  5. Flutter练习:实现自定义的分页指示器
  6. 产品取名——中国IT产品命名奇观
  7. 人工智能有那三样核心要素?痛点又在那里呢?
  8. DDL、DML介绍及常用语句
  9. python如何定义带有可选参数的函数_python中如何正确调用带可选参数的函数
  10. JS可选链操作符 (?.)