大家好,今天我们带大家一起再来复习一下8*8数码矩阵,在前面的章节中,我们已经给大家介绍过。今天呢,我们换一种方法来实现。
这一节我们学习如何使用我们的ESP32开发板控制带MAX7219驱动的8x8LED点阵模块。
二、环境
ESP32 + MAX7219驱动的8x8LED点阵模块 + Thonny IDE + 几根杜邦线 + Win10
接线方法:
三、代码
from machine import Pin
import time
# 准备数据引脚
pin_clk = Pin(14, Pin.OUT, value=1) # 时钟,上升跳变时数据位移锁存
pin_cs = Pin(15, Pin.OUT, value=1) # 上升跳变时,数据全部推入锁存
pin_din = Pin(13, Pin.OUT, value=1) # 待移入的数据
def write_byte(data):
"按位移入数据"
for i in range(8):
pin_clk.off()
pin_din.value(1 if ((data << i) & 0x80) else 0) # 从高位开始送数据
pin_clk.on()
def write_data(addr, data):
"向模块写入地址与数据"
pin_cs.off()
write_byte(addr)
write_byte(data)
time.sleep_us(5)
pin_cs.on()
def init_max7219(brightness):
"初始化模块"
write_data(0x0c, 0x00) #关断处于关闭状态
write_data(0x0f, 0x00) #不测试
write_data(0x0b, 0x07) #扫描所有位码
write_data(0x0a, brightness) #亮度0x00到0x0f
write_data(0x09, 0x00) #不译码
write_data(0x0c, 0x01) #关断处于显示状态
# 定义数据与初始模块
time.sleep_ms(50)
col = [0x00, 0x66, 0x99, 0x81, 0x42, 0x24, 0x18, 0x00] # 心形对应的LED
# 爱心灭到最亮,再从最亮到灭
def main():
while True:
for i in range(0x00,0x10,1):
init_max7219(i)
time.sleep(0.1)
# 写图案
for n in range(8):
write_data(n+1, col[n])
for i in range(0x0f,-0x00,-1):
init_max7219(i)
time.sleep(0.1)
# 写图案
for n in range(8):
write_data(n+1, col[n])
if __name__=="__main__":
main()
演示效果:
四、参考资料
感谢这位博主的精彩文章:
某宝链接如下:
资料下载链接:
链接:https://pan.baidu.com/s/1FPt9TpAJYvst42ufmPhhNA 提取码:zcz2
产品特性:
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED,占用微处理器资源少。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流,驱动能力强。MAX7219 的段驱动有回流限制可以减少EMI;MAX7219 的串行口(可达10MHz)和SPI兼容;每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
产品参数:
1.单个模块可以驱动一个8*8共阴点阵
2.模块工作电压:5V
3.模块尺寸:长5厘米X宽3.2厘米X高1.5厘米
4.带4个固定螺丝孔,孔径3mm,可使用本店M3铜柱固定
5.模块带输入输出接口,支持多个模块级联
使用说明:
VCC电源正5V;GND电源负;
DIN引脚串行数据输入口,在时钟上升沿时数据被载入内部的16位寄存器;
CS引脚片选端,该端为低电平时串行数据被载入移位寄存器,连续数据的后16位在CS端的上升沿时被锁定;
CLK引脚时钟数据输入端,最大速率为10MHz,在时钟的上升沿,数据被移入内部移位寄存器,下降沿时,数据从DOUT端输出;
DOUT引脚级联串行数据输出端,从DIN输入的数据在16.5个时钟周期后在此端有效,当使用多个MAX7219用此端方便扩展。
1.模块左边为输入端口,右边为输出端口;
2.控制单个模块时,只需要将输入端口接到CPU;
3.多个模块级联时,第1个模块的输入端接CPU,输出端接第2个模块的输入端,第2个模块的输出端接第3个模块的输入端,以此类推...
注意:
正确接线!切勿将正负接反,使板子电子器件烧毁。