zoukankan      html  css  js  c++  java
  • 用Tinkercad学arduino之 74HC595寄存器控制8个led跑马灯

    项目地址:https://www.tinkercad.com/things/5nsSWyQOAkI-chenillard

    // Arduino Pattern Creator by PhilCam
    //    http://my.free.time.free.fr/
    // Use with Uno R3 + 74HC595 + 8 leds
    
    int dataPin = 2;
    int latchPin = 3;
    int clockPin = 4;
    int seq[] = {128, 192, 224, 240, 248, 252, 254, 255, 127, 63, 31, 15, 7, 3, 1, 0, 1, 3, 7, 15, 31, 63, 127, 255, 254, 252, 248, 240, 224, 192, 128, 0};
    
    void setup()
    {
      pinMode(dataPin, OUTPUT);
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
    }
    
    void loop()
    {
      for (int n = 0; n < 32; n++)
      {
        digitalWrite(latchPin, LOW);  //Pull latch LOW to start sending data
        shiftOut(dataPin, clockPin, MSBFIRST, seq[n]);  //Send the data
        digitalWrite(latchPin, HIGH);  //Pull latch HIGH to stop sending data
        delay(100);
      }
    }

    如果需要做8个LED灯或者16个LED灯的跑马灯效果时,数字引脚(Digital Pin)明显会不够用;这时我们可以使用寄存器来实现数字引脚的扩充,这里使用了74HC595这个型号的位移缓存器进行实验。

    先看下74HC595的引脚说明,共16个引脚,8个输出引脚对应可以控制8个LED,详情参考下图:

    • Q0 - Q7(第15脚,第1-7脚):8位并行数据输出
    • GND(第8引脚):地
    • Q7’(第9引脚):串行数据输出
    • MR(第10引脚):主复位(低电平)
    • SHCP(第11引脚):数据输入时钟线
    • STCP(第12引脚):输出存储器锁存时钟线
    • OE(第13引脚):输出有效(低电平)
    • DS(第14引脚):串行数据输入
    • VCC(第16引脚):电源

    74HC595寄存器可以简单的理解为是一组8个的开关组,如上图(8个开关控制LED),这组开关的开关用0和1来控制,0为关,1为开。要让这组灯从左到右像跑马灯那样逐个亮,可以简单列出来这组开关:

    • 1 0 0 0 0 0 0 0 第一个亮,其他关
    • 0 1 0 0 0 0 0 0 第二个亮,其他关
    • 0 0 1 0 0 0 0 0 第三个亮,其他关
    • 0 0 0 1 0 0 0 0 第四个亮,其他关
    • 0 0 0 0 1 0 0 0 第五个亮,其他关
    • 0 0 0 0 0 1 0 0 第六个亮,其他关
    • 0 0 0 0 0 0 1 0 第七个亮,其他关
    • 0 0 0 0 0 0 0 1 第八个亮,其他关

    按顺序循环上面这组开关就是一个跑马灯。要让寄存器出现这样的开关组,只需要把这组开关转换成十进制(这八组开关对应的十进制数字为: 128, 64, 32, 16, 8, 4, 2, 1 ),然后往寄存器写即可;

    TIPS:

    • 一个74HC595寄存器最大只能处理256(2^8)以内的数字,需要处理更大的数字(更多灯)则加多一个/多个寄存器即可
    • 数字引脚可以输入输出,扩展输入引脚需要的寄存器跟扩张输出引脚的寄存器是不同的
    • 加多一个74HC595寄存器接线:
      • 新加寄存器的DS接上一个寄存器的Q7’
      • 新加寄存器的SHCP接上一个寄存器的SHCP
      • 新加寄存器的STCP接上一个寄存器的STCP

    引用一个图,可以直观对寄存器的理解。

  • 相关阅读:
    【理论基础】ContentProvider的简要概述
    【实用篇】获取Android通讯录中联系人信息
    【转】Android应用底部导航栏(选项卡)实例
    【引用】Android程序实现完全退出
    【实用篇】Android之应用程序实现自动更新功能
    【基础篇】DatePickerDialog日期控件的基本使用(二) ——分别获取年、月、日、时、分
    练习1-13 打印水平或垂直直方图
    练习1-10
    练习1-9
    360前端面试题
  • 原文地址:https://www.cnblogs.com/meetrice/p/14081962.html
Copyright © 2011-2022 走看看