74HC165编程篇(二)

前面已介绍过74HC165的工作原理,接下来编写用51单片机来驱动这个片子的代码并用Proteus做了仿真,这次就不使用stm32来驱动了,因为仿真软件里没有ST的单片机。

写74HC165的驱动也不难,只需根据芯片手册中的时序来编写代码,51单片机的代码已贴出,代码的注释也描述很清楚了。

#ifndef _74HC165_H
#define _74HC165_H

#include "allhead.h"

sbit HC165_PL = P2^5; //PL 并行数据输入使能,低电平有效
sbit HC165_CLK = P2^7;//CP 时钟,上升沿触发
sbit HC165_OUT = P2^4; //Q7 串行数据输出
sbit HC165_CE = P2^6;//CE 时钟使能,低电平有效

void _74hc165_init(void);
uchar _74hc165_read_byte(void);

#endif
#include "74hc165.h"

//初始化74hc165
void _74hc165_init(void)
{
	HC165_CE = 0; //初始化使能时钟,后面就不需再使能
	HC165_PL = 1; //PL拉高,不读取按键状态
	HC165_CLK = 1; //时钟拉高,便于产生上升沿
}

//74hc165读取按键状态,并行输入转串行输出
uchar _74hc165_read_byte(void)
{
	uchar i;
	uchar temp = 0;
	
	HC165_PL = 0; //PL拉低,读取按键状态
	HC165_PL = 1; //PL拉高,停止按键读取
	
	if(HC165_OUT == 1)//等于1即并行输入D7引脚的按键被按下
		temp |= 0x01;   //最低位置1表示按键被按下,反之则按键没被按下
	for(i = 0; i < 7; i ++) //循环7次,依次把次高位移到最高位
	{
		temp = temp << 1;
		HC165_CLK = 0; //HC165_CLK = 0 ——> HC165_CLK = 1 产生上升沿,次高位D(n-1)移到高位D(n)
		_nop_();
		_nop_();
		HC165_CLK = 1;
		
		if(HC165_OUT == 1)
			temp |= 0x01;
	}
	
	return temp; //返回当前按键状态
}

仿真图片:

仿真文件下载:

链接:https://pan.baidu.com/s/1f5y2GUcva1vJzet3ENe1Xg 
提取码:4xcu 
 

### 74HC165D 使用指南 #### 简介 74HC165D 是一款并行输入、串行输出移位寄存器,广泛应用于数据采集和扩展输入端口的应用场景。该器件能够将8位并行数据转换成串行数据输出,适用于微控制器或其他逻辑电路的数据处理。 #### 主要特性 - 并行加载能力:可以在一个时钟周期内捕获所有输入引脚的状态。 - 移位寄存器功能:支持左移操作,在每个时钟脉冲下依次读取一位数据。 - 输出使能控制:允许外部信号控制数据的传输过程[^3]。 #### 应用实例 假设使用STM32作为主控芯片来读取来自按键矩阵的信息: ```c #include "stm32f1xx_hal.h" #define SH_CP_PIN GPIO_PIN_0 /* Shift Register Clock Pin */ #define ST_CP_PIN GPIO_PIN_1 /* Storage Register Clock Pin */ #define DS_PIN GPIO_PIN_2 /* Data Input Pin */ void setup() { // 初始化GPIO配置... } uint8_t read_shift_register(void){ uint8_t data = 0; HAL_GPIO_WritePin(GPIOA, ST_CP_PIN, GPIO_PIN_RESET); // 清除存储寄存器 for(int i=0; i<8; ++i){ HAL_GPIO_WritePin(GPIOA, SH_CP_PIN, GPIO_PIN_RESET); if(HAL_GPIO_ReadPin(GPIOA, DS_PIN)){ data |= (1 << i); } HAL_GPIO_WritePin(GPIOA, SH_CP_PIN, GPIO_PIN_SET); } HAL_GPIO_WritePin(GPIOA, ST_CP_PIN, GPIO_PIN_SET); // 更新存储寄存器内容至输出锁存器 return data; } ``` 此代码片段展示了如何利用STM32与74HC165D配合工作,实现简单的并转串通信流程。通过设置相应的IO口电平变化触发74HC165内部状态转移,从而完成一次完整的数据读取动作。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值