物联网开发笔记(67)- 使用Micropython开发ESP32开发板之控制8组max7219 LED矩阵屏显示_esp32 max7219

66 阅读14分钟

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

                (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7),
                (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6)
            ],
        5: [
                (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7),  (2, 7), (3, 7), (4, 7), (5, 7), (6, 7),
                (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6),
            ],
        6: [
                (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7),  (2, 7), (3, 7), (4, 7), (5, 7), (6, 7),
                (33, 0), (33, 1), (33, 2), (33, 3), (33, 4), (33, 5), (33, 6), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6),
            ],
        7: [
                (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), 
                (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6)
            ],
        8: [
                (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7),  (2, 7), (3, 7), (4, 7), (5, 7), (6, 7),
                (33, 0), (33, 1), (33, 2), (33, 3), (33, 4), (33, 5), (33, 6), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6),
            ],
        9: [
                (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7),  (2, 7), (3, 7), (4, 7), (5, 7), (6, 7),
                (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6),
            ],
    }

def dp(self):
    spi = SoftSPI(baudrate=100000, polarity=1, phase=0, mosi=Pin(13), sck=Pin(14), miso=Pin(23))
    self.display = max7219.Matrix8x8(spi, Pin(12), 8)

def show_time(self):
    """
    date = self.rtc.datetime()
    self.m = date[5]
    self.h = date[4]
    self.display.fill(0)
    self.display.text(str(self.h) if len(str(self.h))==2 else '0' + str(self.h) , 0, 1)
    self.display.pixel(16, 2, self.se)        
    self.display.pixel(16, 4, self.se)        
    self.display.text(str(self.m) if len(str(self.m))==2 else '0' + str(self.m) , 17, 1)
    self.se = 0 if self.se == 1 else 1
    self.display.text('abAB456789', 0, 0)
    
    
    for i in range(10):
        self.display.fill(0)
        for x, y in self.number_font[i]:
            self.display.pixel(x, y, 1)
        self.display.show()
        time.sleep(0.2)
    """
    
    hour = 22
    minute = 33
    
    # 清空
    self.display.fill(0)
    
    # 时(2位)
    for i, hour_temp in enumerate("%02d" % hour):
        for x, y in self.number_font[int(hour_temp)]:
            hour_offset = 7 if i == 1 else 0
            self.display.pixel(x + hour_offset, y, 1)
    # 2个点
    self.display.pixel(16, 6, 1)
    self.display.pixel(48, 1, 1)
    
    # 分(2位)
    for i, minute_temp in enumerate("%02d" % minute):
        for x, y in self.number_font[int(minute_temp)]:
            minute_offset = 24 if i == 1 else 17
            self.display.pixel(x + minute_offset, y, 1)
    
    # 显示
    self.display.show()
    

1. 创建对象

clock = Clock()

2. 调用显示

clock.show_time() """ while True: clock.show_time() time.sleep(1) break """


显示效果


![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9aa8624c60a14af7bd5a4e8e32ea724d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770711542&x-signature=Bkwd987hMqOt35bYgaJt%2FWcTNsQ%3D)



**五、网络时间代码**



import time import max7219 from machine import Pin, SoftSPI, RTC import network import ntptime

class Clock: """ 定义可以用来控制32x16的点阵屏类 """ def init(self, wifi, password): self.dp() self.se = 0 self.rtc = RTC() self.wifi = wifi self.password = password self.ntp() # 调用这个方法来联网设置时间 self.second_light = False self.number_font = { 0: [ (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (33, 0), (33, 1), (33, 2), (33, 3), (33, 4), (33, 5), (33, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6), ], 1: [ (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (36, 0), (36, 1), (36, 2), (36, 3), (36, 4), (36, 5), (36, 6), ], 2: [ (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (33, 0), (33, 1), (33, 2), (33, 3), (33, 4), (33, 5), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6), ], 3: [ (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6), ], 4: [ (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6) ], 5: [ (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6), ], 6: [ (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (33, 0), (33, 1), (33, 2), (33, 3), (33, 4), (33, 5), (33, 6), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6), ], 7: [ (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6) ], 8: [ (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (33, 0), (33, 1), (33, 2), (33, 3), (33, 4), (33, 5), (33, 6), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6), ], 9: [ (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (38, 0), (38, 1), (38, 2), (38, 3), (38, 4), (38, 5), (38, 6), (33, 6), (34, 6), (35, 6), (36, 6), (37, 6), (38, 6), ], }

