ms按键怎么设置,苹果按键音怎么设置

首页 > 实用技巧 > 作者:YD1662023-11-06 20:38:24

2.2 硬件消斗

ms按键怎么设置,苹果按键音怎么设置(5)

2.3 检测原理

根据电路设计,当按键未按下时,GPIO端口输入状态为低电平,按键两端没有导通;当按键按下时,按键导通,GPIO引脚端口输入高电平(把按键当做一根导线,当按键按下的时候,单片机引脚端口与正极连接,这时候GPIO端口就是连接的正极,同样,没有按键也是一样的道理)。所以检测按键是否按下只需要判断高低电平(以此设计为例,高电平就是接通,低电平就是断开,如果你的按键是接地的和这相反)。

2-软件设计2.1 软件消斗2.1.1原理

独立按键软件扫描方法,需要在程序运行过程中循环或定时检测按键连接的引脚,①在首次检测到按键有效电平时,②延时10ms(不同按键延时不同)后,③再检测一次引脚电平,如能再次检测到有效电平,则是一次有效按键动作,反之则认为是误操作。

ms按键怎么设置,苹果按键音怎么设置(6)


软件消斗一般流程如下:

ms按键怎么设置,苹果按键音怎么设置(7)

2.1.2 编程要点

(1)使能GPIO时钟。调用函数RCC_AHB1PeriphClockCmd()。
(2)初始化GPIO模式。调用函数GPIO_Init()。
(3)操作GPIO,读取引脚状态。调用函数GPIO_ReadInputDataBit();

2.1.3 步骤

1、使能相应片上外设的时钟(非常重要),设计到的文件有
头文件:stm32f4xx_rcc.h
源文件:stm32f4xx_rcc.c
使用的主要函数:
RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)
RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState)
RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

2、设置对应于片上外设使用的GPIO工作模式。

3、如果使用复用功能,需要单独设置每一个GPIO引脚的复用功能。

4、在应用程序中读取引脚状态、控制引脚输出状态或使用复用功能完成特定功能

2.2 代码编写2.2.1 主程序

int main(void) { delay_init();  //初始化SysTick,用于延时 LED_Config(); //初始化LED灯的GPIO引脚 Key_Config(); //初始化按键的GPIO引脚 /*按键控制LED灯*/ while (1) { /*按键S扫描判别,高电平有效*/ if(Key_Scan(GPIOC,GPIO_Pin_13,1) == KEY_ON) { LED_ON; //点亮LED } /*按键扫描判别,低电平有效*/ if(Key_Scan(GPIOA,GPIO_Pin_13,0) == KEY_ON) { LED_OFF; //熄灭LED } } }2.2.2 按键初始化

void Key_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /*开启按键GPIO口的时钟*/ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE) /*选择按键的引脚*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; /*设置引脚为输入模式*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; /*设置引脚不上拉也不下拉*/ //引脚电平受到外部电压影响在这里浮空/上拉/下拉都可以的 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; /*使用上面的结构体初始化按键*/ GPIO_Init(GPIOC, &GPIO_InitStructure);2.2.2 按键扫描

初始化按键后,就可以通过检测对应引脚的电平来判断按键状态 #define KEY_OFF 0 #define KEY_ON 1 uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,uint8_t Key_Lvl) { /*检测是否有按键按下*/ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Key_Lvl )//第一次检测电平 { delay_ms(10);   //去抖动 if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Key_Lvl)//第二次检测电平 return KEY_ON;  //确认有效按键动作返回 else return KEY_OFF; //无有效按键动作返回 } else return KEY_OFF; //无有效按键动作返回 }

上一页12末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.