(六)STM32基础——独立按键

目录

硬件部分

代码部分


        我们之前都是了解了一下输出模式,现在我们来了解一下输入模式,我们目前采用的是通过按键来实现输入控制LED以及蜂鸣器,接下来,我们就来看看硬件部分吧!

硬件部分

        首先, 我们来看一下按键以及对应的引脚位置,下排三个按钮接的是GND,所以应该选择上拉输入,上排按钮接的是VCC,所以选择下拉输入。

代码部分

先来写一下按键的代码部分

#include "key.h"
#include "delay.h" 

void KEY_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);
	// 下三个按键
	// 普通输出模式
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	//KEY0 KEY1 KEY2对应引脚
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
	//上拉
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	//100M
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	//初始化GPIOE2,3,4
	GPIO_Init(GPIOE, &GPIO_InitStructure);
	//上面按键
	//WK_UP对应引脚PA0
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	//下拉
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;
	//初始化GPIOA0
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

//按键返回函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0:无按钮按下
//1:KEY0按下
//2:KEY1按下
//3:KEY2按下 
//4:WKUP按下 WK_UP
// uint8_t的意思是unsigned int 类型的
uint8_t KEY_Scan(uint8_t mode)
{	 
	static uint8_t key_up=1;//按键松开标准
	if(mode)key_up=1;  //支持连续按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
	{
		delay_ms(10);//消抖
		key_up=0;
		if(KEY0==0)return 1;
		else if(KEY1==0)return 2;
		else if(KEY2==0)return 3;
		else if(WK_UP==1)return 4;
	}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; 	    
 	return 0;
	// 无按键按下
}

之后是主函数的

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"

int main(void)
{ 
 
	uint8_t key;           //保存键值ֵ
	delay_init(168);  //初始化延时函数
	LED_Init();				//初始化LED 
	BEEP_Init();      //初始化蜂鸣器
	KEY_Init();       //初始化按键
	LED0=0;				  	//亮红灯
	while(1)
	{
		key=KEY_Scan(0);		//得到键值
	   	if(key)
		{						   
			switch(key)
			{				 
				case WKUP_PRES:	//控制蜂鸣器,位带操作
					BEEP=!BEEP;
					break;
				case KEY0_PRES:	//控制LED0
					LED0=!LED0;
					break;
				case KEY1_PRES:	//控制LED1	 
					LED1=!LED1;
					break;
				case KEY2_PRES:	//同时控制LED0,LED1 
					LED0=!LED0;
					LED1=!LED1;
					break;
			}
		}else delay_ms(10); 
	}
}

运行结果如下所示:

这个和51独立按键类似,没有说明很特别的地方,就先介绍这么多了。

猜你喜欢

转载自blog.csdn.net/weixin_66578482/article/details/125643535
今日推荐