def dp(self):
    spi = SoftSPI(baudrate=100000, polarity=1, phase=0, mosi=Pin(13), sck=Pin(14), miso=Pin(23))
    self.display = max7219.Matrix8x8(spi, Pin(12), 8)
    
def connect_wifi(self):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        wlan.connect(self.wifi, self.password)

def ntp(self):
    self.connect_wifi()
    time.sleep(2)
    ntptime.host="ntp1.aliyun.com"
    ntptime.NTP_DELTA = 3155644800  # 东八区 UTC+8偏移时间(秒)
    try:
        ntptime.settime()
        print("联网成功...")
    except Exception as e:
        pass

def show_time(self):
    """
    date = self.rtc.datetime()
    self.m = date[5]
    self.h = date[4]
    self.display.fill(0)
    self.display.text(str(self.h) if len(str(self.h))==2 else '0' + str(self.h) , 0, 1)
    self.display.pixel(16, 2, self.se)        
    self.display.pixel(16, 4, self.se)        
    self.display.text(str(self.m) if len(str(self.m))==2 else '0' + str(self.m) , 17, 1)
    self.se = 0 if self.se == 1 else 1
    self.display.text('abAB456789', 0, 0)
    
    
    for i in range(10):
        self.display.fill(0)
        for x, y in self.number_font[i]:
            self.display.pixel(x, y, 1)
        self.display.show()
        time.sleep(0.2)
    """
    
    # 获取真正的时间
    date = self.rtc.datetime()
    hour = date[4]
    minute = date[5]
    
    # 清空
    self.display.fill(0)
    
    # 时(2位)
    for i, hour_temp in enumerate("%02d" % hour):
        for x, y in self.number_font[int(hour_temp)]:
            hour_offset = 7 if i == 1 else 0
            self.display.pixel(x + hour_offset, y, 1)
    # 2个点
    self.display.pixel(16, 6, 1 if self.second_light else 0)
    self.display.pixel(48, 1, 1 if self.second_light else 0)
    self.second_light = not self.second_light
    
    # 分(2位)
    for i, minute_temp in enumerate("%02d" % minute):
        for x, y in self.number_font[int(minute_temp)]:
            minute_offset = 24 if i == 1 else 17
            self.display.pixel(x + minute_offset, y, 1)
    
    # 显示
    self.display.show()
    

1. 创建对象

clock = Clock("无线名字", "无线密码")

2. 调用显示

while True: clock.show_time() time.sleep(1)


演示效果:


![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6c1ecd8a377c4cddbb4016c6068b6479~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770711542&x-signature=F8LTT%2BGIknmJEyezcQF8xpb8r3k%3D)


**六、数字滚动**


 



import time import max7219 from machine import Pin, SoftSPI, RTC

class Clock: """ 定义可以用来控制32x16的点阵屏类 """ def init(self): self.dp() self.se = 0 self.rtc = RTC() self.number_font = { 0: [ [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 1: [ [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [36, 0], [36, 1], [36, 2], [36, 3], [36, 4], [36, 5], [36, 6], ], 2: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 3: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 4: [ [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6] ], 5: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 6: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 7: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6] ], 8: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 9: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], }

def dp(self):
    spi = SoftSPI(baudrate=100000, polarity=1, phase=0, mosi=Pin(13), sck=Pin(14), miso=Pin(23))
    self.display = max7219.Matrix8x8(spi, Pin(12), 8)

def show_time(self):
    for i in range(10):
        # 复制一份当前要显示的文字的编码
        led_point_temp_list = [[x[0], x[1]] for x in self.number_font.get(i)]
        
        print("处理之前", led_point_temp_list)

        # 对每个编码向上提升
        for k, (x, y) in enumerate(led_point_temp_list):
            
            if x < 32:  # 找到上部
                y -= 16
                led_point_temp_list[k][1] = y
            else: # 下半部分
                y -= 8
                x -= 32
                led_point_temp_list[k][0] = x
                led_point_temp_list[k][1] = y
                
        print("处理之后", led_point_temp_list)
        
        for j in range(32):  # 从中间下落
            print("当前要显示的文字是:", i)
            self.display.fill(0)
            for k, (x, y) in enumerate(led_point_temp_list):
                
                if x < 32:  # 找到上部
                    if y == 7:
                        x = x + 32
                        led_point_temp_list[k][0] = x
                    if y >= 0:
                        y = (y + 1) % 8
                    else:
                        y += 1
                    led_point_temp_list[k][1] = y
                else: # 下半部分
                    y += 1
                    led_point_temp_list[k][1] = y
                # print("当前显示的点", x, y)
                if 0 <= y <= 7:
                    self.display.pixel(x, y, 1)
            
            self.display.show()
            
            time.sleep_ms(20 + j)
        
            if j == 15:
                time.sleep(0.5)
    

