快捷搜索:  汽车  科技

芯片引脚预热时间:Note-01.arduino和74hc595的使用

芯片引脚预热时间:Note-01.arduino和74hc595的使用SER连接到Arduino的5VGND连接到Arduino的GNDVCC

当我们在搭建Arduino项目时,时常因为需要接入按钮、传感器、舵机、LED等而遇到I/O口不足的问题,此时就需要使用到74HC595。

74HC595是一个8位串行输入、并行输出(SIPO Serial-In-Parallel-Out)的移位寄存器。其具有8个输出引脚,而只需要3个输入引脚。并可以串接多个IC实现更多输出引脚需求。

引脚图

芯片引脚预热时间:Note-01.arduino和74hc595的使用(1)

74HC595引脚图

GND

连接到Arduino的GND

VCC

连接到Arduino的5V

SER

串行输入,用于向移位寄存器存入数据,一次一位(bit)

SRCLK

移位寄存器时钟,74HC595由上升沿驱动,当向移位寄存器写入数据时,SRCLK必须为高电平。

RCLK(latch)

锁存器时钟,高电平时,移位寄存器的内容拷贝到锁存寄存器,同时表现为输出。Latch相当于一个阀门。

SRCLR

低电平有效。可以一次性将移位寄存器所有位置为0。通常情况此引脚连接高电平。

OE

低电平有效。高电平时输出引脚禁用或为高阻态。低电平时输出引脚正常工作。

QA-QH

输出引脚,可以连接LED或者7段数码管

QH‘

可用于串接74HC595。当此引脚连接到SER引脚,并同时给2个IC同样的时钟,则可认为是一个具有16个输出的IC。在保证电源供应的情况下,可以串接多个IC。

工作原理

74HC595具有2个寄存器(可理解为2个存储容器),每个可以存储8位(bit)数据。

  • 一个叫做移位寄存器,用于接收输入数据。
    • 当74HC595接收到时钟脉冲时:
      • 移位寄存器中的位置向左移动一位。
      • 移位寄存器的Bit0(右边第一位)接收当前DATA引脚的数据,如果脉冲上升沿时data引脚为高电平则为1并写入移位寄存器,反之则为0。
  • 当使能(高电平)RCLK(latch)引脚时,移位寄存器中的数据会拷贝到第二个寄存器,存储(锁存)寄存器。其每个位(bit)均对应连接到QA-QH输出引脚,因此当存储(锁存)寄存器中内容发生变化时,相应的表现在输出引脚上。

芯片引脚预热时间:Note-01.arduino和74hc595的使用(2)

移位寄存器和锁存寄存器原理图

实验1:使用Arduino和74HC595控制LED

实验材料

  • 5mm LED *8
  • 220欧电阻 *8
  • 74HC595芯片 *1
  • 面包板 *1
  • Arduino Uno R3 *1
  • 杜邦线 若干

面包板视图

芯片引脚预热时间:Note-01.arduino和74hc595的使用(3)

Arduino代码

int latchPin = 5; //RCLK

int clockPin = 6; // SRCLK

int dataPin = 4; // SER

byte leds = 0;

void setup() {

// put your setup code here to run once:

pinMode(latchPin OUTPUT);

pinMode(clockPin OUTPUT);

pinMode(dataPin OUTPUT);

}

void loop() {

// put your main code here to run repeatedly:

leds = 0; // all leds off

updateShiftReg();

delay(500);

for(int i=0; i<8; i ){

bitSet(leds i);

updateShiftReg();

delay(500);

}

}

void updateShiftReg(){

digitalWrite(latchPin LOW);

shiftOut(dataPin clockPin LSBFIRST leds);

digitalWrite(latchPin HIGH);

}

代码解析

byte leds = 0;

byte数据类型为8位(bit),刚好能对应8个输出以及8个led。

bitSet(leds i);

bitSet(x n):设置变量的某一位(位置为1)。

  • X:要设置位的变量
  • n:要设置变量的哪一位,从最右边0开始为最低有效位。

updateShiftReg();

updateShiftReg()函数首先将latch锁存引脚置为低电平,然后调用shiftOut()移位函数,然后再将latch锁存引脚置为高电平实现输出。

shiftOut(dataPin clockPin LSBFIRST leds);

shiftOut(dataPin clockPin bitOrder value)函数可以实现每次调用时对寄存器进行移位操作。

  • 参数1和2位数据和时钟。
  • 参数3指定从数据的那一端开始,如果从最右边的位开始向左移,则称为“Least Significant Bit First”(LSBFIRST)。反之则从左边的位开始向右移,则称为Most Significant Bit First”(MSBFIRST)。
  • 参数4为实际需要进入移位寄存器的数据。允许的数据类型:byte。

实验二:使用PWM控制LED的亮度

原理:

通过控制IC的OE引脚来控制LED的亮度。OE(Output Enable)引脚位低电平有效,高电平时位禁止输出,低电平时为正常输出。当通过analogWrite() 函数使用PWM控制,则可以实现LED的亮度调节。

实际再PWM的高电平时,OE引脚会短暂的金庸IC输出,但此过程高于人眼所能感知的频率,因此能实现亮度明暗的变化。

面包板视图

芯片引脚预热时间:Note-01.arduino和74hc595的使用(4)

Arduino代码

int latchPin = 5; //RCLK

int clockPin = 6; // SRCLK

int dataPin = 4; // SER

int oePin = 3; // OE Ctrl PWM

byte leds = 0;

void setup() {

// put your setup code here to run once:

pinMode(latchPin OUTPUT);

pinMode(clockPin OUTPUT);

pinMode(dataPin OUTPUT);

pinMode(oePin OUTPUT);

}

void loop() {

// put your main code here to run repeatedly:

setBright(255);

leds = 0; // all leds off

updateShiftReg();

delay(500);

for(int i=0; i<8; i ){

bitSet(leds i);

updateShiftReg();

delay(500);

}

for(byte br=255; br>0; br--){

setBright(br);

delay(50);

}

}

void updateShiftReg(){

digitalWrite(latchPin LOW);

shiftOut(dataPin clockPin LSBFIRST leds);

digitalWrite(latchPin HIGH);

}

void setBright(byte br){

analogWrite(oePin 255-br);

}

实践:注意确认引脚连接无误后再接通电源

芯片引脚预热时间:Note-01.arduino和74hc595的使用(5)

视频:文章修改时无法添加视频

猜您喜欢: