【Arduino】108种传感器系列实验(22)-MAX7219点阵模块-Arduino爱好者 - Powered by Discuz!

Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

[经验] 【Arduino】108种传感器系列实验(22)---MAX7219点阵模块

[复制链接]
 楼主| 发表于 2021-7-1 14:23 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之四:在屏幕上逐渐显示欢迎面孔(延时500毫秒)


  实验场景图  
 楼主| 发表于 2021-7-1 15:59 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之五:混合显示各种动态图形
  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  4.   项目之五:混合显示各种动态图形
  5.   接脚连线:
  6.   MAX7219       UNO
  7.   VCC  →→→→→ 5V
  8.   GND  →→→→→ GND
  9.   DIN  →→→→→ D12(数据)
  10.   CS   →→→→→ D11(负载)
  11.   CLK  →→→→→ D10(时钟)
  12. */

  13. #include <MaxMatrix.h>

  14. int DIN = 12;   // MAX7219模块的DIN引脚
  15. int CLK = 10;   // MAX7219模块的CLK引脚
  16. int CS = 11;    // MAX7219模块的CS引脚
  17. int maxInUse = 1;

  18. MaxMatrix m(DIN, CS, CLK, maxInUse);

  19. char A[] = {4, 8,
  20.             B01111110,
  21.             B00010001,
  22.             B00010001,
  23.             B01111110,
  24.            };

  25. char B[] = {4, 8,
  26.             B01111111,
  27.             B01001001,
  28.             B01001001,
  29.             B00110110,
  30.            };

  31. char smile01[] = {8, 8,
  32.                   B00111100,
  33.                   B01000010,
  34.                   B10010101,
  35.                   B10100001,
  36.                   B10100001,
  37.                   B10010101,
  38.                   B01000010,
  39.                   B00111100
  40.                  };

  41. char smile02[] = {8, 8,
  42.                   B00111100,
  43.                   B01000010,
  44.                   B10010101,
  45.                   B10010001,
  46.                   B10010001,
  47.                   B10010101,
  48.                   B01000010,
  49.                   B00111100
  50.                  };

  51. char smile03[] = {8, 8,
  52.                   B00111100,
  53.                   B01000010,
  54.                   B10100101,
  55.                   B10010001,
  56.                   B10010001,
  57.                   B10100101,
  58.                   B01000010,
  59.                   B00111100
  60.                  };

  61. void setup() {
  62.   m.init(); //MAX7219初始化
  63.   m.setIntensity(8); // 初始 LED 矩阵亮度,0-15
  64. }

  65. void loop() {
  66.   // 在 x、y 或行、列位置设置 LED 开或关
  67.   m.setDot(6, 2, true);
  68.   delay(500);
  69.   m.setDot(6, 3, true);
  70.   delay(500);
  71.   m.clear(); // 清除显示
  72.   for (int i = 0; i < 8; i++) {
  73.     m.setDot(i, i, true);
  74.     delay(200);
  75.   }
  76.   m.clear();
  77.   // 在 x,y 处显示字符(字符的左上角)
  78.   m.writeSprite(2, 0, A);
  79.   delay(500);

  80.   m.writeSprite(2, 0, B);
  81.   delay(500);

  82.   m.writeSprite(0, 0, smile01);
  83.   delay(500);

  84.   m.writeSprite(0, 0, smile02);
  85.   delay(500);

  86.   m.writeSprite(0, 0, smile03);
  87.   delay(500);

  88.   for (int i = 0; i < 8; i++) {
  89.     m.shiftLeft(false, false);
  90.     delay(200);
  91.   }
  92.   m.clear();
  93. }
复制代码


 楼主| 发表于 2021-7-1 16:02 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之五:混合显示各种动态图形

实验场景图

 楼主| 发表于 2021-7-1 16:03 | 显示全部楼层
为了显示字符,需要在字符或字节数组中定义它们,这里举了几个例子。可以注意到这些位是如何形成实际为0和1的字符。在本例中,它们被旋转90度,但是库示例建议以这样的方式使用它们,以便以后更容易实现用于滚动文本的shiftLeft自定义函数。

16.jpg