1. 创建对象

clock = Clock()

2. 调用显示

clock.show_time() """ while True: clock.show_time() time.sleep(1) break """


 演示效果


![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2714fa8dbe794cdbb333135decf9b575~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770711542&x-signature=bd4OYr8wYj%2BYTSX5o0weEKXKfH8%3D)


**七、动态滚动显示网络时间**


 



import time import max7219 from machine import Pin, SoftSPI, RTC

class Clock: """ 定义可以用来控制32x16的点阵屏类 """ def init(self): self.dp() self.se = 0 self.rtc = RTC() self.last_time = None self.second_light = False self.number_font = { 0: [ [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 1: [ [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [36, 0], [36, 1], [36, 2], [36, 3], [36, 4], [36, 5], [36, 6], ], 2: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 3: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 4: [ [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6] ], 5: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 6: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 7: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6] ], 8: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], 9: [ [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [33, 6], [34, 6], [35, 6], [36, 6], [37, 6], [38, 6], ], }

def dp(self):
    spi = SoftSPI(baudrate=100000, polarity=1, phase=0, mosi=Pin(13), sck=Pin(14), miso=Pin(23))
    self.display = max7219.Matrix8x8(spi, Pin(12), 8)
    
def static_one_number(self, number, offset):
    # 显示1位静止不动的数字
    for x, y in self.number_font[int(number)]:
        self.display.pixel(x + offset, y, 1)
    
def show_1_move_3_static_number(self, old_4_numbers="1234", new_4_numbers="1235"):
    # 滚动显示1位数字 静态显示3位数字
    static_number_list = []
    move_number_list = []
    for i, temp in enumerate(new_4_numbers):
        if i == 0:
            number_offset = 0
        elif i == 1:
            number_offset = 7
        elif i == 2:
            number_offset = 17
        else:
            number_offset = 24
        if temp == old_4_numbers[i]:
            static_number_list.append([int(temp), number_offset])
        else:
            move_number_list.append([int(temp), number_offset])
    
    if len(static_number_list) == 4:
        # 显示所有的4个不变的数字
        self.display.fill(0)
        for number, static_number_offset in static_number_list:
            self.static_one_number(number, static_number_offset)
        # 显示2个点
        self.display.pixel(16, 6, 1 if self.second_light else 0)
        self.display.pixel(48, 1, 1 if self.second_light else 0)
        self.display.show()
        return
    
    led_point_temp_list = []
    for number, number_offset in move_number_list:
        
        # 复制一份当前要显示的文字的编码
        # led_point_temp_list = self.number_font[number][0:]  # 这种方法会出现浅拷贝的问题,假如[[x, y], [x2, y2]] 那么[x, y], [x2, y2]是公用的
        led_point_temp_list.extend([[x[0], x[1], number_offset] for x in self.number_font.get(number)])  # 相当于深拷贝
        # print("id1=,", id(self.number_font[number]), "id2=", id(led_point_temp_list))
        # print("id1[0]=", id(self.number_font[number][0]), "id2[0]=", id(led_point_temp_list[0]))
        
    # print("处理之前", led_point_temp_list)

    # 对每个编码向上提升
    for k, (x, y, number_offset) in enumerate(led_point_temp_list):
        
        if x < 32:  # 找到上部
            y -= 16
            led_point_temp_list[k][1] = y
        else: # 下半部分
            y -= 8
            x -= 32
            led_point_temp_list[k][0] = x
            led_point_temp_list[k][1] = y
            
    # print("处理之后", led_point_temp_list)
    
    for j in range(16):  # 从中间下落
        print("当前要显示的文字是:", number)
        self.display.fill(0)
        
        # 显示2个点
        self.display.pixel(16, 6, 1 if self.second_light else 0)
        self.display.pixel(48, 1, 1 if self.second_light else 0)
        
        # 显示需要移动的数字
        for k, (x, y, number_offset) in enumerate(led_point_temp_list):
            
            if x < 32:  # 找到上部

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取