yqfans 发表于 2015-2-7 04:45:15

小白求助~ 74HC595怎么不能让八个灯都亮,每隔一个灭一个,8个灯,只能亮四个

74HC595怎么不能让八个灯都亮,每隔一个灭一个,8个灯,只能亮四个,为什么?


就是按教程做的那个实验,

线路图就按这个来的;(教程上的)


程序如下:(也是教程上的)

int latchPin = 5;
int clockPin = 4;
int dataPin = 2; //这里定义了那三个脚
void setup ()
{
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT); //让三个脚都是输出状态
}
void loop()
{
for(int a=0; a<256; a++)
    //这个循环的意思是让a这个变量+1一直加到到256,每次循环都进行下面的活动
{
    digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
    shiftOut(dataPin,clockPin,MSBFIRST,a);
    //这个就是用MSBFIRST参数让0-7个针脚以高电平输出(LSBFIRST 低电平)是dataPin的参数,
   //clockPin的参数是变量a,前面我们说了这个变量会一次从1+1+到256,是个十进制数,
    // 输入到芯片后会产生8个二进制数,达到开关的作用
    digitalWrite(latchPin,HIGH); //将ST_CP这个针脚恢复到高电平
    delay(1000); //暂停1秒钟让你看到效果
}

}



有懂得给说下,谢谢。

xinhoujue 发表于 2015-2-7 09:24:09

本帖最后由 xinhoujue 于 2015-2-7 09:26 编辑

void loop()//想让8个LED亮需要改这里的程序
{
       //重新配置资源
    {
       //让8个LED依次点亮
   }
}
       程序比较简单,我就不写了。:)

yqfans 发表于 2015-2-7 15:01:23

xinhoujue 发表于 2015-2-7 09:24 static/image/common/back.gif
void loop()//想让8个LED亮需要改这里的程序
{
       //重新配置资源


不明白啊,我是小白,就是程序不明白

laofuz1024 发表于 2015-2-7 15:57:42

我不是很明白,移位寄存器的作用,还有移位寄存器和存储寄存器那两个脚改变时,对芯片内部数据的影响

yqfans 发表于 2015-2-7 16:06:16

laofuz1024 发表于 2015-2-7 15:57 static/image/common/back.gif
我不是很明白,移位寄存器的作用,还有移位寄存器和存储寄存器那两个脚改变时,对芯片内部数据的影响

你这个有点高深了,我想控制8个LED灯都没实现:L

yqfans 发表于 2015-2-7 16:38:33

xinhoujue 发表于 2015-2-7 09:24 static/image/common/back.gif
void loop()//想让8个LED亮需要改这里的程序
{
       //重新配置资源


void loop()
{
for(int a=0; a<256; a++)
    //这个循环的意思是让a这个变量+1一直加到到256,每次循环都进行下面的活动
{
    digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
    shiftOut(dataPin,clockPin,MSBFIRST,a);
    //这个就是用MSBFIRST参数让0-7个针脚以高电平输出(LSBFIRST 低电平)是dataPin的参数,
   //clockPin的参数是变量a,前面我们说了这个变量会一次从1+1+到256,是个十进制数,
    // 输入到芯片后会产生8个二进制数,达到开关的作用
    digitalWrite(latchPin,HIGH); //将ST_CP这个针脚恢复到高电平
    delay(1000); //暂停1秒钟让你看到效果
}

}


就是上面这部分程序,我就看不太懂,为什么要用for循环语句?a变量到底有什么用?后面写的更不知道是怎么控制8个LED的。。。

林定祥 发表于 2015-2-7 19:13:18

yqfans 发表于 2015-2-7 16:38 static/image/common/back.gif
void loop()
{
for(int a=0; a

这个是一个示例,功能是移入数据0到255。

迷你强 发表于 2015-2-7 21:39:26

这个,刚开始就玩595的确有点难理解

yqfans 发表于 2015-2-7 23:16:23

迷你强 发表于 2015-2-7 21:39 static/image/common/back.gif
这个,刚开始就玩595的确有点难理解

好吧,那我占时先放一放。那刚入门建议玩什么

Ansifa 发表于 2015-2-7 23:33:32

我觉得是你的面包板的问题,你确定面包板下边缘是全部想通的?一排电阻的下边接口。电源负极那个。

yqfans 发表于 2015-2-8 02:10:36

Ansifa 发表于 2015-2-7 23:33 static/image/common/back.gif
我觉得是你的面包板的问题,你确定面包板下边缘是全部想通的?一排电阻的下边接口。电源负极那个。

应该是通的,因为我换了我也不懂的程序,结果亮了另外4个(就是之前灭的那4个),但还是无法控制8个LED灯,所以我推测是应该是程序方面的问题

マイナス37度 发表于 2015-2-8 20:45:08

本帖最后由 マイナス37度 于 2015-2-8 21:58 编辑

yqfans 发表于 2015-2-8 02:10 static/image/common/back.gif
应该是通的,因为我换了我也不懂的程序,结果亮了另外4个(就是之前灭的那4个),但还是无法控制8个LED灯 ...

帮你查了下74,他是需要一组8位2进制数来控制的,比如数等于00000001那么只亮一盏led,要8盏全亮只要输入11111111这个二进制数就行了,11111111等于十进制的255,那么a的取值是对的,亮4盏的原因可能是线路的问题,这玩意吃透了很简单的,看你同样是初学者才讲这么多,希望能帮到你吧

语法

shiftOut(dataPin, clockPin, bitOrder, value)
参数

dataPin:输出每一位数据的引脚(int)
clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)
bitOrder:输出位的顺序,最高位优先或最低位优先
value: 要移位输出的数据(byte)

yqfans 发表于 2015-2-9 01:27:18

マイナス37度 发表于 2015-2-8 20:45 static/image/common/back.gif
帮你查了下74,他是需要一组8位2进制数来控制的,比如数等于00000001那么只亮一盏led,要8盏全亮只要输入 ...

好的,我先研究下,谢谢

laofuz1024 发表于 2015-2-10 14:20:28

yqfans 发表于 2015-2-7 16:06 static/image/common/back.gif
你这个有点高深了,我想控制8个LED灯都没实现

呵呵,理解这些,就能用得随心所欲了!但是我不明白,什么时候应该往数据引脚写数据,什么应该把寄存器的两个引脚置高或置低

swfzz 发表于 2015-2-10 22:04:39

关于这个问题,看一下,那个郭天祥的十天学会单片机,就会完全理解了!
页: [1] 2
查看完整版本: 小白求助~ 74HC595怎么不能让八个灯都亮,每隔一个灭一个,8个灯,只能亮四个