数码之家

 找回密码
 立即注册
搜索
查看: 6116|回复: 9

MY808_DIY:micropython_ESP32_MAX7219 滚动点阵模块源码

[复制链接]
发表于 2020-1-3 00:46:10 | 显示全部楼层 |阅读模式
用micropython_ESP32_MAX7219 点阵模块,滚动。

很喜欢翻页钟效果,花了两天时间,终于搞定,贴出源码,供大家参考。


点击图片可播放视频。



[url=https://www.bilibili.com/video/av81837825/][/url]

  1. # 用缓存来定义并滚动
  2. from machine import Pin, SPI
  3. import time
  4. from micropython import const
  5. import ntptime
  6. import network

  7. font = (  #8x8矩阵中的字符集5x8
  8.   0x0e, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0e, 0x00,   # 0x30, 0
  9.   0x04, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00,   # 0x31, 1
  10.   0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f, 0x00,   # 0x32, 2
  11.   0x0e, 0x11, 0x01, 0x06, 0x01, 0x11, 0x0e, 0x00,   # 0x33, 3
  12.   0x02, 0x06, 0x0a, 0x12, 0x1f, 0x02, 0x02, 0x00,   # 0x34, 4
  13.   0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e, 0x00,   # 0x35, 5
  14.   0x06, 0x08, 0x10, 0x1e, 0x11, 0x11, 0x0e, 0x00,   # 0x36, 6
  15.   0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08, 0x00,   # 0x37, 7
  16.   0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e, 0x00,   # 0x38, 8
  17.   0x0e, 0x11, 0x11, 0x0f, 0x01, 0x02, 0x0c, 0x00,   # 0x39, 9  
  18. )

  19. _NOOP = const(0)
  20. _DIGIT0 = const(1)
  21. _DECODEMODE = const(9)
  22. _INTENSITY = const(10)
  23. _SCANLIMIT = const(11)
  24. _SHUTDOWN = const(12)
  25. _DISPLAYTEST = const(15)

  26. class Matrix8x8:
  27.     def __init__(self, spi, cs):
  28.         self.spi = spi
  29.         self.cs = cs
  30.         self.cs.init(mode=Pin.OUT, value=1)
  31.         self.buff = [0]*8*4 #缓存list ,4个7219
  32.         self.init()

  33.     def _write(self, command, data):
  34.         self.cs(0)
  35.         for m in range(4):  #4个7219都要写
  36.             self.spi.write(bytearray([command, data]))
  37.         self.cs(1)

  38.     def init(self):
  39.         for command, data in (
  40.             (_SHUTDOWN, 0),
  41.             (_DISPLAYTEST, 0),
  42.             (_SCANLIMIT, 7),
  43.             (_DECODEMODE, 0),
  44.             (_SHUTDOWN, 1),
  45.             (_INTENSITY, 0) #默认亮度0
  46.         ):
  47.             self._write(command, data)

  48.     def brightness(self, value):
  49.         if not 0 <= value <= 15:
  50.             raise ValueError("Brightness out of range")
  51.         self._write(_INTENSITY, value)
  52.    
  53.     def set_nub(self,nub,psion): # 数字,位置        
  54.         for j in range(8):
  55.             self.buff[j*4+psion] = font[nub*8+j]

  56.     def up_roll(self,nub,psion): # 数字,位置        
  57.         for i in range(8):
  58.             for j in range(7):
  59.                 self.buff[4*j+psion] =self.buff[4*(j+1)+psion]
  60.             self.buff[4*7+psion] = font[nub*8+i]
  61.             self.show()
  62.             time.sleep_ms(80)

  63.     def down_roll(self,nub,psion): # 数字,位置        
  64.         for i in range(7,-1,-1):
  65.             for j in range(7,0,-1):
  66.                 self.buff[4*j+psion] =self.buff[4*(j-1)+psion]
  67.             self.buff[0+psion] = font[nub*8+i]
  68.             self.show()            
  69.             time.sleep_ms(80)

  70. spi = SPI(1, sck=Pin(14), mosi=Pin(13), miso=Pin(12), baudrate=10000000)  #10Mhz 串口
  71. display = Matrix8x8(spi, Pin(26))

  72. def  digt(nub):
  73.     _l = []
  74.     _s = '{0:0>4d}'.format(nub)
  75.     for i in range(len(_s)):
  76.         _l.append(int(_s[i]))
  77.     return(_l)

  78. while True:
  79.     for i in range(10):
  80.         display.up_roll(i,0)
  81.         display.down_roll(9-i,1)
  82.         display.up_roll(i,2)
  83.         display.down_roll(9-i,3)
  84.         time.sleep_ms(500)

  85.     for i in range(10):
  86.         display.up_roll(i,1)
  87.         display.up_roll(i,3)
  88.         time.sleep_ms(500)

  89.     #display.down_4_roll((0,0,0,0),(9,9,9,9))   
  90.     for i in range(9999,9980,-1):
  91.         display.down_4_roll(digt(i),digt(i-1))
  92.         time.sleep_ms(300)
  93.       
  94.     for i in range(9980,9999):
  95.         display.up_4_roll(digt(i),digt(i+1))
  96.         time.sleep_ms(300)
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 4家元 +70 收起 理由
慕名而来 + 10
家睦 + 30
wenxueroom + 20 原創內容
人艰不拆了 + 10

查看全部打赏

发表于 2020-12-11 11:01:16 | 显示全部楼层
楼主你好,能否请教个问题呢?
1,代码中font字符集什么意思呢,为什么那么定义?
2,类中的buff变量目的起着什么作用呢?
3,类中的show函数是哪个库带的呢,没见到show的定义。
4,MAX7219 8*8点阵比如我只让左上角第一个灯亮该发送什么指令呢?
以上,恳请帮助,谢谢!

打赏

参与人数 1家元 +3 收起 理由
如日个哦 + 3 代码不放全,秀呐!

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-11 16:53:32 | 显示全部楼层
本帖最后由 lyy-cy 于 2020-12-11 16:57 编辑
dlsl0210 发表于 2020-12-11 11:01
楼主你好,能否请教个问题呢?
1,代码中font字符集什么意思呢,为什么那么定义?
2,类中的buff变量目的起 ...

朋友,你的这些问题都是点阵显示原理的问题。

https://www.mydigit.cn/forum.php?mod=viewthread&tid=69560

这个帖子中有些可以参考。虽然是数码管,但是本质还是led,和点阵一样
https://blog.csdn.net/weixin_42625444/article/details/91450879
回复 支持 反对

使用道具 举报

发表于 2024-9-3 08:46:22 来自手机浏览器 | 显示全部楼层
想仿制一个,大佬能给个完整的文件吗?
回复 支持 反对

使用道具 举报

发表于 2024-9-19 09:48:10 来自手机浏览器 | 显示全部楼层
一直停留在这个界面,是我硬件不完整?我只有esp32和max7219

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2024-9-20 15:06:15 来自手机浏览器 | 显示全部楼层
事实上我只想仿制一个您这样的,可惜不会弄

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-20 21:19:04 | 显示全部楼层
likemcu 发表于 2024-9-20 15:06
事实上我只想仿制一个您这样的,可惜不会弄

太久了,我现在也忘了怎么做的了,micropython已经放弃很久了,忘完了.

当时写着玩的,建议您到B站看看,那里有更好的全开源的,

好好找个资料全的仿制.
回复 支持 反对

使用道具 举报

发表于 2024-9-21 16:13:04 来自手机浏览器 | 显示全部楼层
本帖最后由 likemcu 于 2024-9-21 16:18 编辑
lyy-cy 发表于 2024-9-20 21:19
太久了,我现在也忘了怎么做的了,micropython已经放弃很久了,忘完了.

当时写着玩的,建议您到B站看 ...


电路图和源码都有了,程序烧写后显示不正常,貌似还是无法配网,头都大了

这个貌似是显示的S-con

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2024-9-22 02:26:49 来自手机浏览器 | 显示全部楼层
软件不会改,改了硬件,显示正常了,还是无法正常联网走时,硬件还是不完整,等原件到货再试试,不行就只能放弃了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2024-9-27 00:55:31 来自手机浏览器 | 显示全部楼层
感谢大佬提供帮助,已经成功了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-5 14:38 , Processed in 0.171600 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表