弘毅 发表于 2014-4-25 16:20:00

OCROBOT入门教程023--shiftOut()介绍

本帖最后由 董董soul 于 2016-10-27 11:15 编辑

这节课我们介绍一下怎样使用shiftOut()函数来使用一颗74HC595驱动8颗LED。

74HC595是一种8位移位锁存器。锁存器就是把单片机的输出的数先存起来,可以让单片机继续做其它事。他的用处很多,现在我们户外使用的单色LED屏幕就大量使用。

看一下硬件连接图


shiftOut()
描述
将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
注意:如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。
注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。

语法
shiftOut(dataPin, clockPin, bitOrder, value)
参数
dataPin:输出每一位数据的引脚(int)
clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)
bitOrder:输出位的顺序,最高位优先或最低位优先
value: 要移位输出的数据(byte)
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(500); //暂停500ms让你看到效果
}
}

看一下具体效果
http://player.youku.com/player.php/sid/XNzE4ODI1Nzk2/v.swf

С罗 发表于 2015-12-5 20:07:08

:dizzy:按图上连led的负极两块之间都没连起来,我说怎么没反应。

弘毅 发表于 2015-12-9 20:59:21

С罗 发表于 2015-12-5 20:07 static/image/common/back.gif
按图上连led的负极两块之间都没连起来,我说怎么没反应。

汗。。。果真是。。。。示意图有bug,我去修正下。

弘毅 发表于 2015-12-9 20:59:23

С罗 发表于 2015-12-5 20:07 static/image/common/back.gif
按图上连led的负极两块之间都没连起来,我说怎么没反应。

汗。。。果真是。。。。示意图有bug,我去修正下。
页: [1]
查看完整版本: OCROBOT入门教程023--shiftOut()介绍