這里選擇了使用3片PCF8574擴展,可以拓展出24個雙向IO口。
如果有不了解,可參考我前邊的幾篇文章:
正面接線圖:

反面焊點圖:

(注意:PCF8574芯片的A0 A1 A2引腳電平狀態,這里的接法三片PCF8574的地址分別為 0x20 0x21 0x22 ,實際可根據自己的需要進行調整。)
連接好芯片后,用 i2cdetect 工具查看芯片識別狀態
sudo i2cdetect -y 1
如果按我的地址選擇方案,正常情況下會顯示如下:
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: 20 21 22 -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
既然識別了,那接下來就進行IO操作
(這里使用了wiringPi庫,好處自己體會。)
//pcf8574.c
#include <stdio.h> #include <wiringPi.h> #include <pcf8574.h> #define EXTEND_BASE 100 int main (void) { // wiringPi初始化 wiringPiSetup( ); // pcf8574初始化 pcf8574Setup( EXTEND_BASE, 0x20 ); pcf8574Setup( EXTEND_BASE+8, 0x21 ); pcf8574Setup( EXTEND_BASE+16, 0x22 ); int i; //設置為輸出狀態 for ( i = 0 ; i < 24 ; i++ ) { pinMode( EXTEND_BASE + i, OUTPUT ); } //流水燈 for (;;) { for( i = 0 ; i < 24; i++) { digitalWrite ( EXTEND_BASE + i, HIGH); delay (10); digitalWrite ( EXTEND_BASE + i, LOW); delay (10); } } return 0 ; }
