MicroPython:基於TPYBoard集合MAX7219點陣模組製作表白女神神器

小五義發表於2019-06-10

轉載請註明文章來源,更多教程可自助參考docs.tpyboard.com,QQ技術交流群:157816561,公眾號:MicroPython玩家匯

前言

又是一年畢業季,只有到了畢業季才會意識到自己又離青春遠了一大步。畢業後,大家都各奔東西了,如果這個時候有喜歡的人還是藏在心底的話,不免會給人生留下遺憾。為了不留遺憾,不老套,製作一款表白神器,是不是會更容易表白成功呢?

之前使用8*8LED點陣模組做過一款跳動的心,因為是直接用的點陣模組,所以控制就用了16個IO,未免有些繁瑣,浪費資源。最近發現了一個好東西——MAX7219多位LED 顯示驅動器。使用該驅動器加上點陣屏或者數碼管,驅動起來特別方便簡單,而且加上電源腳也不過就5根線而已。

MAX7219介紹

MAX7219 是美國MAXIM 公司推出的多位LED 顯示驅動器,採用3 線序列介面傳送資料,可直接與微控制器介面連線,使用者能方便修改其內部引數,以實現多位LED 顯示。它內含硬體動態掃描電路、BCD譯碼器、段驅動器和位驅動器。此外,其內部還含有8X8 位靜態RAM,用於存放8個數字的顯示資料。顯然,它可直接驅動64 段LED點陣顯示器。當多片MAX7219 級聯時,可控制更多的LED點陣顯示器。顯示的資料通過微控制器資料處理後,送給MAX7219 顯示。

引腳圖:

當然了,直接拿到這個驅動器一時也不知道該怎麼用,於是就直接買了現成的MAX7219驅動器結合8*8LED點陣屏模組。

看反面圖可以看出,該模組不僅有DIN輸入埠還有DOUT輸出埠,用於多個模組級聯。使用的單個模組時,開發板只接入模組的輸入埠即可;當多個模組級聯時,第一個模組的輸出埠接第二個模組的輸入埠,第二個輸出埠接第三個輸入埠,依次類推。

製作過程

話不多說了,馬上動手實踐起來。接線很簡單,見下表:

TPYBoard v102 MAX7219點陣模組
VIN VCC
GND GND
X3(普通IO都可) DIN
X2 CS
X1 CLK

 

 

 

 

 

 

 

 

 

TPYBoard v102開發板若沒有使用過,附上鍊接看先了解下。http://docs.tpyboard.com/zh/latest/tpyboard/tutorial/v10x/sta
rt/

程式呈上:

主程式 main.py。

 1 import MAX7219 #匯入模組
 2 
 3 #CLK -> X1,CS -> X2,DIN -> X3
 4 #num級聯的模組數量
 5 led = MAX7219.Lattice('X1','X2','X3',num=1)
 6 #要顯示的內容,顯示的內容根據字型檔檔案而定,見font_max7219.py。
 7 #大家也可以自定義圖案新增上。
 8 msg = 'LOVE大小'
 9 
10 while True:
11     #顯示
12     led.display(msg)

字型檔檔案 font_max7219.py。

FONT8_8= {
    '0':[0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C],#0
    '1':[0x10,0x18,0x14,0x10,0x10,0x10,0x10,0x10],#1
    '2':[0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E],#2
    '3':[0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0],#3
    '4':[0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8],#4
    '5':[0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0],#5
    '6':[0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x0],#6
    '7':[0x3E,0x22,0x4,0x8,0x8,0x8,0x8,0x8],#7
    '8':[0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E],#8
    '9':[0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E],#9
    'A':[0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22],#A
    'B':[0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0],#B
    'C':[0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0],#C
    'D':[0x7C,0x42,0x42,0x42,0x42,0x42,0x7C,0x0],#D
    'E':[0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C],#E
    'F':[0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40],#F
    'G':[0x3C,0x40,0x40,0x40,0x40,0x44,0x44,0x3C],#G
    'H':[0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44],#H
    'I':[0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C],#I
    'J':[0x3C,0x8,0x8,0x8,0x8,0x8,0x48,0x30],#J
    'K':[0x0,0x24,0x28,0x30,0x20,0x30,0x28,0x24],#K
    'L':[0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C],#L
    'M':[0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81],#M
    'N':[0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0],#N
    'O':[0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C],#O
    'P':[0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x20],#P
    'Q':[0x1C,0x22,0x22,0x22,0x22,0x26,0x22,0x1D],#Q
    'R':[0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21],#R
    'S':[0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C],#S
    'T':[0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8],#T
    'U':[0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C],#U
    'V':[0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18],#V
    'W':[0x0,0x49,0x49,0x49,0x49,0x2A,0x1C,0x0],#W
    'X':[0x0,0x41,0x22,0x14,0x8,0x14,0x22,0x41],#X
    'Y':[0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8],#Y
    'Z':[0x0,0x7F,0x2,0x4,0x8,0x10,0x20,0x7F],#Z
    '':[0x00,0x66,0xFF,0xFF,0x7E,0x3C,0x18,0x00],#大心
    '':[0x00,0x00,0x66,0x7E,0x3C,0x18,0x00,0x00],#小心
    '':[0x8,0x7F,0x49,0x49,0x7F,0x8,0x8,0x8],#
    '':[0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE],#
}

模組驅動程式max7219.py就不在這裡呈現了,文章末有連結,大家可以去下載。

演示效果

https://v.qq.com/x/page/n08814kmrfc.html

無線遙控升級版

這樣雖然已經很炫了,不過加上無線遙控的效果是不是就更棒了。於是,找來了以前買的HC-05(HC-06也一樣)藍芽模組,結合一下整上。

藍芽模組的連線線:

TPYBoard v102 HC-05/06藍芽模組
VIN VCC
GND GND
Y1 RX
Y2 TX

 

 

 

 

 

 

 


其他檔案不用動,改動下main.py,增加上串列埠讀寫操作即可。

 1 import MAX7219 #匯入模組
 2 from pyb import UART
 3 #初始化串列埠引數,使用串列埠6 波特率9600 超時時間50毫秒
 4 #串列埠6 TX->Y1 RX->Y2 
 5 #其他串列埠對應的引腳編號詳見針腳圖:http://old.tpyboard.com/document/documents/10x/TPYBoardv10xPCBpng.pdf
 6 uart = UART(6,9600,timeout=50)
 7 
 8 #CLK -> X1,CS -> X2,DIN -> X3
 9 #num級聯的模組數量
10 led = MAX7219.Lattice('X1','X2','X3',num=1)
11 led.display('')                   #預設顯示大心圖案
12 while True:
13     if uart.any() > 0:              #any()返回串列埠快取區的資料長度,返回值大於0即表示有資料
14         DATA = uart.read().decode() #讀取快取區全部資料,返回值為bytes,decode()轉為字串
15         led.display(DATA)           #進行顯示

藍芽串列埠除錯助手(Android)下載地址:http://old.tpyboard.com/download/tool/164.html

表白神器原始碼下載地址:https://github.com/TPYBoard/TPYBoard-v102

相關文章