在setup函数部分,只需初始化模块以及设置LED的亮度。在loop函数中,通过使用setDot()函数,可以点亮任意X、Y或行/列位置的单只LED,并且可以使用clear()函数清除显示。使用writeSprite()函数来显示预定义的字符,该函数的前两个参数是字符左上角的X和Y位置。最后我们使用shiftLeft()函数向左移动或滚动字符。

 楼主| 发表于 2021-7-1 17:28 | 显示全部楼层
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之六:跳动的红心
  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  4.   项目之六:跳动的红心
  5.   接脚连线:
  6.   MAX7219       UNO
  7.   VCC  →→→→→ 5V
  8.   GND  →→→→→ GND
  9.   DIN  →→→→→ D12(数据)
  10.   CS   →→→→→ D11(负载)
  11.   CLK  →→→→→ D10(时钟)
  12. */

  13. unsigned char i;
  14. unsigned char j;

  15. int Max7219_pinCLK = 10;
  16. int Max7219_pinCS = 11;
  17. int Max7219_pinDIN = 12;

  18. unsigned char disp1[19][8]={0x0c,0x1e,0x3e,0x7c,0x7c,0x3e,0x1e,0x0c};

  19. void Write_Max7219_byte(unsigned char DATA) {   
  20.   unsigned char i;
  21.   digitalWrite(Max7219_pinCS,LOW);  
  22.   for(i=8;i>=1;i--){   
  23.     digitalWrite(Max7219_pinCLK,LOW);
  24.     digitalWrite(Max7219_pinDIN,DATA&0x80);
  25.     DATA = DATA<<1;
  26.     digitalWrite(Max7219_pinCLK,HIGH);
  27.   }                                 
  28. }

  29. void Write_Max7219(unsigned char address,unsigned char dat){
  30.   digitalWrite(Max7219_pinCS,LOW);
  31.   Write_Max7219_byte(address);         
  32.   Write_Max7219_byte(dat);               
  33.   digitalWrite(Max7219_pinCS,HIGH);
  34. }

  35. void Init_MAX7219(void){
  36.   Write_Max7219(0x09, 0x00);      
  37.   Write_Max7219(0x0a, 0x03);      
  38.   Write_Max7219(0x0b, 0x07);      
  39.   Write_Max7219(0x0c, 0x01);      
  40.   Write_Max7219(0x0f, 0x00);      
  41. }

  42. void setup(){
  43.   pinMode(Max7219_pinCLK,OUTPUT);
  44.   pinMode(Max7219_pinCS,OUTPUT);
  45.   pinMode(Max7219_pinDIN,OUTPUT);
  46.   delay(2000);
  47.   Init_MAX7219();
  48. }

  49. void loop(){
  50.   for(j=0;j<19;j++){
  51.     for(i=1;i<9;i++)
  52.       Write_Max7219(i,disp1[j][i-1]);
  53.     delay(100);
  54.   }   
  55. }
复制代码


 楼主| 发表于 2021-7-1 17:29 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之六:跳动的红心

实验场景图   

 楼主| 发表于 2021-7-1 18:22 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之七:制作一个属于你的表白神器LOVE
  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  4.   项目之七:制作一个属于你的表白神器LOVE
  5.   接脚连线:
  6.   MAX7219       UNO
  7.   VCC  →→→→→ 5V
  8.   GND  →→→→→ GND
  9.   DIN  →→→→→ D12(数据)
  10.   CS   →→→→→ D11(负载)
  11.   CLK  →→→→→ D10(时钟)
  12. */

  13. int CLK = 10;
  14. int CS = 11;
  15. int DIN = 12; //这里定义了那三个脚

  16. unsigned char disp1[38][8] = {
  17.   {0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7E}, //L
  18.   {0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C}, //O
  19.   {0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x18}, //V
  20.   {0x7E, 0x40, 0x40, 0x7E, 0x40, 0x40, 0x40, 0x7E}, //E
  21.   {0x66, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}, //TX
  22. };

  23. void Delay(double x) {
  24.   double i;
  25.   for (i = 0; i < x; i++);
  26. }

  27. void setup() {
  28.   pinMode(CLK, OUTPUT);
  29.   pinMode(CS, OUTPUT);
  30.   pinMode(DIN, OUTPUT); //让三个脚都是输出状态
  31. }

  32. void loop() {
  33.   unsigned char i, j;
  34.   Delay_xms(100);
  35.   Init_MAX7219();
  36.   while (1)
  37.   {
  38.     for (j = 0; j < 38; j++)
  39.     {
  40.       for (i = 1; i < 9; i++)
  41.         Write_Max7219(i, disp1[j][i - 1]);
  42.       Delay(30000);
  43.     }
  44.   }
  45. }

  46. void Delay_xms(unsigned int x) {
  47.   unsigned int i, j;
  48.   for (i = 0; i < x; i++)
  49.     for (j = 0; j < 112; j++);
  50. }

  51. //--------------------------------------------
  52. //功能:向MAX7219(U3)写入字节
  53. //入口参数:DATA
  54. //出口参数:无

  55. void Write_Max7219_byte(unsigned char DATA) {
  56.   unsigned char i;
  57.   digitalWrite(CS, LOW);
  58.   for (i = 8; i >= 1; i--) {
  59.     digitalWrite(CLK, LOW);
  60.     if (DATA & 0X80)
  61.       digitalWrite(DIN, HIGH);
  62.     else
  63.       digitalWrite(DIN, LOW);
  64.     DATA <<= 1;
  65.     digitalWrite(CLK, HIGH);
  66.   }
  67. }

  68. //-------------------------------------------
  69. //功能:向MAX7219写入数据
  70. //入口参数:address、dat
  71. //出口参数:无

  72. void Write_Max7219(unsigned char address, unsigned char dat) {
  73.   digitalWrite(CS, LOW);
  74.   Write_Max7219_byte(address); //写入地址,即数码管编号
  75.   Write_Max7219_byte(dat); //写入数据,即数码管显示数字
  76.   digitalWrite(CS, HIGH);
  77. }

  78. void Init_MAX7219(void) {
  79.   Write_Max7219(0x09, 0x00); //译码方式:BCD码
  80.   Write_Max7219(0x0a, 0x03); //亮度
  81.   Write_Max7219(0x0b, 0x07); //扫描界限;4个数码管显示
  82.   Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1
  83.   Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0
  84. }
