C51_74HC165并口转串口

文章目录

一、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 处理逻辑(如判断按键、传感器状态)
	    }
	}
相关推荐
三易串口屏40 分钟前
三易串口屏开发教程:如何使用键盘控件输入参数并发送给单片机
单片机·嵌入式硬件·串口屏·三易串口屏·键盘控件
2CM_Embed2 小时前
F28379D 下载后 VOFA+ 无数据、Reset 后恢复:一次 TZ 中断误触发排查记录
笔记·单片机·sci·c2000·f28379d·vofa·tz
国科安芯2 小时前
空间机电一体化:AS32S601型抗辐射MCU在卫星推进与执行机构控制中的关键技术研究
单片机·嵌入式硬件·物联网·机器人·云计算
国科安芯2 小时前
AS32S601型抗辐射MCU在分布式太空算力架构中的技术演进与应用前景
人工智能·分布式·单片机·嵌入式硬件·架构·边缘计算
纯音乐sjc2 小时前
ARM Linux 嵌入式中断全流程解析:从 GPIO 到 GIC 架构实战
单片机·嵌入式硬件
雯宝2 小时前
|____1.4外部中断/看门狗/定时器/PWM/RTC/待机唤醒/ADC/DAC/IIC/SPI/485/CAN
单片机
sramdram17 小时前
基于32位微控制器的FOC汽车水泵方案
单片机·嵌入式硬件·汽车·微控制器·32位微控制器
开发笔记-阿牛20 小时前
解析一款有意思的产品||CK6159A语音芯片设计的儿童专注力训练机-舒尔特玩具
stm32·单片机·嵌入式硬件·音频
残影飞雪21 小时前
ESP32-C5下载烧录固件失败报错的原因
单片机·嵌入式硬件
搞全栈小苏1 天前
SIMetrix_simplis8.4安装教程——附安装包
stm32·单片机·嵌入式硬件·电力电子