HC165移位寄存器

一、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/n/372201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
FOFBIFOFBI
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

发表回复

登录后才能评论