☛ 功能說明
利用 Arduino UNO 開發板及 74HC138 晶片控制 8 個 LED 由左至右依次亮燈,呈現出 LED 亮燈是由左至右移動的效果。
【74HC138 晶片介紹】
74HC138 是一款高速 CMOS 器件,74HC138 引腳相容低功耗肖特基 TTL ( LSTTL )系列。
74HC138 譯碼器可接受 3 位二進位加權地址輸入 ( A0, A1 和 A2 ),並當使能時,提供 8 個互斥的低有效輸出 ( Y0 至 Y7 )。 74HC138 特有 3 個使能輸入端:兩個低有效 ( E1 和 E2 ) 和一個高有效 ( E3 )。 除非 E1 和 E2 置低且 E3 置高,否則 74HC138 將保持所有輸出為高。 利用這種複合使能特性,僅需 4 片 74HC138 晶片和 1 個反相器,即可輕鬆實現並行擴展,組合成為一個 1-32 ( 5 線到 32 線 ) 譯碼器。 任選一個低有效使能輸入端作為數據輸入,而把其餘的使能輸入端作為選通端,則 74HC138 亦可充當一個 8 輸出多路分配器,未使用的使能輸入端必須保持綁定在各自合適的高有效或低有效狀態。
74HC138 的引腳及功能如下所示:
⑴ 輸入端 A0、A1、A2:這三個引腳是用來輸入譯碼信號的,共有 8 種輸入組合方式,可以產生 8 個不同的輸出。
⑵ 輸出端 Y0 ~ Y7:共 8 個輸出埠,對應著 A0 ~ A7 八位二進位編碼。
⑶ OE ( 輸出使能 ) 埠:該埠為低電平有效,當 OE 埠為高電平時,輸出埠處於高阻態。
74HC138 晶片是一種通用的數位邏輯譯碼器,其主要作用是將輸入的多位二進位編碼轉換成獨立的輸出信號。 舉例來說,如果將三位二進位編碼輸入到 74hc138 晶片中,晶片會自動判斷當前輸入的編碼,並將其轉換為相應的輸出信號。 因此,74HC138 晶片可以用來實現多種不同的數字邏輯功能,如地址譯碼、數據選擇等。
同時,由於 74HC138 晶片的輸出埠具有高電平或低電平兩種狀態,因此它還可以用來控制開關、驅動 LED 燈等。 舉例來說,在 LED 顯示幕中,通過將 74HC138 晶片與多個 LED 燈串聯,就可以使用極少的引腳來控制大量的 LED 燈,從而降低了系統的複雜度和成本。
總之,74HC138 晶片在數位邏輯電路中具有非常重要的作用。 它的輸入輸出介面簡單明瞭,易於集成,並且能夠滿足各種不同的應用場景,因此被廣泛地應用在各種數位電路中。
☛ 使用材料
Arduino UNO R3 開發板 × 1、74HC138 IC × 1、LED × 8、電阻 220Ω × 8。
☛ 電路圖及麵包板接線圖
☛ 程式碼
int segCount = 3; int segPins[]={2,3,4}; //將數位接腳 2、3、4 依序接到 74HC138 晶片的 //A0、A1、A2 void setup() { for(int thisSeg=0;thisSeg<segCount;thisSeg++) //循環設置,把對應的埠設置成輸出 pinMode(segPins[thisSeg],OUTPUT); } void loop() { for(int i=0;i<8;i++) //循環輸出 0-7,在 74HC138 晶片的輸出端是 Y0-Y7 { //依次為 0,任何時候只有 1 個接腳為低電平 deal(i); //數據處理 delay(200); //延遲 200ms } } void deal(unsigned char value) //把需要處理的 byte 數據寫入對應的引腳埠 { for(int i=0;i<3;i++) digitalWrite(segPins[i],bitRead(value,i)); }
☛ 練習
㈠ 設計 Arduino 程式,使 LED 由右至左依序移動亮燈。
int segCount = 3; int segPins[]={2,3,4}; //將數位接腳 2、3、4 依序接到 74HC138 晶片的 A0、A1、A2 //A0、A1、A2 void setup() { for(int thisSeg=0;thisSeg<segCount;thisSeg++) //循環設置,把對應的埠設置成輸出 pinMode(segPins[thisSeg],OUTPUT); } void loop() { for(int i=7;i>0;i--) //循環輸出 7-0,在 74HC138 晶片的輸出端是 Y0-Y7 { //依次為 0,任何時候只有 1 個接腳為低電平 deal(i); //數據處理 delay(200); //延遲 200ms } } void deal(unsigned char value) //把需要處理的 byte 數據寫入對應的引腳埠 { for(int i=0;i<3;i++) digitalWrite(segPins[i],bitRead(value,i)); }
㈡ 設計 Arduino 程式,使 LED 由左至右依序移動亮燈,當到最右邊時,再由右至左依序移動亮燈,形成 LED 左右移動亮燈的效果。
int segCount = 3; int segPins[]={2,3,4}; //將數位接腳 2、3、4 依序接到 74HC138 晶片的 //A0、A1、A2 void setup() { for(int thisSeg=0;thisSeg<segCount;thisSeg++) //循環設置,把對應的埠設置成輸出 pinMode(segPins[thisSeg],OUTPUT); } void loop() { for(int i=0;i<8;i++) //循環輸出 0-7,在 74HC138 晶片的輸出端是 Y0-Y7 { //依次為 0,任何時候只有 1 個接腳為低電平 deal(i); //數據處理 delay(200); //延遲 200ms } for(int 1=7;i>0;i--) //循環輸出 7-0,在 74HC138 晶片的輸出端是 Y0-Y7 { //依次為 0,任何時候只有 1 個接腳為低電平 deal(i); //數據處理 delay(200); //延遲 200ms } } void deal(unsigned char value) //把需要處理的 byte 數據寫入對應的引腳埠 { for(int i=0;i<3;i++) digitalWrite(segPins[i],bitRead(value,i)); }