一、HC165介紹
HC165是一款串列口輸入的移位寄存器,其內部結構由8位移位寄存器和8位並聯輸出組成,可以簡單地將串列信號轉換為並行信號。
它有一個時鐘輸入引腳CLK、一個並行數據輸入引腳PL、兩個串列數據輸入引腳DS和SH/LD以及8個並行輸出引腳Q7~Q0。當SH/LD引腳為高電平時,PL引腳數據被使能,數據存儲在存儲單元中,可以從Q0~Q7引腳讀出。當SH/LD引腳為低電平時,串列數據通過DS輸入,通過時鐘CLK的控制移位到移位寄存器中。當移位寄存器全部被移入串列數據時,其輸出數據在Q0~Q7中並行輸出。
二、HC165使用場景
HC165常用於按鍵掃描電路中。將按鍵串列按下和鬆開信號輸入到HC165中,HC165的8個並行輸出分別對應8個按鍵。在單片機中讀取HC165的並行輸出,即可判斷用戶按下哪個按鍵。
HC165還廣泛應用於各種控制電路和數字顯示系統中,可以將另一個串列輸入設備(如74HC164等)的輸出級聯到HC165的輸入,實現更高位數的數據收集。
三、HC165實現代碼
以下是一個使用HC165來讀取8個按鍵狀態的代碼示例:
#define HAL_GPIO_READ(pin) (HAL_GPIO_ReadPin(pin##_GPIO_Port, pin##_Pin) == GPIO_PIN_SET ? 1 : 0) ... #define DS_Pin GPIO_PIN_3 #define DS_GPIO_Port GPIOA #define SH_LD_Pin GPIO_PIN_2 #define SH_LD_GPIO_Port GPIOA #define CLK_Pin GPIO_PIN_1 #define CLK_GPIO_Port GPIOA ... uint8_t HC165_Read(void) { uint8_t i; uint8_t data = 0; HAL_GPIO_WritePin(SH_LD_GPIO_Port, SH_LD_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(SH_LD_GPIO_Port, SH_LD_Pin, GPIO_PIN_RESET); for(i = 0; i < 8; i++) { data = (data << 1) | HAL_GPIO_READ(DS); HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_RESET); } return data; }
四、HC165的優缺點
HC165的優點在於輸入輸出埠簡單,只需4條信號(CLK、DS、PL、SH/LD),就能完成8個單元的數據採集、混合、移位、存儲和並行輸出。此外,HC165具有串列級聯功能,可以方便地構成更高位數的移位寄存器。其缺點在於時序非常重要,需要特別控制CLK和SH/LD的信號順序和時序,否則會導致數據出錯或異常情況。
五、HC165應用展望
隨著物聯網、智能家居等領域的發展,HC165的應用領域也將越來越廣泛。例如,可以應用在家庭智能化控制設備中,如安全防盜、燈光控制、智能門禁等等。更廣泛地,它可以應用在各種數字系統中,如計算機外設、通信設備、工業自動化控制等。
原創文章,作者:FOFBI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372201.html