复制代码


 楼主| 发表于 2021-7-1 18:26 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之七:制作一个属于你的表白神器LOVE

实验场景图  

 楼主| 发表于 2021-7-1 19:44 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之八:表情、箭和移动车交替模式
  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  4.   项目之八:表情、箭和移动车交替模式
  5.   接脚连线:
  6.   MAX7219       UNO
  7.   VCC  →→→→→ 5V
  8.   GND  →→→→→ GND
  9.   DIN  →→→→→ D12(数据)
  10.   CS   →→→→→ D11(负载)
  11.   CLK  →→→→→ D10(时钟)
  12. */

  13. #include <LedControl.h>
  14. int DIN = 12;
  15. int CS =  11;
  16. int CLK = 10;
  17. LedControl lc = LedControl(DIN, CLK, CS, 0);

  18. void setup() {
  19.   lc.shutdown(0, false);
  20.   lc.setIntensity(0, 10);  //调整亮度最大为15
  21.   lc.clearDisplay(0);
  22. }

  23. void loop() {
  24.   //表情
  25.   byte smile[8] =   {0x3C, 0x42, 0xA5, 0x81, 0xA5, 0x99, 0x42, 0x3C};
  26.   byte neutral[8] = {0x3C, 0x42, 0xA5, 0x81, 0xBD, 0x81, 0x42, 0x3C};
  27.   byte sad[8] =   {0x3C, 0x42, 0xA5, 0x81, 0x99, 0xA5, 0x42, 0x3C};

  28.   //箭
  29.   byte arrow_up[8] = {0x18, 0x3C, 0x7E, 0xFF, 0x18, 0x18, 0x18, 0x18};
  30.   byte arrow_down[8] = {0x18, 0x18, 0x18, 0x18, 0xFF, 0x7E, 0x3C, 0x18};

  31.   //交替模式
  32.   byte d1[8] = {0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55};
  33.   byte d2[8] = {0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA};

  34.   //移动车
  35.   byte b1[8] = {0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x3C}; //8*8LED点阵 取模软件生成
  36.   byte b2[8] = {0x00, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x3C, 0x00};
  37.   byte b3[8] = {0x00, 0x00, 0x18, 0x3C, 0x18, 0x3C, 0x00, 0x00};
  38.   byte b4[8] = {0x00, 0x18, 0x3C, 0x18, 0x3C, 0x00, 0x00, 0x00};
  39.   byte b5[8] = {0x18, 0x3C, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00};
  40.   byte b6[8] = {0x3C, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x18};
  41.   byte b7[8] = {0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C};
  42.   byte b8[8] = {0x3C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x18};

  43.   //移动车
  44.   printByte(b1);
  45.   delay(50);
  46.   printByte(b2);
  47.   delay(50);
  48.   printByte(b3);
  49.   delay(50);
  50.   printByte(b4);
  51.   delay(50);
  52.   printByte(b5);
  53.   delay(50);
  54.   printByte(b6);
  55.   delay(50);
  56.   printByte(b7);
  57.   delay(50);
  58.   printByte(b8);
  59.   delay(50);

  60.   //交替模式
  61.   printByte(d1);
  62.   delay(300);

  63.   printByte(d2);
  64.   delay(300);

  65.   //箭
  66.   printByte(arrow_up);
  67.   delay(800);

  68.   printByte(arrow_down);
  69.   delay(500);

  70.   //表情
  71.   printByte(smile);
  72.   delay(500);

  73.   printByte(neutral);
  74.   delay(500);

  75.   printByte(sad);
  76.   delay(500);
  77. }

  78. void printByte(byte character []) {
  79.   int i = 0;
  80.   for (i = 0; i < 8; i++) {
  81.     lc.setRow(0, i, character[i]);
  82.   }
  83. }
复制代码


 楼主| 发表于 2021-7-1 19:46 | 显示全部楼层
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目之八:表情、箭和移动车交替模式

实验场景图  

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|好玩手机游戏盒子|196体育|Arduino爱好者

GMT+8, 2023-9-30 02:05 , Processed in 0.078816 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表