【STM32学习笔记】按键控制

一.按键原理

当按键按下的时候会有一个电平变化,如果按之前是高电平的话,我们只需要检测是否为低电平就可以知道是否按下了。

二.原理图介绍

在这里我们只用key0和key1,通过原理图我们可以知道,当我们按下的时候为低电平,我们只需检测低电平就可以知道按键是否按下了。

三.程序设计 

char ScanCnt;

void key_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin  =GPIO_Pin_3 | GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOE,&GPIO_InitStructure);
}


char Key_scanf(void)
{
	if(key0 == 0)
	{
		ScanCnt++;
		if(ScanCnt>=3)
		{
			ScanCnt=0;
		}
		else
		{
			ScanCnt=0;
		}
		return 1;
	}
	else if(key1 == 0)
	{
		ScanCnt++;
		if(ScanCnt>=3)
		{
			ScanCnt=0;
		}
		else
		{
			ScanCnt=0;
		}
		return 2;
	}
	return 0;
}

首先没有初始化io口,这里需要配置成上拉输入,这样的话当我们没有按下是按键是高电平,按下是低电平。接着是写扫描函数,我已经在.h文件中宏定义了读取函数。做了一个消抖,当连续检测到3次低电平后,我们返回1,同理读取到3次key1为0后,我们返回2,什么都没有读取到返回0.

int main(void)
{
	LED_Init();
	BEEP_Init();
	delay_init();
	key_Init();
	while(1)
	{
		num = Key_scanf();
		if(num == 2)
		{
			GPIO_SetBits(GPIOB,GPIO_Pin_8);
			//delay_ms(200);
		}
		else if(num == 1)
		{
			GPIO_ResetBits(GPIOE,GPIO_Pin_5);
			GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		}
		else
		{
			GPIO_ResetBits(GPIOB,GPIO_Pin_8);
			GPIO_SetBits(GPIOE,GPIO_Pin_5);
			GPIO_SetBits(GPIOB,GPIO_Pin_5);
		}
	}
}

接着我们回到主函数,将读取的值赋值给num,如果num为2,我们就让蜂鸣器响。如果num为1,我们就让灯亮,反之都不是我们将灯和蜂鸣器全都关掉。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值