HC165结构图
1.硬件原理图
2.编程代码
(这个是未验证的程序,这只是使用别人的板子编写的程序,后期等板子出来了,在验证程序)
新板出来了,程序验证OK(可以使用3个IO,拓展IO输入)
/*
************************************* Copyright ******************************
*
* (C) Copyright 2023,Wenkic,China, GCU.
* All Rights Reserved
*
* By(Wenkic)
* https://blog.csdn.net/Wekic
*
* Version : v1.0
* Author : Wenkic
* Description :
* Function List: 74HC165D 并入串出(输入信号)
* 74HC165和74HCT165是一种8位串行或并行输入/串行输出移位寄存器。
* 该器件具有一个串行数据输入(DS)、8个并行数据输入(D0至D7)和两个互补的串行输出(Q7和Q7')。
*
* 【01】:<PL>数据加载控制引脚。该引脚处于低电平时,读取并行端口(D0->D7)的数据并储存在移位寄存器内;
* 该引脚处于高电平时,串行数据从DS引脚(10号)进入到移位寄存器中(Q0->Q7)。
* 【02】:<CP>时钟输入,上升沿触发。
* 【11】【12】【13】【14】【03】【04】【05】【06】:<D0->D7>并行数据输入引脚。
* 【07】:<Q7>串行数据互补输出引脚,与9号引脚互补。
* 【08】:<GND>电源负极。
* 【09】:<Q7>串行数据输出引脚。
* 【10】:<DS>串行数据输入引脚。
* 【15】:<CE>时钟输入使能引脚,低电平触发。
* 【16】:<VCC>电源正极。
* 应用1: 并入串出
* 应用2: 串入并出
*
******************************************************************************
*/
/********************************End of Head************************************/
#include "HC165.h"
static volatile u8 HC165Table[4] = { 0 };
//并入串出
#define HC165_SH P21 //锁存脚(1脚) 0:外部输入到寄存器 1:上升沿锁存数据
#define HC165_CLK P25 //锁存脚(2脚) 上升沿移位一位数据出
#define HC165_INH P21 //锁存脚(15脚) 时钟使能(0:时钟上升沿无效 1:有效)
#define HC165_SER P24 //数据脚(10脚) 数据输入
u8 Read_HC165Byte(void)
{
u8 temp = 0,i;
for (i=0; i<8; i++) {
HC165_CLK = 0; // 下降沿同步 HC165 和单片机
temp |= (HC165_SER)?(1<<i):0; // 获取当前输入数据
HC165_CLK = 1; // 上升沿允许 HC165 接收下一位数据
}
return temp;
}
void HC165_Update(void)
{
HC165_SH = 1; // 外部数据到达寄存器
HC165_CLK = 1;
HC165_SH = 0; // 初次上升沿锁定数据,保证每次开始请求新数据前,先逐位移位去取前一次的输入。
HC165Table[0] = Read_HC165Byte(); //读取芯片1
HC165Table[1] = Read_HC165Byte(); //读取芯片2
HC165Table[2] = Read_HC165Byte(); //读取芯片3
HC165Table[3] = Read_HC165Byte(); //读取芯片4
}
可以看一下这个视频:单片机输入端口扩展芯片——74HC165 - 知乎