74hc595模块参考

74hc595模块参考

8位串行并行输出(SIPO)移位寄存器

使用74HC595移位寄存器扩展微控制器上的输出引脚数量。如果你需要扩充输入引脚的数量那么你需要74HC165移位寄存器。

SER(DS)pin14引脚用于一次一位地将数据发送到移位寄存器。

SRCLK(SHCP)pin11是移位寄存器的时钟,并且是上升沿触发的。这意味着这些位是在时钟的上升沿压入的。

RCLK(STCP)pin12是一个非常重要的引脚。当该引脚拉高时,移位寄存器的内容被复制到存储/锁存寄存器中,最终出现在输出处。因此,锁存引脚可以被视为我们在输出端看到结果之前的最后一步。

SRCLR(MR)pin10引脚允许我们重置整个移位寄存器,将所有位设置为零。因为这是一个低电平有效引脚,所以我们必须将 SRCLR 引脚拉低以执行复位。

OE(OE)pin13也是一个低电平有效引脚:拉高电平时,输出引脚被禁用(设置为高阻抗状态)。当它被拉低时,输出引脚正常工作。

QA–QH(输出启用)是输出引脚。

引脚名称

Pin描述
DS串行输入
SHCP串行时钟
STCP锁存引脚
OE输出使能,低有效。如果不使用,请连接到GND。
Q0…Q7并行输出
Q7S级联脚位,串行输出(连接多个595芯片的下一个)
MR复位(清除),低有效。如果不使用,请连接到VCC
GND接地
VCC接电源

* 使用Q7S将多个74HC595单元连接在一起。将Q7S连接到链中的下一个74HC595芯片的DS引脚。

在Arduino中使用

  • GND(引脚 8)接地,

  • Vcc(引脚 16)至 5V

  • OE(引脚 13)接地(永久启用输出)

  • MR(引脚 10)至 5V(接入高电平)

您需要将至少3个引脚连接到微控制器:DS、SHCP和STCP。

OE引脚可用于禁用移位寄存器的输出。如果您需要该功能,请将其连接到您的微控制器。否则,将其连接到地以永久启用输出。

移位寄存器的输出引脚Q0到Q7,通常连接到LED或7段数码显示器。

常常与74hc595编程有关的函数shiftOut说明:

shiftOut函数可以一次一位地移出一个字节的数据。从最高(即最左边)或最低(最右边)有效位开始。每个位依次写入数据引脚,然后时钟引脚发出脉冲(先变高,然后变低)以指示该位可用。

注意 - 如果您与由上升沿计时的设备连接,则需要确保时钟引脚在调用 之前处于低电平shiftOut(),例如调用digitalWrite(clockPin, LOW)

句法

shiftOut(dataPin, clockPin, bitOrder, value)

参数

dataPin:输出引脚连接到hc595芯片的DS管脚。允许的数据类型:int.
clockPin:连接hc595芯片的SHCP管脚。允许的数据类型:int.
bitOrder:移出位的顺序;MSBFIRST 或LSBFIRST。(最高有效位在前,或最低有效位在前)。
value:要移出的数据。允许的数据类型:byte.

实例1

以下代码示例假设您将DS连接到Arduino引脚2,SHCP连接到Arduino引脚3,并且STCP到Arduino的4号引脚。它输出一个8位的数,该数每秒翻转两次:

const int dataPin = 2;   /* DS */
const int clockPin = 3;  /* SHCP */
const int latchPin = 4;  /* STCP */

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
}

int pattern = 0b10101010;
void loop() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, pattern);
  digitalWrite(latchPin, HIGH);
  delay(500);
  pattern = ~pattern; // Invert the pattern
}

实例2:

以下代码可以实现流水灯效果。更改delay数值可以修改流水灯变化速度。不能小于20,否则由于视觉暂留现象造成全部灯都亮的情况。

int latchPin=4; //ST CP of 74HC595

int clockPin=3;//SH CP of 74HC595

int dataPin=2; //DS of 74HC595

char LED_pin=0x00;

void setup() {

      pinMode(latchPin, OUTPUT);

      pinMode(clockPin, OUTPUT);

      pinMode(dataPin, OUTPUT);

}

void loop()

{

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

   {

      LED_pin=(0x01<<i);

      //将8位的二进制数00000001按位左移,

      //第一次移动一位移动后低位用0补足,变成00000010.

      //第二次依然是将8位二进制数0x01按位左移,这次移动2位,变成00000100.

      //应用到shiftOut中时可以点亮第三盏led灯。  

      digitalWrite(latchPin,LOW); //低电位表示启动

      shiftOut(dataPin,clockPin,LSBFIRST,LED_pin);

//移出位的顺序;MSBFIRST 或LSBFIRST。(最高有效位在前,或最低有效位在前)。

      digitalWrite(latchPin,HIGH); //高电位表示停止

      delay(100);

   }

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

   {

      LED_pin=(0x01<<i);

      digitalWrite(latchPin,LOW); //低电位表示启动

      shiftOut(dataPin,clockPin,MSBFIRST,LED_pin);

      digitalWrite(latchPin,HIGH); //高电位表示停止

      delay(100);

   }

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值