极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8958|回复: 3

问一个74HC595的问题

[复制链接]
发表于 2015-2-12 21:05:51 | 显示全部楼层 |阅读模式
首先把图晒出来先

这是原理图:



这是面包板的




这是程序:

  1. /**
  2.   定义芯片接口
  3. */
  4. #define DS 9
  5. #define OE 8
  6. #define ST_CP 7
  7. #define SH_CP 6
  8. #define MR 5

  9. void setup(){
  10.   Serial.begin(9600);
  11.   pinMode(DS,OUTPUT);
  12.   pinMode(OE,OUTPUT);
  13.   pinMode(ST_CP,OUTPUT);
  14.   pinMode(SH_CP,OUTPUT);
  15.   pinMode(MR,OUTPUT);
  16.   digitalWrite(OE,LOW);  //允许芯片输出
  17. }

  18. void loop(){
  19.   delay(50);
  20.   digitalWrite(MR,LOW);  //清空移位寄存器
  21.   delay(30);
  22.   digitalWrite(MR,HIGH);  //使移位寄存器有效
  23.   delay(3000);
  24.   
  25.   int x=255;  //把这个数字转换成二进制后当作输出显示,255转换成二进制就是8个1
  26.   for(int i=0;i<8;i++){
  27.     //i<8是只转换8位二进制,最大就是255
  28.     if(x%2==1){
  29.       //转换后如果该位是1就放入高电平芯片DS口
  30.       digitalWrite(DS,HIGH);
  31.     }else{
  32.       //转换后如果该位是0就放入低电平芯片DS口
  33.       digitalWrite(DS,LOW);
  34.     }
  35.     Serial.println(x);
  36.     x=x/2;  //这个是转换二进制的逻辑
  37.     delay(50);
  38.     digitalWrite(SH_CP,HIGH);
  39.     delay(50);
  40.     digitalWrite(SH_CP,LOW);
  41.     /**
  42.     把SH_CP移位寄存器口,置高50微秒后置低,移位寄存器里的数据移动
  43.     */
  44.     delay(50);
  45.     digitalWrite(ST_CP,HIGH);
  46.     delay(50);
  47.     digitalWrite(ST_CP,LOW);
  48.     /**
  49.     把存储寄存器置高50微秒,移位寄存器的数据放到存储寄存器显示
  50.     */
  51.     delay(1000);
  52.   }
  53.   for(int i=0;i<5;i++){
  54.     digitalWrite(OE,HIGH);
  55.     delay(1000);
  56.     digitalWrite(OE,LOW);
  57.     /**
  58.     把允许输出改变,使所有口闪烁
  59.     */
  60.     delay(1000);
  61.   }
  62. }
复制代码




各位大神,我发现一个问题,不知道是怎么回事,求教一下:


1、重启模块的时候,芯片 Q0口,也就是15口的这个灯,总是亮的,等到数据移动的时候才能正常亮或者灭

2、在位移过程中,发现  只要芯片  Q7 口 的数据为1的话,Q7S的接口也亮,而且Q7S的口灯先亮,这个Q7S的灯先亮了过0.1秒这样Q7口才亮

问一下,这个到底怎么回事呢,还有我理解这个74HC595芯片有没有错误???


谢谢,谢谢

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2015-2-12 22:12:21 | 显示全部楼层
在setup()中先对595“清零”吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-17 02:33:05 | 显示全部楼层
林定祥 发表于 2015-2-12 22:12
在setup()中先对595“清零”吧。

嗯,把位移寄存器清零之后,还要写一次存储寄存器!这要才是真正的清零

现在就是奇怪,为什么Q7s的接口,似乎是Q7的接口先接到数据一样,只要Q7的接口的数据为1,灯要亮的话,Q7s的接口都会在之前先亮,就算我发送的数据只有8位,正好是Q0-Q7有数据而已
回复 支持 反对

使用道具 举报

发表于 2015-2-27 09:43:50 | 显示全部楼层
请参考这里http://ediy.com.my/index.php/201 ... -50/item/89-arduino通过74hc595扩展io
使用Arduino IDE自带的shiftOut()函数
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 10:03 , Processed in 0.039659 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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