文章目录
- 一、74HC165
- 二、74HC165使用
-
- [ 1、引脚](# 1、引脚)
- [ 2、工作流程](# 2、工作流程)
- [ 3、原理图](# 3、原理图)
- 三、实例代码
一、74HC165
74HC165 是 8 位并行输入串行输出移位寄存器,它是一款高速 CMOS 器件,遵循 JEDEC 标准。
74HC165 是一款8 位并行输入 - 串行输出的移位寄存器,常用于扩展 51 单片机的输入端口(解决 51 单片机 I/O 口不足的问题)。
二、74HC165使用
1、引脚


2、工作流程

并行装载:拉低 SH/LD,将 D0~D7 上的电平锁存到寄存器内部。
串行移位:拉高 SH/LD,每来一个 CLK 上升沿,寄存器内的数据右移一位,从 Q7 依次输出(先输出最高位,后输出最低位)。
级联扩展:多片 74HC165 级联时,前一片的 Q7 接后一片的 CLK,可扩展为 16/24 等位输入。
3、原理图

三、实例代码
循环读取8路输入。
c
#include <reg52.h>
// 定义 74HC165 控制引脚
sbit SH_LD = P1^0; // 移位/装载控制
sbit CLK = P1^1; // 移位时钟
sbit DATA_IN = P1^2;// 串行数据输入
/**
* @brief 读取 74HC165 的 8 位并行数据
* @retval 读取到的 8 位数据(unsigned char 类型)
*/
unsigned char HC165_ReadData(void)
{
unsigned char i, dat = 0;
// 1. 并行装载数据
SH_LD = 0; // 拉低,锁存 D0~D7 数据
CLK = 0; // 时钟初始化为低
SH_LD = 1; // 拉高,进入移位模式
// 2. 串行移位读取 8 位数据(高位优先)
for(i = 0; i < 8; i++)
{
dat <<= 1; // 左移一位,准备接收下一位
if(DATA_IN == 1)
{
dat |= 0x01; // 读取当前位为 1
}
// 产生时钟上升沿,触发移位
CLK = 1;
CLK = 0;
}
return dat;
}
void main(void)
{
unsigned char input_data;
while(1)
{
input_data = HC165_ReadData(); // 循环读取 8 路输入
// 后续可根据 input_data 处理逻辑(如判断按键、传感器状态)
}
}