YFROBOT创客社区

标题: arduino 驱动 8x8点阵模块(2片74HC595芯片驱动红色8X8点阵 5线连接 )滚屏显示 [打印本页]

作者: AllBlue    时间: 2015-10-19 10:33
标题: arduino 驱动 8x8点阵模块(2片74HC595芯片驱动红色8X8点阵 5线连接 )滚屏显示
本帖最后由 AllBlue 于 2020-3-6 13:08 编辑

arduino 驱动 8x8点阵模块(2片74HC595芯片驱动红色8X8点阵  5线连接 )滚屏显示!

arduino 8x8点阵地址:http://www.yfrobot.com/thread-2264-1-1.html
8x8点阵使用起来比较麻烦,需要连接16个引脚,所以我们改为模块,它采用2片74HC595芯片驱动红色8X8点阵管,只需要使用控制器3路IO口,根据点阵管动态扫描原理进行显示,可以显示多种图案,使用更加方便!
点阵模块简介:wiki - 8x8点阵模块
wiki地址中有驱动点阵模块的例程,因为上位机软件的不同,出来的数据不同,所以程序也不可能一样的!
wiki中使用的是如下图的上位机软件,很好用的软件。
[attach]1110[/attach]


软件下载地址:[attach]1111[/attach]
百度网盘下载地址:http://pan.baidu.com/s/1pJAFgWN
论坛中还有用点阵模块做乒乓游戏的贴:http://www.yfrobot.com/thread-2408-1-1.html

本帖也做一个8x8点阵模块的驱动,和上面的有些区别,要实现滚屏显示!
首先我们需要用到arduino 控制板和点阵模块,还需要一个取模软件。
取模软件截图:
[attach]1112[/attach]



软件下载:[attach]1113[/attach]
首先我们连接arduino控制板和点阵模块,(除了电源引脚,其他引脚可根据实际情况选择连接,只要程序和硬件对应就可以):
[attach]1114[/attach]


连接好后我们看下程序:
[C] 纯文本查看 复制代码
/**************************************************
* Face
* ( 8x8 Led Dot Matrix with two 74HC595 on Arduino)
*
* by YFROBOT
***************************************************/
#define AFrame 7                        // animation array
#define Space 4                         // Each frame space
#define FStep (8+Space)

//Pin connected to DS of 74HC595
int SER = 10;
//Pin connected to ST_CP of 74HC595
int RCK  = 11;
//Pin connected to SH_CP of 74HC595
int SRCK  = 12;

byte screen[8] = {0, 0, 0, 0, 0, 0, 0, 0};
byte scroll = 0;
byte frame = 0;

