极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 72422|回复: 17

使用arduino与两块74HC595级联后串转并

[复制链接]
发表于 2012-9-17 03:27:44 | 显示全部楼层 |阅读模式
本帖最后由 lanxix 于 2012-9-17 03:31 编辑



首先,先把单个74HC595连好,并且能正常工作,关于单个连接请参考这个 http://www.geek-workshop.com/thread-203-1-1.html


然后级联 把第一块的Q7'连接到第二块的DS,然后第一块的Pin_ST_CP并联到第二块的Pin_ST_CP,第一块的Pin_SH_CP并联到第二块的Pin_SH_CP

借别人的图


以下是我的arduino的程序部分

const byte Pin_ST_CP=8;
const byte Pin_DS=9;
const byte Pin_SH_CP=10;
void setup()
{
  Serial.begin(9600);
  pinMode(Pin_ST_CP,OUTPUT);//ST_CP
  pinMode(Pin_DS,OUTPUT);//DS
  pinMode(Pin_SH_CP,OUTPUT);//SH_CP
  digitalWrite(Pin_ST_CP,LOW);
}

void loop()
{
  if(Serial.available())
  {
    char Buff[2];
    Serial.readBytes(Buff,sizeof(Buff));
    //Buff[0]=Serial.read();
    //Buff[1]=Serial.read();
    Serial.print((byte) Buff[0]);
    Serial.print(",");
    Serial.print((byte) Buff[1]);
    Serial.println();
    digitalWrite(Pin_ST_CP,LOW);
    //MSBFIRST,从高到底传输二进制位,74HC595会从第一块开始,从Q0一直位移数据到Q7,如果还有数据,则继续把压到第二块的Q0到Q7
    //这里发的是第二块的数据
    shiftOut(Pin_DS, Pin_SH_CP, MSBFIRST ,(byte) Buff[0]) ;
    //MSBFIRST的方式,这里才是第一块的数据
    shiftOut(Pin_DS, Pin_SH_CP, MSBFIRST ,(byte) Buff[1]) ;
    digitalWrite(Pin_ST_CP,HIGH);
  }
}


为了方便测试,我的程序使用sscom32的十六进制的输入,如图



所以,如果你使用自带的串口编辑器,它发送的不是十六进制,而是字符串,产生的结果可能会与你设想的不一样


这里有必要说明一下程序,特别是发送时高低位的区别MSBFIRST 和 LSBFIRST 的区别

74HC595的接收:当SH_CP上升沿时移位寄存器中的数据依次移动一位,即Q0中的数据移到Q1中,Q1中的数据移到Q2中,依次类推;下降沿时移位寄存器中的数据保持不变

就如下表,我们发送十进制的2,二进制是00000010

MSBFIRST
00000010
01000000
12345678   -->对应595的Q0~Q7
高位先发送,对应Q0~Q7是倒序关系

LSBFIRST
00000010
00000010
12345678   -->对应595的Q0~Q7
低位先发送,对应Q0~Q7是顺序关系


74HC595的级联,数据也是先从第一块开始,一直迁移到第二块,就像往杯子倒水一样,最前面的水向下倒


OK,就到这里,可能写得不太好,希望大家能看懂

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-9-17 09:30:31 | 显示全部楼层
单个和一个是一样的。顶一个!
回复 支持 反对

使用道具 举报

发表于 2012-9-17 18:14:33 | 显示全部楼层
多片级连的话那就是最后一次压入的数据会保留在第一片中了,一开始的会到了最后一片?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-17 21:30:19 | 显示全部楼层
萧芸凤 发表于 2012-9-17 18:14
多片级连的话那就是最后一次压入的数据会保留在第一片中了,一开始的会到了最后一片?

也不是这么说,要看你压入多少数据,反正数据会一层一层的向下走,先到第一层,如果还有,第一层的数据就移到第二层,第一层接收最新的,第三层也是这样,总之,数据满位后会一层一层向下走
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-17 21:31:10 | 显示全部楼层
像现在二层级联,如果只发一个字节,那么点亮的是第一级的,而不是第二级,这样说明白了吧
回复 支持 反对

使用道具 举报

发表于 2012-9-18 08:43:24 | 显示全部楼层
手头有个5片级联的,还没研究
回复 支持 反对

使用道具 举报

发表于 2013-9-3 21:35:44 | 显示全部楼层
学习了,谢谢!
回复 支持 反对

使用道具 举报

发表于 2013-12-9 17:12:41 | 显示全部楼层
顶一个! 不错,很好!
回复 支持 反对

使用道具 举报

发表于 2014-9-11 08:24:20 | 显示全部楼层
目前是三片级联,控制1608点阵。
回复 支持 反对

使用道具 举报

发表于 2014-9-11 09:14:13 | 显示全部楼层
转并是要驱动什么?
回复 支持 反对

使用道具 举报

发表于 2014-12-3 19:13:47 | 显示全部楼层
本帖最后由 menghuyouyou 于 2014-12-3 19:15 编辑

使用arduino与两块74HC595级联后控制6位数码管(共阴)。要求数码管显示从1开始,到50000。怎么办?代码如何写?
电路与本帖的一样。
回复 支持 反对

使用道具 举报

发表于 2015-1-19 17:22:16 | 显示全部楼层
我级联的单个的数码管  会出现 显示乱的现象
回复 支持 反对

使用道具 举报

发表于 2015-7-2 13:39:42 | 显示全部楼层
LZ,我试了一下,使用 Q7 而不是Q7' 结果一样。
回复 支持 反对

使用道具 举报

发表于 2016-1-22 16:26:42 | 显示全部楼层
打算用595来控制LED方块,要8片
回复 支持 反对

使用道具 举报

发表于 2016-8-22 00:15:36 | 显示全部楼层
学习了。。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-23 16:15 , Processed in 0.052598 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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