关于74hc595芯片的实验-arduino串入并出实验(转)
原文地址是迷你强的BLOG:http://www.miniqiang.com/?p=3看了很多有关于74hc595芯片的介绍,手册,教程,以及各种详细讲解,云里雾里各种不理解,但是跟着将程序写出来,执行后,我顿时理解了这玩意的用处,这玩意简单的说就是一个通过输入一个10进制数(0-255),芯片会将其转换成8位2进制数以高低电平的方式由其对应的引脚输出。
Q0-Q7这8个脚就是输出脚
vcc接5V
GUN接地
MR是主复位针脚低电平有效,所以我们要给他加高电平,一样接到5v上面
OE是输出控制器,低电平才能让芯片输出,所以我们将它接到地线上
然后将DS(pin14)接到arduino的11号数字口上,SH_CP(pin11)接到arduino12号数字口,ST_CP(pin12)接到arduino的8号口上(后面这三个针脚接arduino针脚按自己喜好接,程序中定义好就行了,无所谓的)
然后Q0-Q7按自己喜好,接数码管也行,接led也行,反正能实现同时控制8个东东
以LED为例,LED别忘了接上200Ω左右的电阻保护下。。然后后看下面的程序int latchPin = 8;
int clockPin = 12;
int dataPin = 11; //这里定义了那三个脚
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秒钟让你看到效果
}
}
此程序的效果就是通过LED的明灭来表示0或者1,8个二极管就能表示8位二进制数,换算成10进制数的话正好是0-255,与我们程序对应
附录:8位二进制与10进制数字的换算关系
十进制与二进制换算表
十进制:128 64 32 16 8 4 2 1
二进制:0 0 0 0 0 0 0
简单的说,二进制的数值换算十进制按上面的表推算就行了 比如说二进制数101就相当于00000101,按上面表对应得数字就是4和1,4+1=5所以十进制的值就是5,将a这个变量赋值为5的话,led的效果应该是灭灭灭灭灭亮灭亮 ,这个就是所谓的通过三只脚能扩展控制8个脚的原理,因为针脚的作用其实也就是开开关关。。。。
具体换算原理不做深究,请自己查询。
那个进制换算使神吗意思
不是进制换算,其实是串入并处,表现形式就是输送一个十进制数,会在芯片的8个脚输出等同的8位二进制的高低电平 支持啊,这里面学习的东西非常的多啊,好好利用! 直觉上是个好东西……举个应用的例子呗?比如用来驱动数码管? 黑马 发表于 2012-2-27 12:42 static/image/common/back.gif
直觉上是个好东西……举个应用的例子呗?比如用来驱动数码管?
这个是数码管例子
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=204 按教程链接试下 为什么木有反应 求解答? 黑格士 发表于 2012-3-13 14:55 static/image/common/back.gif
按教程链接试下 为什么木有反应 求解答?
256前面应该是<, 不是> smallzzy 发表于 2012-3-17 13:54 static/image/common/back.gif
256前面应该是
原来如此。。。我把错误代码改过来了 弘毅 发表于 2012-3-17 14:11 static/image/common/back.gif
原来如此。。。我把错误代码改过来了
我尝试了一下,一片可以很容易的驱动起来,两片就不行了。我用两个级联来驱动4位共阳极数码管,八个码位接第一片595,四位阳极选择端接第二片595,想法是先输出选择端数据,移位,然后再输出数码位。这里有个问题,第一次输出是高电平,第二次输出是低电平,但是我试了N多次都没有成功,希望弘毅老兄给写个两位乃至几位级联的例子。 595的级联,你是如何发送? 我以前看过的文章上说,如果是16位,先发高8位,再发低8位 lanxix 发表于 2012-9-16 12:49 static/image/common/back.gif
595的级联,你是如何发送? 我以前看过的文章上说,如果是16位,先发高8位,再发低8位
我就是按照这个来做的,如果两个八位都是低电平输出木有问题,用两片同时驱动两个数码管可以正常显示,而且第二个比第一个延迟一个步骤。但是如果驱动四位数码管就不同了,我的是共阳极的,第一个595连接八个码位,第二个连接四个阳极选择位。按照要求,需要先输出第二片的控制,这个时候是高电平输出,然后再输出第一块的数据,又是低电平输出,然后就不正常了。 萧芸凤 发表于 2012-9-16 20:36 static/image/common/back.gif
我就是按照这个来做的,如果两个八位都是低电平输出木有问题,用两片同时驱动两个数码管可以正常显示,而 ...
你说高电平输出和低电平输出是指MSBFIRST和LSBFIRST 吗?其实这不叫高低电平,应该叫二进制高低位
SPI接口要说明先传高位还是低位,MSBFIRST是高位到低位的发送,LSBFIRST反之
像11110000 如果是MSBFIRST发送,那么是按从左到右的方向发送,LSBFIRST反之.
一块595,接收方向我映像中是从高位开始填充,就是Q7至Q0 意思就是11110000以MSBFIRST发送的话,
那么Q7~Q0的位置正好对应这个二进制的位置,LSBFIRST反之.
如果级联595,似乎是最后一块开始填充吧,这个没试验,那是以前无意看到的,不知道有没有记错,如果说错了还不要介意,交流下 lanxix 发表于 2012-9-16 21:02 static/image/common/back.gif
你说高电平输出和低电平输出是指MSBFIRST和LSBFIRST 吗?其实这不叫高低电平,应该叫二进制高低位
SPI接 ...
如果就只传输一个字节,那应该是传到最后一块的还是第一块的,如果是最后一块我就需要重新思考了,我是5块连到一起的 萧芸凤 发表于 2012-9-16 21:10 static/image/common/back.gif
如果就只传输一个字节,那应该是传到最后一块的还是第一块的,如果是最后一块我就需要重新思考了,我是5块 ...
应该是最后一块收到