【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏7
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴屏幕)
8×8 LED矩阵 MAX7219显示模块实验所需硬件清单
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
8*8 发光管 1088AS 共阴点阵屏X1
8×8 LED矩阵 MAX7219显示模块X2
Proto Shield 原型扩展板(带mini面包板)X1
程序一:快速扫描所有64个点
(1)Arduino参考开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序一:快速扫描所有64个点 下载库 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip 实验连线: VCC → 5V GND → GND DIN 接 D11 (MOSI) CS 接 D10 (SS) CLK 接 D13 (SCK) */ #include <Sprite.h> // 点阵之前的精灵 #include <Matrix.h> // 点阵驱动库 const int numChips = 1; //定义引脚DIN, CLK, CS Matrix myLeds = Matrix(11, 13, 10, numChips); void setup() { myLeds.clear();//点阵屏初始化 } void loop() { byte x, y; // 一次点亮一个 LED,从左到右扫描 // 从上到下...对于测试矩阵很有用 for (y = 0; y < 8; y++) { for (x = 0; x < (numChips * 8); x++) { myLeds.write(x, y, HIGH); delay(20); myLeds.write(x, y, LOW); } } }
程序四:四个角落的闪烁光点
(1)实验开源仿真编程(Linkboy V4.63)
程序五:循环变幻对角线光点
实验开源仿真编程(Linkboy V4.63)
程序六:间隔一秒,满屏闪烁
实验开源图形编程(Mind+、编玩边学)
设置满屏亮灯
程序七:三种图案的闪烁变脸
实验开源图形编程(Mind+、编玩边学)
程序八:快速显示字符,逐点刷屏
Arduino参考开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序八:快速显示字符,逐点刷屏 */ //导入驱动库 #include "LedControl.h" //定义点阵屏的引脚,接线DIN-D11,CLK-D13,CS-D10 LedControl lc = LedControl(11, 13, 10, 1); //我们总是在显示更新之间等待一段时间 unsigned long delaytime = 100; void setup() { //MAX72XX 启动时处于省电模式,我们得叫醒 lc.shutdown(0, false); //将亮度设置为中等值 lc.setIntensity(0, 8); //并清除显示 lc.clearDisplay(0); } //快速显示字符 void writeArduinoOnMatrix() { //这里是字符的数据 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}; //现在以一个小的延迟一个一个地显示它们 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); } /* 此功能连续点亮一些 LED。 该模式将在每一行上重复。 该模式将与行号一起闪烁。 行号 4 (index==3) 将闪烁 4 次,以此类推。 */ 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); } } } /* 此功能点亮一列中的一些 LED。 该模式将在每一列上重复。 该模式将与列号一起闪烁。 第 4 列(索引==3)将闪烁 4 次,以此类推。 */ 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); } } } /* 此功能将点亮矩阵上的每个 Led。 LED 将与行号一起闪烁。 行号 4 (index==3) 将闪烁 4 次,以此类推。 */ 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(); }
程序九:依序点亮每一颗LED 再依序熄灭每一颗LED
Arduino参考开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序九://依序点亮每一颗LED 再依序熄灭每一颗LED 引脚定义 DIN = D11 CS = D10 CLK = D13 */ //依序亮每一颗LED 再依序灭每一颗LED #include "LedControl.h" //引用 LedControl 库 LedControl lc = LedControl(11, 13, 10, 1); //定义DIN,CLK,CS void setup() { lc.shutdown(0, false); // 关闭省电模式 lc.setIntensity(0, 0); // 设定亮度为 0 (介于0~15之间) lc.clearDisplay(0); // 清除屏幕 } void loop() { int col; int row; for (col = 0; col < 8; col++) { for (row = 0; row < 8; row++) { lc.setLed(0, row, col, 1); // 将Led的列,行设定为亮 delay(100); } } for (col = 7; col >= 0; col--) { for (row = 7; row >= 0; row--) { lc.setLed(0, row, col, 0); // 将Led的列,行设定为暗 delay(100); } } }
程序十:依序显示 A,r,d,u,i,n,o
Arduino参考开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序十:依序显示 A,r,d,u,i,n,o 引脚定义 DIN = D11 CLK = D13 CS = D10 */ #include "LedControl.h" //引用 LedControl 库 LedControl lc = LedControl(11, 13, 10, 1); //定义DIN,CLK,CS //字型码A,r,d,u,i,n,o 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}; void setup() { lc.shutdown(0, false); // 关闭省电模式 lc.setIntensity(0, 15); // 设定亮度为 0 (介于0~15之间) lc.clearDisplay(0); // 清除屏幕 } void loop() { //显示 A for(int j=0;j<5;j++){ //显示 0~4 行 lc.setColumn(0,j,a[j]); } delay(500); //显示 r for(int j=0;j<5;j++){ //显示 0~4 行 lc.setColumn(0,j,r[j]); } delay(500); //显示 d for(int j=0;j<5;j++){ //显示 0~4 行 lc.setColumn(0,j,d[j]); } delay(500); //显示 u for(int j=0;j<5;j++){ //显示 0~4 行 lc.setColumn(0,j,u[j]); } delay(500); //显示 i for(int j=0;j<5;j++){ //显示 0~4 行 lc.setColumn(0,j,i[j]); } delay(500); //显示 n for(int j=0;j<5;j++){ //显示 0~4 行 lc.setColumn(0,j,n[j]); } delay(500); //显示 o for(int j=0;j<5;j++){ //显示 0~4 行 lc.setColumn(0,j,o[j]); } delay(50); }