极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20938|回复: 14

如何利用74hc595芯片进行多个小灯泡的选择控制

[复制链接]
发表于 2013-5-27 23:30:37 | 显示全部楼层 |阅读模式
由于digital i|o口不够用,因此希望通过74hc595芯片进行端口扩充,不过看了一圈帖子发现只能同时对端口进行共同控制。
我希望能够实现,例如:if a>b,则led1亮,不知道595能否实现这一功能,求各种意见~
回复

使用道具 举报

发表于 2013-5-28 00:32:55 来自手机 | 显示全部楼层
用锁存的方式可以独立控制八个来自: Android客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 10:27:49 | 显示全部楼层
zjyylj 发表于 2013-5-28 00:32
用锁存的方式可以独立控制八个

不是特别明白,能具体点么?
不太明白如何读取各个小灯泡的地址,以便控制他们。
回复 支持 反对

使用道具 举报

发表于 2013-5-28 11:04:23 | 显示全部楼层
mussBAschaffen 发表于 2013-5-28 10:27
不是特别明白,能具体点么?
不太明白如何读取各个小灯泡的地址,以便控制他们。

读取没办法..
只能输出
串列转并列
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 13:36:25 | 显示全部楼层
学长 发表于 2013-5-28 11:04
读取没办法..
只能输出
串列转并列

嗯,是输出需要单独控制
串列转并列?
回复 支持 反对

使用道具 举报

发表于 2013-5-28 15:07:50 | 显示全部楼层
mussBAschaffen 发表于 2013-5-28 13:36
嗯,是输出需要单独控制
串列转并列?

74ch595 就是位移寄存器, 输入的串列数据可以变成并列输出。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 15:35:48 | 显示全部楼层
学长 发表于 2013-5-28 15:07
74ch595 就是位移寄存器, 输入的串列数据可以变成并列输出。

嗯,这个效果能达到
可能我问题没有问清楚的缘故吧,我现在用的是Uno的板子,然后digital的 IO口不够用,希望扩展一下端口,所以选了595芯片,最终目的是测试多个数据然后用扩展芯片上相对应接的小灯泡闪烁达到报错的功能,看起来595并不能够实现
回复 支持 反对

使用道具 举报

发表于 2013-5-28 19:04:10 | 显示全部楼层
如果只是 LED 的话.. 正好 74ch595 能够胜任
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 21:46:54 | 显示全部楼层
学长 发表于 2013-5-28 19:04
如果只是 LED 的话.. 正好 74ch595 能够胜任

恩,只是led,可能本人过于愚蠢,不知道怎么修改代码达到这效果。。能指点一下么
回复 支持 反对

使用道具 举报

发表于 2013-5-28 23:05:55 | 显示全部楼层
mussBAschaffen 发表于 2013-5-28 21:46
恩,只是led,可能本人过于愚蠢,不知道怎么修改代码达到这效果。。能指点一下么

贴一段 我教学用的代码给你
你看看 我就不解释了... 不懂的你再问就好了


  1. #define PIN_DATA 11
  2. #define PIN_CLOCK 12
  3. #define PIN_LATCH 8

  4. int rollingInterval = 200; // 闪烁时间 ms
  5. int oldTime, newTime = 0 ;
  6. int lightState = B00000000;

  7. void setup(){
  8.   pinMode(PIN_DATA,OUTPUT);
  9.   pinMode(PIN_CLOCK,OUTPUT);
  10.   pinMode(PIN_LATCH,OUTPUT);
  11.   oldTime = millis();  
  12. }

  13. void loop(){
  14.   newTime = millis();
  15.   if ( newTime - oldTime >= rollingInterval){
  16.     switch (lightState){
  17.       case B00000000:
  18.         lightState = B00000001;
  19.         break;
  20.       case B00000001:
  21.         lightState = B00000010;
  22.         break;
  23.       case B00000010:
  24.         lightState = B00000100;
  25.         break;
  26.       case B00000100:
  27.         lightState = B00001000;
  28.         break;
  29.       case B00001000:
  30.         lightState = B00010000;
  31.         break;
  32.       case B00010000:
  33.         lightState = B00100000;
  34.         break;
  35.       case B00100000:
  36.         lightState = B01000000;
  37.         break;
  38.       case B01000000:
  39.         lightState = B10000000;
  40.         break;
  41.       case B10000000:
  42.         lightState = B00000001;
  43.         break;
  44.     }
  45.     digitalWrite(PIN_LATCH,LOW);
  46.     shiftOut(PIN_DATA,PIN_CLOCK,MSBFIRST,lightState);
  47.     digitalWrite(PIN_LATCH,HIGH);
  48.     oldTime = newTime;
  49.    
  50.   }
  51. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-29 09:49:38 | 显示全部楼层
学长 发表于 2013-5-28 23:05
贴一段 我教学用的代码给你
你看看 我就不解释了... 不懂的你再问就好了

发现一个小问题,扩展芯片是不是不能接arduino uno板子上d0和d1引脚上的?
回复 支持 反对

使用道具 举报

发表于 2013-5-29 10:14:00 | 显示全部楼层
mussBAschaffen 发表于 2013-5-29 09:49
发现一个小问题,扩展芯片是不是不能接arduino uno板子上d0和d1引脚上的?

可以 程序记得跟著改
相关的接法... 可以找论坛内其他帖子..
这些帖子,  接法正确, 只是说明不正确了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-29 10:23:11 | 显示全部楼层
学长 发表于 2013-5-29 10:14
可以 程序记得跟著改
相关的接法... 可以找论坛内其他帖子..
这些帖子,  接法正确, 只是说明不正确了

可能刚才接线的时候没插好,所以接了d0,d1之后有一些小问题,现在可以了
待会改完代码试一下,可能还会有问题要请教,不过还是先谢过啦~
回复 支持 反对

使用道具 举报

发表于 2013-5-29 10:57:31 | 显示全部楼层
mussBAschaffen 发表于 2013-5-29 10:23
可能刚才接线的时候没插好,所以接了d0,d1之后有一些小问题,现在可以了
待会改完代码试一下,可能还会 ...

ok 有问题 再开新帖吧... 这帖拉太长了..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-29 11:11:40 | 显示全部楼层
学长 发表于 2013-5-29 10:57
ok 有问题 再开新帖吧... 这帖拉太长了..

恩,好的

回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 14:39 , Processed in 0.040073 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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