【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块2

发布时间 2023-07-16 17:39:06作者: 行者花雕

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实验场景图