PCF8574T是基于I2C接口的I/O扩展模块,使用2个两条双向总线I/O可扩展8个I/O。支持级联,多可同时使用8个模块,扩张到64个I/O。PCF8574是CMOS电路。该器件包含一个8位准双向口和一个I2CC总线接口,PCF8574电流消耗很低,且输出锁存具有大电流驱动能力,可直接驱动LED.它还带有一条中断接线(INT)可与MCU的中断逻辑相连。通过INT发送中断信号,远端IO口不必经过I2C总线通信就可通知MCU是否有数据从端口输入。
模块:

通过拨码开关设置模块地址,拨码开关的设置与地址的对应关系如下:

使用ESP8266在Arduino下测试,代码如下:
#include "Wire.h"
#define ADDR 0x20
void setup() {
Serial.begin(115200);
Wire.begin();
}
uint8_t i=0;
void loop() {
if (i==0) {
Serial.printf("Write data=255 \n" );
Wire.beginTransmission(ADDR);
Wire.write(0xff);
Wire.endTransmission();
Serial.printf("Read data:%x \n" , Read_PCF8574()); //Read IO
i=1;
delay(2000);
} else {
Serial.printf("Write data=0 \n" );
Wire.beginTransmission(ADDR);
Wire.write(0x00);
Wire.endTransmission();
Serial.printf("Read data:%x \n" , Read_PCF8574()); //Read IO
i=0;
delay(2000);
}
}
uint8_t Read_PCF8574(void) {
uint8_t data = 0;
Wire.requestFrom(ADDR, 1);
while (Wire.available()) {
data = Wire.read();
}
return data;
}每隔2秒钟,让P0~P7口输出翻转。将3位拨码开关全部拨到’OFF’上。此时模块地址为0x20
测试结果:


测试中是同时完成了读写处理的。测试中发现,还有一个INT引出脚,在使用LED中,没有发现有闪烁,不知道是怎么操作能让这个引脚产生信号变化,需要后面查找PCF8574T的数据手册了。
我要赚赏金
