十九 ,ESP32 74HC595 的使用

释放双眼,带上耳机,听听看~!

一,介绍

74HC595 是一款价格便宜的八位移位锁存器,通过三个引脚(DS、STCP、SHCP),就可以控制几乎无限量地输出。

DS是串行输入端口,每当时钟输入(SHCP)上升沿来临时,DS引脚当前电平值在移位寄存器中会移一位,连续进行8次同样的动作,就可以完成全部(Q0至Q7)移位。最后当STCP(Latch)上升沿到来时,移位寄存器的值将会被锁定在存储器里,并从Q0至Q7引脚输出。ESP32 的数字输出引脚时有限的,如果需要更多的输出的话,期中的一种方法就是通过74HC 595扩展更多的输出引脚。已达到目的。以下就通过两个列子来介绍这一个芯片的使用方法。

十九 ,ESP32 74HC595 的使用
图1

二,硬件

  • ESP32开发板
  • 2个74HC595
  • 一块面包板

三,电路图

这是ESP32 驱动一个74HC595的电路图,引脚连接[GPIO15->DS(14)] [GPIO4->SHCP(12)] [GPIO4->STCP(11)] [GND->MR(10)] [VCC->OE(13)] 。

十九 ,ESP32 74HC595 的使用
图2

四,代码设计

Arduino IDE包含了一个shiftout()功能,可以很方便的控制74HC595移位寄存器,对于ESP32 同样适用的。我们为了实现流水灯的效果。首先我们需要定义一个数组来存放数据,这些数据可以是16进制 、二进制、十进制。

unsigned char sequence[COL_COUNT] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};

然后,再使用一个for循环中的shiftout()函数把数据送到锁存器中。

for (int col = 0; col < COL_COUNT; col++)   
  {
   digitalWrite(latchPin, LOW); 
   shiftOut(dataPin, clockPin, MSBFIRST, sequence[col]); 
   datadigitalWrite(latchPin, HIGH);
   delay(200);
 }

以下是完整的代码:

/*******************************************************   
             ESP32 驱动一块74HC595
   功能:使用ESP32驱动74HC595 来实现流水灯的功能
   引脚: [GPIO15->DS(14)]  [GPIO4->SHCP(12)] [GPIO2->STCP(11)] [GND->MR(10)] [VCC->OE(13)] 
   Designer: Code_Mouse
   Date:2018-9-20
 *******************************************************/

const byte COL_COUNT = 8;
const byte ROW_COUNT = 3;
 
//存储数据的数组
unsigned char sequence[8] = {
B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000,
};
 

int latchPin = 2;  //Pin connected to ST_CP(pin 12) of 74HC595
int clockPin = 4; //Pin connected to SH_CP(pin 11) of 74HC595
int dataPin = 14;  //Pin connected to DS(pin 14) of 74HC595
 
void setup() {    
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
 
void loop() 
{ 
  for (int row = 0; row < ROW_COUNT; row++) 
  {
      
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, sequence[row]);
      digitalWrite(latchPin, HIGH);
      delay(200);

  }
}

五,ESP32 驱动两块74HC595

通过74HC595移位寄存器的级联输出端(Daisy chain),同样使用3个数据引脚来连接多个的74HC595以取得更多的输出。由于一块74HC595 可以一个字节,所以两块就可以支持2个字节。当然三块的话就是3个字节了。硬件连接方面也是很简单的,就是在上面的基础上修改就可以了

  • 74HC595(1) Q7S(9) -> 74HC595(2) DS(14)
  • 74HC595(1) STCP(12) -> 74HC595(2) STCP(12)
  • 74HC595(1) SHCP(11) -> 74HC595(2) SHCP(11) 

 

六,电路图2

十九 ,ESP32 74HC595 的使用
图3

七,代码设计

由于shiftOut()只能支持8位移,如欲取得16位移(两颗74HC595移位寄存器)的输出,那就必须分两次shiftOut()运行。

以下是完整的代码 :

/*******************************************************   
             ESP32 驱动两块74HC595
   功能:使用ESP32驱动两块74HC595 来实现流水灯的功能
   引脚: [GPIO15->DS(14)]  [GPIO4->SHCP(12)] [GPIO2->STCP(11)] [GND->MR(10)] [VCC->OE(13)] 
   Designer: Code_Mouse
   Date:2018-9-20
 *******************************************************/

const byte COL_COUNT = 8;
unsigned int sequence[COL_COUNT] = {0B0000000100000001, 0B0000001000000011, 0B0000010000000111, 0B0000100000001111, 0B0001000000011111, 0B10000000111111, 0B0100000001111111, 0B1000000011111111};

int latchPin = 2;  //Pin connected to ST_CP(pin 12) of 74HC595
int clockPin = 4; //Pin connected to SH_CP(pin 11) of 74HC595
int dataPin = 15;  //Pin connected to DS(pin 14) of 74HC595
 
void setup() {    
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
 
void loop() 
{ 
  for (int col = 0; col < COL_COUNT; col++)   
  {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, (sequence[col] >> 8));
    shiftOut(dataPin, clockPin, MSBFIRST,sequence[col]);  
    digitalWrite(latchPin, HIGH);
    delay(200);
  }
}

 

给TA打赏
共{{data.count}}人
人已打赏
ESP32ESP32-基础

十八,ESP32 PIR运动传感器的使用

2018-9-18 12:59:44

ESP32ESP32-基础

二十,ESP32 SPIFFS:写一个文件

2018-9-22 15:13:45

4 条回复 A文章作者 M管理员
  1. wisher

    厉害

  2. 未名游客给您打赏了¥2
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();