STM32驱动74HC165级联_应用电路

74HC165、74HC595、ULN2003被很多工程师成为电子设计的“吉祥三宝”!今天,咱们看下74HC165的用法。

它是一个并入、串出的芯片,工作电压2V~6V。但看这个说明,你可能看不懂它是做什么的,换句话说:它可以检测外部的高低电平,常用于多个按键的检测。

传统单片机检测按键,一般使用IO扫描或者IO外部中断。但这种方式非常浪费单片机的IO,一个IO只能检测一个按键。即便使用4X4矩阵键盘的方式,8个IO也只能检测16个按键。但使用74HC165,只需要3个IO,你就能检测100多个按键。

管脚功能有哪些?放一个数据手册的截图:

D0~D7是要检测的信号接口,VCC、GND就不用说了。CE是时钟输入有效管脚,一般接GND。

常用管脚一般是三个:PL、CP、Q7。

PL:异步并行载入使能。低电平时D0~D7采集高低电平信号,高电平时内部锁住信号值。

CP:时钟输入,CLK信号从这里输入。

Q7:串行数据输出。D0~D7的数据以串行的形式,从这里输出,从高到低。

通过这种方式,只要三个IO即可检测8个按键。如果要检测16个或者24个,怎么办?很简单,要借助另一个管脚:DS。

假设单片机要检测16个按键,那么需要用到两片74HC165。接线如下:

这两个芯片上的PL和CP都要接到单片机IO上,确保时钟和锁存信号同步。只有U1的Q7接到了单片机上,U2的Q7接到了U1的DS上。通过这种方式,进而实现多个74HC165的级联,可以检测几十个按键。STM32下的参考代码如下:

uint8_t ReadByte_165(void)
{
	u8 i,dat=0;
	CLK_H;
	SL_H;	
	for(i=0;i<8;i++)
	{
		dat=dat<<1;
		if(DAT==1)
			dat=dat+1;
		CLK_L;
		Delay_Us(1);
		CLK_H;
	}
	sw_buf = dat;
	for(i=0;i<8;i++)
	{
		dat=dat<<1;
		if(DAT==1)
			dat=dat+1;
		CLK_L;
		Delay_Us(1);
		CLK_H;
	}
	in_buf = dat;
	CLK_L;
	SL_L;
	return dat;
}

其中,CLK是CP,SL是PL,DAT是Q7。

如果有问题,欢迎留言,或者关注公众号:单片机爱好者,交流!

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据