这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】+pico驱动点阵屏

共3条 1/1 1 跳转至

【换取手持数字示波器】+pico驱动点阵屏

专家
2024-04-07 00:16:51   被打赏 40 分(兑奖)     打赏

      MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。MAX7219上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。MAX7219和微处理器只需三根导线连接,每位显示数字有一个地址由微处理器写入。允许设计者选择每位是BCD译码或不译码。设计者还可选择停机模式、数字亮度控制、从1~8选择扫描位数和对所有LED 显示器的测试模式。

      MAX7219直插式芯片引脚分布图如下:

MX7219引脚图.png

各引脚功能如下:

DIN:串行数据输入端;

DIG0~DIG7:LED 位线;

LOAD:数据装载信号输入端;

SEGA~SEGG,SEGDp:段码输出端;

ISET:硬件亮度调节端;

DOUT:串行数据输出端;

CLK:移位脉冲输入端;

V+:正电源;

GND:地。

MAX7219和MCU连接有三条引线(DIN、CLK、LOAD),采用16位数据串行移位接收方式。即单片机将16位二进制数逐位发送到DIN端,在CLK上升沿到来前准备就绪,CLK的每个上升沿将一位数据移入MAX7219内移位寄存器,当16位数据移入完,在LOAD引脚信号上升沿将16位数据装入MAX7219内的相应位置,在MAX7219内部硬件动态扫描显示控制电路作用下实现动态显示。以下是MAX7219模块的电路原理图。

模块原理图.png本次实验Pico与MAX7219模块的实物连线如下:

VBUS----->VCC

GND------>GND

GPIO2---->CLK

GPIO3---->DIN

GPIO5---->CS

实物连线.jpg       接下来我们还是使用Thonny软件来编写点阵屏动态显示程序,当然关于这个模块的驱动源码在github上开源化了,足见其应用广泛性。

max7219.py库文件源码如下,编写完成后保存到pico根目录下的"lib"文件夹下。

from micropython import const
import framebuf

_NOOP = const(0)
_DIGIT0 = const(1)
_DECODEMODE = const(9)
_INTENSITY = const(10)
_SCANLIMIT = const(11)
_SHUTDOWN = const(12)
_DISPLAYTEST = const(15)

class Matrix8x8:
    def __init__(self, spi, cs, num):
        """
        Driver for cascading MAX7219 8x8 LED matrices.

        >>> import max7219
        >>> from machine import Pin, SPI
        >>> spi = SPI(1)
        >>> display = max7219.Matrix8x8(spi, Pin('X5'), 4)
        >>> display.text('1234',0,0,1)
        >>> display.show()

        """
        self.spi = spi
        self.cs = cs
        self.cs.init(cs.OUT, True)
        self.buffer = bytearray(8 * num)
        self.num = num
        fb = framebuf.FrameBuffer(self.buffer, 8 * num, 8, framebuf.MONO_HLSB)
        self.framebuf = fb
        # Provide methods for accessing FrameBuffer graphics primitives. This is a workround
        # because inheritance from a native class is currently unsupported.
        # http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
        self.fill = fb.fill  # (col)
        self.pixel = fb.pixel # (x, y[, c])
        self.hline = fb.hline  # (x, y, w, col)
        self.vline = fb.vline  # (x, y, h, col)
        self.line = fb.line  # (x1, y1, x2, y2, col)
        self.rect = fb.rect  # (x, y, w, h, col)
        self.fill_rect = fb.fill_rect  # (x, y, w, h, col)
        self.text = fb.text  # (string, x, y, col=1)
        self.scroll = fb.scroll  # (dx, dy)
        self.blit = fb.blit  # (fbuf, x, y[, key])
        self.init()

    def _write(self, command, data):
        self.cs(0)
        for m in range(self.num):
            self.spi.write(bytearray([command, data]))
        self.cs(1)

    def init(self):
        for command, data in (
            (_SHUTDOWN, 0),
            (_DISPLAYTEST, 0),
            (_SCANLIMIT, 7),
            (_DECODEMODE, 0),
            (_SHUTDOWN, 1),
        ):
            self._write(command, data)

    def brightness(self, value):
        if not 0 <= value <= 15:
            raise ValueError("Brightness out of range")
        self._write(_INTENSITY, value)

    def show(self):
        for y in range(8):
            self.cs(0)
            for m in range(self.num):
                self.spi.write(bytearray([_DIGIT0 + y, self.buffer[(y * self.num) + m]]))
            self.cs(1)

用户测试主程序如下,编写完成后保存到pico设备的根目录下即可。

import max7219
from machine import Pin, SPI
from time import sleep
spi = SPI(0, baudrate=10000000, polarity=1, phase=0, sck=Pin(2), mosi=Pin(3))
ss = Pin(5, Pin.OUT)

msg = 'EEPW.COM.CN'
length = len(msg)
length = ((length-3)*8)
display = max7219.Matrix8x8(spi, ss, 4)
display.brightness(5)   # adjust brightness 1 to 15
display.fill(0)
display.show()
sleep(0.1)

while True:
    for x in range(32, -length, -1):
        display.text(msg ,x,0,1)
        display.show()
        sleep(0.1)
        display.fill(0)

     实验的效果就是8*8点阵屏动态循环显示“EEPW.COM.CN”字符。源码中主要部分是SPI在MicroPython编程中的实现方法。这里的库文件好比MCU下的外设驱动源码,至关重要。

MAX7219_MicroPython源码文件.zip

点阵动态显示.zip





关键词: 换取手持数字示波器     pico驱动点阵屏    

工程师
2024-04-12 10:06:23     打赏
2楼

学习了。谢谢分享。


专家
2024-04-14 01:32:36     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]