【雕爺學編程】Arduino動手做(81)--- 8位LED數碼管模塊


37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗八十一:8位LED數碼管MAX7219模塊(支持級聯八位串行3個IO口控制)

MAX7219
是一種集成化的串行輸入/輸出共陰極顯示驅動器,它連接微處理器與8位數字的7段數字LED顯示,也可以連接條線圖顯示器或者64個獨立的LED。其上包括一個片上的B型BCD編碼器、多路掃描回路,段字驅動器,而且還有一個8*8的靜態RAM用來存儲每一個數據。只有一個外部寄存器用來設置各個LED的段電流。

一個方便的四線串行接口可以聯接所有通用的微處理器。每個數據可以尋址在更新時不需要改寫所有的顯示。MAX7219同樣允許用戶對每一個數據選擇編碼或者不編碼。整個設備包含一個150μA的低功耗關閉模式,模擬和數字亮度控制,一個掃描限制寄存器允許用戶顯示1-8位數據,還有一個讓所有LED發光的檢測模式。只需要3個IO口即可驅動8位數碼管!數碼管顯示時無閃爍!支持級聯!

MAX7219/MAX7221
是一種集成化的串行輸入/輸出共陰極顯示驅動器,它連接微處理器與8位數字的7段數字LED顯示,也可以連接條線圖顯示器或者64個獨立的LED。其上包括一個片上的B型BCD編碼器、多路掃描回路,段字驅動器,而且還有一個8*8的靜態RAM用來存儲每一個數據。 只有一個外部寄存器用來設置各個LED的段電流。 MAX7221與SPI™、 QSPI™以及 MICROWIRE™相兼容,同時它有限制回轉電流的段驅動來減少EMI(電磁干擾)。 一個方便的四線串行接口可以聯接所有通用的微處理器。 每個數據可以尋址在更新時不需要改寫所有的顯示。MAX7219/MAX7221同樣允許用戶對每一個數據選擇編碼或者不編碼。 整個設備包含一個150μA的低功耗關閉模式,模擬和數字亮度控制,一個掃描限制寄存器允許用戶顯示1-8位數據,還有一個讓所有LED發光的檢測模式。

功能特點
1 10MHz連續串行口
2 獨立的LED段控制
3 數字的譯碼與非譯碼選擇
4 150μA的低功耗關閉模式
5 亮度的數字和模擬控制
6 高電壓中斷顯示
7 共陰極LED顯示驅動
8 限制回轉電流的段驅動來減少EMI(MAX7221)
9 SPI, QSPI, MICROWIRE串行接口(MAX7221)
10 24腳的 DIP和 SO 封裝

管腳描述
管腳 名稱 功能
1 DIN 串行數據輸入端口。在時鍾上升沿時數據被載入內部的16位寄存器。
2,3,5-8,10,11 DIG 0–DIG7 八個數據驅動線路置顯示器共陰極為低電平。關閉時7219此管腳輸出高電平,7221呈現高阻抗。
4,9 GND 地線 (4腳和9腳必須同時接地)
12 LOAD (MAX7219) 載入數據。連續數據的后16位在LOAD端的上升沿時被鎖定。
CS (MAX7221) 片選端。該端為低電平時串行數據被載入移位寄存器。連續數據的后16位在cs端的上升沿時被鎖定。
13 CLK 時鍾序列輸入端。最大速率為 10MHz.在時鍾的上升沿, 數據移入內部移位寄存器。 下降沿時, 數據從DOUT端輸出。MAX7221來說,只有當cs端為低電平時時鍾輸入才有效。
14-17,20-23 SEG 7 段和小數點驅動,為顯示器提供電流。當一個段驅
A–SEG G, 動關閉時,7219的此端呈低電平,7221呈現高阻抗。
DP
18 SET 通過一個電阻連接到VDD 來提高段電流。
19 V+ 正極電壓輸入,+5V
24 DOUT 串行數據輸出端口,從DIN輸入的數據在16.5個時鍾周期后在此端有效。當使用多個MAX7219/MAX7221時用此端方便擴展。

