【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏6
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴屏幕)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
项目三十三:动态红心
实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴) 项目三十三:动态红心 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据,数据接收引脚) CS →→→→→ D11(负载,命令接收引脚) CLK →→→→→ D10(时钟,时钟引脚) */ unsigned char i; unsigned char j; int Max7219_pinCLK = 10; int Max7219_pinCS = 11; int Max7219_pinDIN = 12; unsigned char disp1[19][8]={0x0c,0x1e,0x3e,0x7c,0x7c,0x3e,0x1e,0x0c}; void Write_Max7219_byte(unsigned char DATA) { unsigned char i; digitalWrite(Max7219_pinCS,LOW); for(i=8;i>=1;i--) { digitalWrite(Max7219_pinCLK,LOW); digitalWrite(Max7219_pinDIN,DATA&0x80); DATA = DATA<<1; digitalWrite(Max7219_pinCLK,HIGH); } } void Write_Max7219(unsigned char address,unsigned char dat) { digitalWrite(Max7219_pinCS,LOW); Write_Max7219_byte(address); Write_Max7219_byte(dat); digitalWrite(Max7219_pinCS,HIGH); } void Init_MAX7219(void) { Write_Max7219(0x09, 0x00); Write_Max7219(0x0a, 0x03); Write_Max7219(0x0b, 0x07); Write_Max7219(0x0c, 0x01); Write_Max7219(0x0f, 0x00); } void setup() { pinMode(Max7219_pinCLK,OUTPUT); pinMode(Max7219_pinCS,OUTPUT); pinMode(Max7219_pinDIN,OUTPUT); delay(500); Init_MAX7219(); } void loop() { for(j=0;j<19;j++) { for(i=1;i<9;i++) Write_Max7219(i,disp1[j][i-1]); delay(500); } }
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
项目三十四:打开/关闭其 LED 组合显示 ASCII 字符
实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴) 项目三十四:打开/关闭其 LED 组合显示 ASCII 字符 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据,数据接收引脚) CS →→→→→ D11(负载,命令接收引脚) CLK →→→→→ D10(时钟,时钟引脚) */ //We always have to include the library #include "LedControlMS.h" /* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */ #define NBR_MTX 2 LedControl lc=LedControl(12,10,11, NBR_MTX); String digits= "1234567890"; int digitCounter=0; /* we always wait a bit between updates of the display */ unsigned long delaytime=300; void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ Serial.begin (9600); Serial.println("Setup"); digitCounter=0; for (int i=0; i< NBR_MTX; i++){ lc.shutdown(i,false); /* Set the brightness to a medium values */ lc.setIntensity(i,8); /* and clear the display */ lc.clearDisplay(i); } Serial.println("LED0: 0 0"); lc.setLed(0,0,0,true); delay(1000); Serial.println("LED0: 0 7"); lc.setLed(0,0,7,true); delay(1000); Serial.println("LED0: 7 0"); lc.setLed(0,7,0,true); delay(1000); Serial.println("LED0: 7 7"); lc.setLed(0,7,7,true); delay(1000); Serial.println("LED0: 0 0 off"); lc.setLed(0,0,0,false); delay(1000); Serial.println("LED0: 0 7 off"); lc.setLed(0,0,7,false); delay(1000); Serial.println("LED0: 7 0 off"); lc.setLed(0,7,0,false); delay(1000); Serial.println("LED0: 7 7 off"); lc.setLed(0,7,7,false); delay(1000); //clearAll(); lc.setRow(0,1,0x0C); delay(1000); lc.clearDisplay(0); lc.setRow(0,1,0xC0); delay(1000); lc.clearDisplay(0); lc.setColumn(0,1,0x0C); delay(1000); lc.clearDisplay(0); lc.setColumn(0,1,0xC0); delay(1000); lc.clearDisplay(0); lc.writeString(0,"Hola Mundo"); delay(1000); lc.clearAll(); scrollLeft('O'); delay(1000); lc.clearAll(); scrollRight('O'); delay(1000); lc.clearAll(); } void loop() { char ch= digits[digitCounter]; digitCounter++; if (digitCounter>9) digitCounter=0; lc.displayChar(0, lc.getCharArrayPosition(ch)); delay(500); lc.clearAll(); delay(200); } void scrollLeft(char ch){ int pos =lc.getCharArrayPosition(ch); for (int scroll =0; scroll<6; scroll++) { for (int i=scroll; i<6;i++) { lc.setRow(0,i-scroll, alphabetBitmap[pos][i]); } delay(200); lc.clearDisplay(0); } } void scrollRight(char ch){ int pos =lc.getCharArrayPosition(ch); for (int scroll =0; scroll<8; scroll++) { for (int i=0; i<6;i++) { if (scroll+i<8) lc.setRow(0, scroll+i, alphabetBitmap[pos][i]); } delay(200); lc.clearDisplay(0); } }
实验串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
项目三十五:逐点排列
实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴) 项目三十五:逐点排列 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据,数据接收引脚) CS →→→→→ D11(负载,命令接收引脚) CLK →→→→→ D10(时钟,时钟引脚) */ //We always have to include the library #include "LedControlMS.h" /* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */ LedControl lc=LedControl(12,10,11,1); /* we always wait a bit between updates of the display */ unsigned long delaytime=100; void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ lc.shutdown(0,false); /* Set the brightness to a medium values */ lc.setIntensity(0,8); /* and clear the display */ lc.clearDisplay(0); } /* This method will display the characters for the word "Arduino" one after the other on the matrix. (you need at least 5x7 leds to see the whole chars) */ void writeArduinoOnMatrix() { /* here is the data for the characters */ byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110}; byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000}; byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110}; byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110}; byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000}; byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110}; byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100}; /* now display them one by one with a small delay */ lc.setRow(0,0,a[0]); lc.setRow(0,1,a[1]); lc.setRow(0,2,a[2]); lc.setRow(0,3,a[3]); lc.setRow(0,4,a[4]); delay(delaytime); lc.setRow(0,0,r[0]); lc.setRow(0,1,r[1]); lc.setRow(0,2,r[2]); lc.setRow(0,3,r[3]); lc.setRow(0,4,r[4]); delay(delaytime); lc.setRow(0,0,d[0]); lc.setRow(0,1,d[1]); lc.setRow(0,2,d[2]); lc.setRow(0,3,d[3]); lc.setRow(0,4,d[4]); delay(delaytime); lc.setRow(0,0,u[0]); lc.setRow(0,1,u[1]); lc.setRow(0,2,u[2]); lc.setRow(0,3,u[3]); lc.setRow(0,4,u[4]); delay(delaytime); lc.setRow(0,0,i[0]); lc.setRow(0,1,i[1]); lc.setRow(0,2,i[2]); lc.setRow(0,3,i[3]); lc.setRow(0,4,i[4]); delay(delaytime); lc.setRow(0,0,n[0]); lc.setRow(0,1,n[1]); lc.setRow(0,2,n[2]); lc.setRow(0,3,n[3]); lc.setRow(0,4,n[4]); delay(delaytime); lc.setRow(0,0,o[0]); lc.setRow(0,1,o[1]); lc.setRow(0,2,o[2]); lc.setRow(0,3,o[3]); lc.setRow(0,4,o[4]); delay(delaytime); lc.setRow(0,0,0); lc.setRow(0,1,0); lc.setRow(0,2,0); lc.setRow(0,3,0); lc.setRow(0,4,0); delay(delaytime); } /* This function lights up a some Leds in a row. The pattern will be repeated on every row. The pattern will blink along with the row-number. row number 4 (index==3) will blink 4 times etc. */ void rows() { for(int row=0;row<8;row++) { delay(delaytime); lc.setRow(0,row,B10100000); delay(delaytime); lc.setRow(0,row,(byte)0); for(int i=0;i<row;i++) { delay(delaytime); lc.setRow(0,row,B10100000); delay(delaytime); lc.setRow(0,row,(byte)0); } } } /* This function lights up a some Leds in a column. The pattern will be repeated on every column. The pattern will blink along with the column-number. column number 4 (index==3) will blink 4 times etc. */ void columns() { for(int col=0;col<8;col++) { delay(delaytime); lc.setColumn(0,col,B10100000); delay(delaytime); lc.setColumn(0,col,(byte)0); for(int i=0;i<col;i++) { delay(delaytime); lc.setColumn(0,col,B10100000); delay(delaytime); lc.setColumn(0,col,(byte)0); } } } /* This function will light up every Led on the matrix. The led will blink along with the row-number. row number 4 (index==3) will blink 4 times etc. */ void single() { for(int row=0;row<8;row++) { for(int col=0;col<8;col++) { delay(delaytime); lc.setLed(0,row,col,true); delay(delaytime); for(int i=0;i<col;i++) { lc.setLed(0,row,col,false); delay(delaytime); lc.setLed(0,row,col,true); delay(delaytime); } } } } void loop() { writeArduinoOnMatrix(); rows(); columns(); single(); }
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
项目三十六:快速扫描矩阵所以点
实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴) 项目三十六:快速扫描矩阵所以点 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据,数据接收引脚) CS →→→→→ D11(负载,命令接收引脚) CLK →→→→→ D10(时钟,时钟引脚) */ //We always have to include the library #include "LedControlMS.h" /* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD ***** Please set the number of devices you have ***** But the maximum default of 8 MAX72XX wil also work. */ LedControl lc=LedControl(12,10,11,1); /* we always wait a bit between updates of the display */ unsigned long delaytime=10; /* This time we have more than one device. But all of them have to be initialized individually. */ void setup() { //we have already set the number of devices when we created the LedControl int devices=lc.getDeviceCount(); //we have to init all devices in a loop for(int address=0;address<devices;address++) { /*The MAX72XX is in power-saving mode on startup*/ lc.shutdown(address,false); /* Set the brightness to a medium values */ lc.setIntensity(address,8); /* and clear the display */ lc.clearDisplay(address); } } void loop() { //read the number cascaded devices int devices=lc.getDeviceCount(); //we have to init all devices in a loop for(int row=0;row<8;row++) { for(int col=0;col<8;col++) { for(int address=0;address<devices;address++) { delay(delaytime); lc.setLed(address,row,col,true); delay(delaytime); lc.setLed(address,row,col,false); } } } }
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
项目三十七:动态字符串
实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴) 项目三十七:动态字符串 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据,数据接收引脚) CS →→→→→ D11(负载,命令接收引脚) CLK →→→→→ D10(时钟,时钟引脚) */ //We always have to include the library #include "LedControlMS.h" /* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */ LedControl lc=LedControl(12,10,11,1); /* we always wait a bit between updates of the display */ unsigned long delaytime=250; void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ lc.shutdown(0,false); /* Set the brightness to a medium values */ lc.setIntensity(0,8); /* and clear the display */ lc.clearDisplay(0); } /* This method will display the characters for the word "Arduino" one after the other on digit 0. */ void writeArduinoOn7Segment() { lc.setChar(2,0,'a',false); delay(delaytime); lc.setRow(2,0,0x05); delay(delaytime); lc.setChar(2,0,'d',false); delay(delaytime); lc.setRow(2,0,0x1c); delay(delaytime); lc.setRow(2,0,B00010000); delay(delaytime); lc.setRow(2,0,0x15); delay(delaytime); lc.setRow(2,0,0x1D); delay(delaytime); lc.clearDisplay(0); delay(delaytime); } /* This method will scroll all the hexa-decimal numbers and letters on the display. You will need at least four 7-Segment digits. otherwise it won't really look that good. */ void scrollDigits() { for(int i=0;i<13;i++) { lc.setDigit(0,3,i,false); lc.setDigit(0,2,i+1,false); lc.setDigit(0,1,i+2,false); lc.setDigit(0,0,i+3,false); delay(delaytime); } lc.clearDisplay(0); delay(delaytime); } void loop() { writeArduinoOn7Segment(); scrollDigits(); }
Arduino点阵文字(中) 8x8 LED Matrix MAX7219 Tutorial with Scrolling Text
https://www.bilibili.com/video/BV1Et411k7U2?from=search&seid=4477785334025497564&spm_id_from=333.337.0.0
Arduino Nano + MAX7219 8*8点阵组合 汉字显示
https://www.bilibili.com/video/av375403904/?from=search&seid=3172695889868987008&spm_id_from=333.337.0.0