unsigned char animation[AFrame][8] = {
  {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
  //user defined animation data
  //  {0xFF, 0xA5, 0xC3, 0x81, 0xBD, 0xA5, 0xA5, 0xFF,},
  //  {0xC3, 0xC3, 0x0, 0x18, 0x18, 0x0, 0x42, 0x3C,},
  //  {0x8, 0xC, 0xFE, 0xFF, 0xFE, 0xC, 0x8, 0x0,},
  //  {0xC3, 0x81, 0xE7, 0xE7, 0xE7, 0x81, 0x81, 0xC3,},
  {0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42,},
  {0x7E, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x7E,},
  {0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7C,},
  {0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7C,},
  {0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18,},

  {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
};


void setup() {
  pinMode(RCK, OUTPUT);
  pinMode(SRCK, OUTPUT);
  pinMode(SER, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // Parameters 1: animation data
  // Parameters 2: display mode
  // Parameters 3: refresh time
  ScreenDisplay( animation, 1 , 200);
}

void UpDateScreen(byte data[], unsigned long ReTime) {
  unsigned long startime = millis();
  while (millis() - startime < ReTime)
  {
    for (int i = 0; i < 8; i++) {
      byte col = B1 << i;
      digitalWrite(RCK, LOW);
      shiftOut(SER, SRCK, LSBFIRST, ~col); //先选择列
      shiftOut(SER, SRCK, LSBFIRST, data); //再送行数据
      digitalWrite(RCK, HIGH);
    }
  }
}

void ScreenDisplay( unsigned char AN[AFrame][8], int mode , unsigned long ReTime) {

  UpDateScreen(screen, ReTime);     // Refresh screen data

  if (mode == 0 ) {              // mode 1:refresh Display
    for (int i = 0; i < 8; i++) {
      screen = AN[frame];
    }
    frame ++;
    if (frame >=  AFrame) {
      frame = 0;
    }
  } else if (mode == 1) {        // mode 2: scroll Display
    if (scroll > FStep * frame && scroll <= FStep * (frame + 1)) {
      for (int i = 0; i < 8; i++) {
        screen = (AN[frame] << (scroll - FStep * frame)) | (AN[frame + 1] >> (FStep * (frame + 1) - scroll)) ;
      }
      if (scroll % FStep == 0) {
        frame ++;
        if (frame >=  AFrame - 1) {
          frame = 0;
          scroll = 1;
        }
      }
    }
    scroll++;
  }
}

程序中参数和函数简介:
animation[AFrame][8] 需要用户通过上面的取模软件获取,编辑你想要的画面后,复制下面的数据至animation数组中即可!
AFrame 值根据你数组来定   
Space 是每组画面间的间隔,例如为4,则两个画面间隔4列!
ScreenDisplay( unsigned char AN[AFrame][8],int mod, unsigned long ReTime) 函数为显示函数;其中
    参数一:数组数据
    参数二:显示模式  1为滚屏模式,0为动画模式
    参数三:显示速度

下面我们运行程序看下效果(程序显示HELLO滚屏效果~~):
http://v.youku.com/v_show/id_XMTM2MzUxNTA1Mg==.html
http://v.youku.com/v_show/id_XMTM2MzUxNTA1Mg==.html

作者: hero_sun    时间: 2016-1-26 08:36
本帖最后由 hero_sun 于 2016-1-28 14:08 编辑

能不能做pong游戏?
作者: hero_sun    时间: 2016-1-26 15:59
本帖最后由 hero_sun 于 2016-1-28 14:08 编辑
hero_sun 发表于 2016-1-26 08:36
能不能做pong游戏?

就是用变阻器操作拍子打球的
作者: AllBlue    时间: 2016-1-27 09:21
hero_sun 发表于 2016-1-26 15:59
就是用变阻器操作拍子打球的

可以的,看http://www.yfrobot.com/forum.php?mod=viewthread&tid=2408&highlight=%C6%B9%C5%D2
作者: hero_sun    时间: 2016-1-29 17:09
谢谢AllBlue!
作者: AllBlue    时间: 2016-7-28 15:10
ytheanswer 发表于 2016-7-28 12:46
那个shiftout函数是哪个库的?

在这里:
https://www.arduino.cc/en/Reference/ShiftOut
不用添加库,可直接使用!

作者: 大闲人    时间: 2016-8-17 13:01
楼主你好,我是新手,看到帖子用你的源代码,一直无法编译上传到Arduino UNO,显示ScreenDisplay()函数在该部分未定义,想问下这是为什么?
作者: AllBlue    时间: 2016-8-17 13:32
大闲人 发表于 2016-8-17 13:01
楼主你好,我是新手,看到帖子用你的源代码,一直无法编译上传到Arduino UNO,显示ScreenDisplay()函数在该 ...

将setup 函数和 loop函数移到程序最后,再编译试试看!应该是编译器问题

作者: 大闲人    时间: 2016-8-18 13:04
AllBlue 发表于 2016-8-17 13:32
将setup 函数和 loop函数移到程序最后,再编译试试看!应该是编译器问题

谢谢,楼主可以了。楼主,如果想改成级联该怎么改.
作者: AllBlue    时间: 2016-8-18 14:03
本帖最后由 AllBlue 于 2016-8-18 14:06 编辑
大闲人 发表于 2016-8-18 13:04
谢谢,楼主可以了。楼主,如果想改成级联该怎么改.

这个模块没有引出级联引脚!
不过需要的话,可以根据原理图,用3根线分别将RCK/SRCK/SER连接上,其中SER需要连接到第二片74HC595的QH1引脚,见下图:

                               
登录/注册后可看大图

连接好后,程序也需要更改下!
如果不会的话,看下这个网页:https://www.arduino.cc/en/Tutorial/ShiftOut,再研究下74HC595芯片手册。
作者: 大闲人    时间: 2016-8-18 15:50
AllBlue 发表于 2016-8-18 14:03
这个模块没有引出级联引脚!
不过需要的话,可以根据原理图,用3根线分别将RCK/SRCK/SER连接上,其中SER ...

好的,谢谢楼主!
作者: azi1974    时间: 2019-6-3 22:59
继续学习,发现自己要学的太多了




欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) Powered by Discuz! X3.1