亚博智能论坛  
  
查看: 650|回复: 0

课程17--74HC595实验

[复制链接]
  • TA的每日心情
    慵懒
    2017-7-29 14:25
  • 121

    主题

    161

    帖子

    576

    积分

    超级版主

    Rank: 9Rank: 9Rank: 9

    积分
    576
    发表于 2017-6-2 12:23:28 | 显示全部楼层 |阅读模式
    74HC595实验
    74HC595 简单说来就是具有8 位移位寄存器和一个存储器,以及三态输出功能。 这里我们用它来控制8 LED 小灯。我们为什么要用74HC595来控制小灯呢?一定会有很多朋友会问这个问题,我想问的是我们要是单纯的用Arduino 控制8 个小灯的话要占用多少个I/O 呢?答案是8 个。但是我们的Arduino UNO 有几个I/O 口呢?加上模拟接口也就20 个吧,这8 个小灯占用了太多的资源了,我们用74HC595 的目的就是减少I/O 口的使用数量。用74HC595 以后我们可以用3 个数字I/O 口控制8 LED 小灯岂不美哉。下面是我们要准备的元器件:
    直插LED
    8
    74HC595 直插芯片
    1
    220Ω直插电阻
    8
    面包板
    1
    面包板跳线
    若干
    准备好元件我们就按下面的原理图连接电路
    C}EU~8W2TU{R1GEH2_[EB2P.png
    真值表:
    JIQD[%0K`LPJ9)3`CKN]O2J.png
    管脚图:
    [W3ULZL3LLA}80960O8Q[`K.png
    管脚说明:
    4C~YGORU@]W94()NB])WBV5.png
    时序图:
    SH13]}9M[(_%%]RB@`6]0$O.png
    此电路图看似复杂,我们仔细分析以后再结合参考实物就会发现很简单。按照下图链接好电路后,就可以开始编写程序了。
    X5IJH@[3B97G9PBT~%@)@J4.png
    参考例程:
    //connect 74hc595 pin10:MR--->VCC; Pin13:OE--->GND
    int latchPin = 5;//to 595 pin12
    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);
    /*dataPin:数据输出引脚,数据的每一位将逐次输出。引脚模式需要设置成输出clockPin:时钟输出引脚,为数据输出提供时钟,引脚模式需要设置成输出。
    bitOrder:数据位移顺序选择位,该参数为byte类型,有两种类型可选择,分别是高位先入MSBFIRST和低位先入LSBFIRST。
    val:所要输出的数据值。*/
    digitalWrite(latchPin,HIGH); //将ST_CP 这个针脚恢复到高电平
    delay(1000); //暂停1 秒钟让你看到效果
    }
    }

    函数原型在wiring_shift.c文件中,位于Arduino安装的这个目录下:\Arduino\hardware\arduino\cores\arduino
    void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
    {
    uint8_t i;
    for (i = 0; i < 8; i++) {
    if (bitOrder == LSBFIRST)
    digitalWrite(dataPin, !!(val & (1 << i)));
    else
    digitalWrite(dataPin, !!(val & (1 << (7 - i))));

    digitalWrite(clockPin, HIGH);
    digitalWrite(clockPin, LOW);
    }
    }


    回复

    使用道具 举报

    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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