- /*
- 【Arduino】66種傳感器模塊系列實驗(84)
- 實驗八十四: 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
- }
- }
復制代碼
|