【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块2
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
项目之四:在屏幕上逐渐显示欢迎面孔(延时500毫秒)
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度 项目之四:在屏幕上逐渐显示欢迎面孔(延时500毫秒) 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据) CS →→→→→ D11(负载) CLK →→→→→ D10(时钟) */ #include <Sprite.h> #include <Matrix.h> Matrix myMatrix = Matrix(12, 10, 11);// Matrix(DIN, CLK, CS) void setup() { } void loop() { myMatrix.clear(); // 显示清屏 delay(500); myMatrix.write(2, 2, HIGH);// 打开相关位置的像素(点阵) delay(500); myMatrix.write(5, 2, HIGH); delay(500); myMatrix.write(1, 5, HIGH); delay(500); myMatrix.write(2, 6, HIGH); delay(500); myMatrix.write(3, 6, HIGH); delay(500); myMatrix.write(4, 6, HIGH); delay(500); myMatrix.write(5, 6, HIGH); delay(500); myMatrix.write(6, 5, HIGH); delay(500); }
Arduino实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
项目之五:混合显示各种动态图形
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度 项目之五:混合显示各种动态图形 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据) CS →→→→→ D11(负载) CLK →→→→→ D10(时钟) */ #include <MaxMatrix.h> int DIN = 12; // MAX7219模块的DIN引脚 int CLK = 10; // MAX7219模块的CLK引脚 int CS = 11; // MAX7219模块的CS引脚 int maxInUse = 1; MaxMatrix m(DIN, CS, CLK, maxInUse); char A[] = {4, 8, B01111110, B00010001, B00010001, B01111110, }; char B[] = {4, 8, B01111111, B01001001, B01001001, B00110110, }; char smile01[] = {8, 8, B00111100, B01000010, B10010101, B10100001, B10100001, B10010101, B01000010, B00111100 }; char smile02[] = {8, 8, B00111100, B01000010, B10010101, B10010001, B10010001, B10010101, B01000010, B00111100 }; char smile03[] = {8, 8, B00111100, B01000010, B10100101, B10010001, B10010001, B10100101, B01000010, B00111100 }; void setup() { m.init(); //MAX7219初始化 m.setIntensity(8); // 初始 LED 矩阵亮度,0-15 } void loop() { // 在 x、y 或行、列位置设置 LED 开或关 m.setDot(6, 2, true); delay(500); m.setDot(6, 3, true); delay(500); m.clear(); // 清除显示 for (int i = 0; i < 8; i++) { m.setDot(i, i, true); delay(200); } m.clear(); // 在 x,y 处显示字符(字符的左上角) m.writeSprite(2, 0, A); delay(500); m.writeSprite(2, 0, B); delay(500); m.writeSprite(0, 0, smile01); delay(500); m.writeSprite(0, 0, smile02); delay(500); m.writeSprite(0, 0, smile03); delay(500); for (int i = 0; i < 8; i++) { m.shiftLeft(false, false); delay(200); } m.clear(); }
为了显示字符,需要在字符或字节数组中定义它们,这里举了几个例子。可以注意到这些位是如何形成实际为0和1的字符。在本例中,它们被旋转90度,但是库示例建议以这样的方式使用它们,以便以后更容易实现用于滚动文本的shiftLeft自定义函数。
在setup函数部分,只需初始化模块以及设置LED的亮度。在loop函数中,通过使用setDot()函数,可以点亮任意X、Y或行/列位置的单只LED,并且可以使用clear()函数清除显示。使用writeSprite()函数来显示预定义的字符,该函数的前两个参数是字符左上角的X和Y位置。最后我们使用shiftLeft()函数向左移动或滚动字符。
Arduino实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
项目之六:跳动的红心
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度 项目之六:跳动的红心 接脚连线: 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(2000); Init_MAX7219(); } void loop(){ for(j=0;j<19;j++){ for(i=1;i<9;i++) Write_Max7219(i,disp1[j][i-1]); delay(100); } }
Arduino实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
项目之七:制作一个属于你的表白神器LOVE
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度 项目之七:制作一个属于你的表白神器LOVE 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据) CS →→→→→ D11(负载) CLK →→→→→ D10(时钟) */ int CLK = 10; int CS = 11; int DIN = 12; //这里定义了那三个脚 unsigned char disp1[38][8] = { {0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7E}, //L {0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C}, //O {0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x18}, //V {0x7E, 0x40, 0x40, 0x7E, 0x40, 0x40, 0x40, 0x7E}, //E {0x66, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}, //TX }; void Delay(double x) { double i; for (i = 0; i < x; i++); } void setup() { pinMode(CLK, OUTPUT); pinMode(CS, OUTPUT); pinMode(DIN, OUTPUT); //让三个脚都是输出状态 } void loop() { unsigned char i, j; Delay_xms(100); Init_MAX7219(); while (1) { for (j = 0; j < 38; j++) { for (i = 1; i < 9; i++) Write_Max7219(i, disp1[j][i - 1]); Delay(30000); } } } void Delay_xms(unsigned int x) { unsigned int i, j; for (i = 0; i < x; i++) for (j = 0; j < 112; j++); } //-------------------------------------------- //功能:向MAX7219(U3)写入字节 //入口参数:DATA //出口参数:无 void Write_Max7219_byte(unsigned char DATA) { unsigned char i; digitalWrite(CS, LOW); for (i = 8; i >= 1; i--) { digitalWrite(CLK, LOW); if (DATA & 0X80) digitalWrite(DIN, HIGH); else digitalWrite(DIN, LOW); DATA <<= 1; digitalWrite(CLK, HIGH); } } //------------------------------------------- //功能:向MAX7219写入数据 //入口参数:address、dat //出口参数:无 void Write_Max7219(unsigned char address, unsigned char dat) { digitalWrite(CS, LOW); Write_Max7219_byte(address); //写入地址,即数码管编号 Write_Max7219_byte(dat); //写入数据,即数码管显示数字 digitalWrite(CS, HIGH); } void Init_MAX7219(void) { Write_Max7219(0x09, 0x00); //译码方式:BCD码 Write_Max7219(0x0a, 0x03); //亮度 Write_Max7219(0x0b, 0x07); //扫描界限;4个数码管显示 Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1 Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0 }
Arduino实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
项目之八:表情、箭和移动车交替模式
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百七十六:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度 项目之八:表情、箭和移动车交替模式 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据) CS →→→→→ D11(负载) CLK →→→→→ D10(时钟) */ #include <LedControl.h> int DIN = 12; int CS = 11; int CLK = 10; LedControl lc = LedControl(DIN, CLK, CS, 0); void setup() { lc.shutdown(0, false); lc.setIntensity(0, 10); //调整亮度最大为15 lc.clearDisplay(0); } void loop() { //表情 byte smile[8] = {0x3C, 0x42, 0xA5, 0x81, 0xA5, 0x99, 0x42, 0x3C}; byte neutral[8] = {0x3C, 0x42, 0xA5, 0x81, 0xBD, 0x81, 0x42, 0x3C}; byte sad[8] = {0x3C, 0x42, 0xA5, 0x81, 0x99, 0xA5, 0x42, 0x3C}; //箭 byte arrow_up[8] = {0x18, 0x3C, 0x7E, 0xFF, 0x18, 0x18, 0x18, 0x18}; byte arrow_down[8] = {0x18, 0x18, 0x18, 0x18, 0xFF, 0x7E, 0x3C, 0x18}; //交替模式 byte d1[8] = {0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55}; byte d2[8] = {0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA}; //移动车 byte b1[8] = {0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x3C}; //8*8LED点阵 取模软件生成 byte b2[8] = {0x00, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x3C, 0x00}; byte b3[8] = {0x00, 0x00, 0x18, 0x3C, 0x18, 0x3C, 0x00, 0x00}; byte b4[8] = {0x00, 0x18, 0x3C, 0x18, 0x3C, 0x00, 0x00, 0x00}; byte b5[8] = {0x18, 0x3C, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}; byte b6[8] = {0x3C, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x18}; byte b7[8] = {0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C}; byte b8[8] = {0x3C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x18}; //移动车 printByte(b1); delay(50); printByte(b2); delay(50); printByte(b3); delay(50); printByte(b4); delay(50); printByte(b5); delay(50); printByte(b6); delay(50); printByte(b7); delay(50); printByte(b8); delay(50); //交替模式 printByte(d1); delay(300); printByte(d2); delay(300); //箭 printByte(arrow_up); delay(800); printByte(arrow_down); delay(500); //表情 printByte(smile); delay(500); printByte(neutral); delay(500); printByte(sad); delay(500); } void printByte(byte character []) { int i = 0; for (i = 0; i < 8; i++) { lc.setRow(0, i, character[i]); } }
Arduino实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十三:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
项目之九:动态显示字符串“XVOWM X”
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度 项目之九:动态显示字符串“XVOWM X” 接脚连线: MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D12(数据,数据接收引脚) CS →→→→→ D11(负载,命令接收引脚) CLK →→→→→ D10(时钟,时钟引脚) */ #include "LedControlMS.h" #define NBR_MTX 2 LedControl lc=LedControl(12, 10, 11, NBR_MTX); String sentence= "XVOWM X"; int letterCounter=0; // 显示更新之间的等待时间 unsigned long delaytime=300; void setup() { // 初始化并设置初始值。 声明函数设置 // 显示模块在启动时处于省电模式 Serial.begin(9600); //将数据速率设置为每秒 9600 位,以便与计算机进行串行数据通信 Serial.println("Setup"); //将数据作为可读的文本打印到串行端口 letterCounter=0; for (int i=0; i< NBR_MTX; i++){ lc.shutdown(i,false); //保持屏幕开启 lc.setIntensity(i,8); // 将亮度设置为中等值 lc.clearDisplay(i); // 清除每个字母后的显示 } } void loop() { //声明函数循环 char ch= sentence[letterCounter]; //定义字符 ch letterCounter++; if (letterCounter>14) letterCounter=0; //设置循环 lc.displayChar(0, lc.getCharArrayPosition(ch)); //在屏幕上显示每个字符 delay(500); lc.clearAll(); delay(200); }
Arduino实验场景图