STM32三线检测八个按键(74HC165)

6 篇文章 0 订阅
6 篇文章 0 订阅

STM32三线检测八个按键是典型的IO扩展应用(并转串),思路和学习51单片机时一致,下面直接上图和代码!
在这里插入图片描述
按键为检测低电平
在这里插入图片描述
简述:

1.74HC165使用1、2、9脚,15脚可直接接地
2.按键低电平为按下
PA1-> SL 并行数据加载
PA2-> CLK 时钟
PA3-> DAT 串行数据输出

代码:

#include "74HC165.h"
#include "delay.h"

void Init_74HC165(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 

	GPIO_InitStructure.GPIO_Pin   = SL_PIN|CLK_PIN;				 
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP; 		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
	GPIO_Init(PORT_74HC165, &GPIO_InitStructure);	
	
	GPIO_InitStructure.GPIO_Pin   = DAT_PIN;				 
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU; 		
	GPIO_Init(PORT_74HC165, &GPIO_InitStructure);	

}

u8 ReadByte_165(void)
{
	u8 i,dat=0;
	CLK=1;
	Latch_165();
	for(i=0;i<8;i++)
	{
		dat=dat<<1;
		if(DAT==1)
			dat=dat+1;
		CLK=0;
		delay_us(1);
		CLK=1;
	}
	CLK=0;
	return ~dat;
}

void Latch_165(void)
{
	SL=0;
	delay_us(1);
	SL=1;	
}

u8 Scan_Key(void)  //该函数仅支持1次按下1个按键
{
	u8 key;
	key=ReadByte_165();
	if(key==0)
		;
	else
		{
			switch(key)
			{
				case 1:
					key=1;
				break;
				case 2:
					key=2;
				break;
				case 4:
					key=3;
				break;
				case 8:
					key=4;
				break;
				case 16:
					key=5;
				break;
				case 32:
					key=6;
				break;
				case 64:
					key=7;
				break;
				case 128:
					key=8;
				break;
				default:
					key=0;
				break;
			}
		}
		return key;
}

头文件:

#ifndef __74HC165_H
#define __74HC165_H	 
#include "sys.h"

#define PORT_74HC165 GPIOA
#define SL PAout(1)						//SL
#define SL_PIN GPIO_Pin_1

#define CLK PAout(2)					 //CLK
#define CLK_PIN GPIO_Pin_2		

#define DAT_PIN GPIO_Pin_3		
#define DAT GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)//DAT

void Init_74HC165(void);
u8 ReadByte_165(void)
void Latch_165(void);
u8 Scan_Key(void);
#endif


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值