8位LED數碼管MAX7219模塊(支持級聯八位串行3個IO口控制)
接線說明(以提供的程序為例,可以接任意IO口,在程序中修改端口定義即可):
VCC→5V
GND→GND
DIN→D2
CS →D3
CLK→D4

模塊電原理圖

/*
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗八十一: 8位LED數碼管MAX7219模塊
能通過驗證,上傳成功
僅顯示“23456E86”,列為失敗的程序,技術有限,只能以后再說了
*/

include <LedControl.h>

int CLK = 4;
int CS = 3;
int DIN = 2; //這里定義了那三個腳
int PIECENUM = 8;//數碼管片數
void setup() {
pinMode(CLK, OUTPUT);
pinMode(CS, OUTPUT);
pinMode(DIN, OUTPUT); //讓三個腳都是輸出狀態
Delay_xms(50);
Init_MAX7219(PIECENUM);
Delay_xms(2000);
}
void loop() {
Write_Max7219(1, 0x0f, 0x00, 0); //顯示測試:1;測試結束,正常顯示:0
for (int i = 1; i <= 5; i++) {
Write_Mynum(1, i, i + 1, 1);
}
//Write_Mynum(1, 7, '', 0);
// Write_Mynum(1, 8, '
', 0);
for (int i = 1; i <= 8; i++) {
Write_Mynum(2, i, 2, 0);
}
for (int i = 1; i <= 8; i++) {
Write_Mynum(3, i, 3, 0);
}
for (int i = 1; i <= 8; i++) {
Write_Mynum(4, i, 8 - i, 1);
}
while (1);
}
void Delay_xms(unsigned int x)
{
unsigned int i, j;
for (i = 0; i < x; i++)
for (j = 0; j < 112; j++);
}
//切換地址,方便寫
void Write_Mynum(int pnum, unsigned char address, unsigned char dat , int dp) {
Write_Max7219(pnum, 9 - address, dat, dp);
}
//功能:向MAX7219寫入字節
//入口參數:DATA,dp顯示小數點與否
void Write_Max7219_byte(unsigned char DATA, int dp)
{
unsigned char i;
digitalWrite(CS, LOW);
for (i = 8; i >= 1; i--)
{
digitalWrite(CLK, LOW);
if (i == 8 && dp == 1)
digitalWrite(DIN, HIGH);
else {
if (DATA & 0X80)
digitalWrite(DIN, HIGH);
else
digitalWrite(DIN, LOW);
}
DATA <<= 1;
digitalWrite(CLK, HIGH);
}
}
//功能:向MAX7219寫入數據
//入口參數:pnum數碼管片序號,address,dat,dp顯示小數點與否
void Write_Max7219(int pnum, unsigned char address, unsigned char dat, int dp)
{
digitalWrite(CS, LOW);
Write_Max7219_byte(address, 0); //寫入地址,即數碼管編號
Write_Max7219_byte(dat, dp); //寫入數據,即數碼管顯示數字
if (pnum > 1) {
digitalWrite(CLK, HIGH);
for (int i = 1; i < pnum; i++) {
Write_Max7219_byte(0X00, 0);
Write_Max7219_byte(0X00, 0);
}
}
digitalWrite(CS, HIGH);
}
//Max7219初始化
void Init_MAX7219(int pienum)
{
for (int i = 1 ; i <= pienum ; i++) {
Write_Max7219(i, 0x09, 0xff, 0); //譯碼方式:BCD碼
Write_Max7219(i, 0x0a, 0x03, 0); //參數3:亮度
Write_Max7219(i, 0x0b, 0x07, 0); //掃描界限;參數3:8個數碼管顯示
Write_Max7219(i, 0x0c, 0x01, 0); //掉電模式:參數3:0,普通模式:1
Write_Max7219(i, 0x0f, 0x01, 0); //顯示測試:參數3:1;測試結束,正常顯示:0
}
}

實驗場景圖

實驗開源仿真編程(Linkboy V4.2)
程序之二,顯示字符3和4,小數點流水移動

實驗開源仿真編程(Linkboy V4.2)
程序之三,顯示字符88888888和8個小數點

實驗開源仿真編程(Linkboy V4.2)
程序之四,循環調整屏幕的16級亮度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM