蓝桥杯嵌入式 ---- “空手套白狼“ 之 按键长按 & 短按


前言

本文是基于嵌入式开发板CT117E,stm32f103RBT6。"空手套白狼"就是直接利用官方给的库(v3.5),进行拷贝修改形成可以正常运行的代码。

一、原理图

在这里插入图片描述
在这里插入图片描述

二、由原理图得到的信息

  • 四个按键,按下时状态为低电平。
  • 按键的N K1----N K4,连接的端口分别是PA0 PA8 PB1 PB2。

三、按键初始化

1. 按键属于输入,所以配置初始化函数时应该配置为浮空输入。

2. 初始化函数: 直接使用led初始化的内容,进行修改,对模式改为GPIO_Mode_IN_FLOATING。


STM32固件库代码V3.5版\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle\main.c


void key_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;   //按键1,按键2
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; //按键3,按键4
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

四、按键的应用方法

读取各个按键端口的值,低电平就是按键按下。

#define key1 GPIO_ReadInputDataBit (GPIOA,GPIO_Pin_0)
#define key2 GPIO_ReadInputDataBit (GPIOA,GPIO_Pin_8)
#define key3 GPIO_ReadInputDataBit (GPIOB,GPIO_Pin_1)
#define key4 GPIO_ReadInputDataBit (GPIOB,GPIO_Pin_2)

五、按键在主函数的应用方法 ----长按 & 短按

按键的程序编写不难,但有的题目可能会要求区分长按和短按,主要思路:按键的扫描时间是50ms扫描一次(这里50ms刚好达到消抖的效果),可以在按键按下的时候定义变量,每次扫描记录加一次,当变量大于20时就判断为长按1秒,如果按键松开就判断变量的值是否在1-10之间,从而判断是否为短按,再把变量清0。

void key_read(void)        
{
	if(key1==0)
	{
		key1_num++;            //每50ms加1
		if(key1_num>20)				//长按判断2s
		{
		   led_ctrl(led1,1);
		}		
	}
	else
	{  
	   if(key1_num>1 && key1_num<10)               //短按判断
		{
		 led_ctrl(led1,0);
		}
		key1_num=0;
	}  
}
while(1)
{
	if(key_flag)   //key_flag这个变量在滴答计时器的中断函数里面,每50ms就对它置1;
	{
		key_flag=0;    
		key_read();      //每50ms执行一次,每50ms函数里的key1_num加1;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值