4.STM32F407ZG按键输入

2019-08-16来源: eefocus关键字:STM32F407ZG  按键输入

1.硬件图


对应的按键分别为PA0,PE4,PE3,PE2。其中KEY_UP按下时,PA0为高电平,因此应设置下拉输入。K1~K3按下时,PE4~PE2为低电平,因此应设置上拉输入。


2.按键扫描:首先,按键输入这一从高电平变为低电平的动作才能任为按键按下,并不只是检测到有按键输入就是按键按下。其次,这里需要考虑按键一直处于按下状态时的情况。最后,需要对按键按下进行防抖确认。


3.针对按键扫描的不同结果(如是否有按键按下,如有按键按下,是哪个按键)输出不同动作。


#include

#include

#include

//#define Key_Status 0;

 

void Key_Init(void){

GPIO_InitTypeDef GPIO_Struct1;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);

GPIO_Struct1.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2;

GPIO_Struct1.GPIO_Mode=GPIO_Mode_IN;

GPIO_Struct1.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Struct1.GPIO_PuPd=GPIO_PuPd_UP;

GPIO_Init(GPIOE,&GPIO_Struct1);

//key1~key3

GPIO_InitTypeDef GPIO_Struct2;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

GPIO_Struct2.GPIO_Pin=GPIO_Pin_0;

GPIO_Struct2.GPIO_Mode=GPIO_Mode_IN;

GPIO_Struct2.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Struct2.GPIO_PuPd=GPIO_PuPd_DOWN;

GPIO_Init(GPIOA,&GPIO_Struct2);

//keyup

}

 

int Key_Scan(void){

static int Key_Up=1;

u32 Key_Result=0;//mode for action;

u32 k1,k2,k3,k4;

k1=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);

k2=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3);

k3=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2);

k4=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);

if((Key_Up)&&((k1==0)||(k2==0)||(k3==0)||(k4==1))){  //there is a key down

Delay_ms(20);//wait for sure

if((Key_Up)&&((k1==0)||(k2==0)||(k3==0)||(k4==1))){  //make sure there's a key down

Key_Up=0;

if(k1==0){

Key_Result=1;

//key1 down

else if(k2==0){

Key_Result=2;

//key2 down

else if(k3==0){

Key_Result=3;

}

//key3 down

else if(k4==1){

  Key_Result=4;

}

//key4 down

}

  else Key_Up=1;

}

return Key_Result;

}

 


#include

#include  

#include

#include

#include

 

int main(void){

u8 key;

Delay_ms(1000);

Key_Init();

   while(1){

key=Key_Scan();

if (key!=0){

switch (key)

{

case 1:

Led_Start();

case 2:

Beep_Start();

break;

}

}

else Delay_ms(1000);

}

}

关键字:STM32F407ZG  按键输入

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic471314.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数
下一篇:1.基于固件库建立STM32F4的工程模板

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

7.STM32F407ZG串口通信配置流程

步骤:1.时钟使能:GPIO时钟使能,串口时钟使能。    RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE);    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);2.端口配置:GPIO引脚配置,复用模式。    GPIO_InitTypeDef GPIO_Struct;     GPIO_Struct.GPIO_Pin=GPIO_Pin_9;    GPIO_St
发表于 2019-08-16

STM32F412应用开发笔记之一:初识NUCLEO-F412ZG

近几年来基本都是在STM32平台上做一些设计开发工作。STM32F103、STM32F107、STM32F429等都应用过,但却从没有申请过试用。没想到这次申请居然能被选中,还是很兴奋的。闲话不说,先来欣赏一下:首先来一个带包装的正面照: 一如既往的ST的风格,白色的版面,中规中矩的布局,带ST-LINK。再来一张带外套的背面照:打开包装再来张不带外套的正面照:板上的元器件不多,除去ST-LINK部分,目测应该没有实现太多功能,不过引出来的很多引脚可以扩展应用。最后再来张不带外套的背面照:初次上电后又三个灯亮起,分别是LD4的红色通讯指示灯,应该是ST-LINK的。LD6的电源指示灯是绿色长亮。还有用户LED指示灯,上电
发表于 2019-08-06
STM32F412应用开发笔记之一:初识NUCLEO-F412ZG

STM32F103 实验按键输入与串口实验

正文要进入按键输入,我们必须先明确,按键连在哪一个GPIO口,通过开发手册,如下因此,我们可以在蜂鸣器和跑马灯的基础上,完成该实验。按键输入#include "led.h"#include "delay.h"#include "key.h"#include "sys.h"#include "beep.h"#define KEY0  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0#define KEY1  GPIO_ReadInputDataBit(GPIOE
发表于 2019-08-19
STM32F103 实验按键输入与串口实验

STM32学习笔记--按键输入实验

//按键初始化函数//特别注意:在该函数之后,JTAG将无法使用(SWD也无法使用)//如果想JTAG仿真,可以屏蔽该函数。//PA0.13.15 设置成输入void KEY_Init(void){RCC->APB2ENR|=1<<2;     //使能PORTA时钟GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOA->CRL|=0X00000008;   GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入 GPIOA->CRH|=0X80800000
发表于 2019-06-24

STM32F1x系列——按键输入实验

今天学习了STM32F1x系列的按键输入实验,具体上分为三个步骤:(1)使能按键对应IO口时钟,调用函数:RCC_APB2PeriphClockCmd()(2)初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init()(3)扫描IO口电平(库函数/寄存器/位操作)      主要说一下其中的按键扫描,思路图如下:(1)按键扫描(支持连续按)的一般思路代码:u8 KEY_Scan(void){ if(KEY按下) { delay_ms(10) ;   //延时10-20ms   用来去抖 if(KEY确实按下) { return 
发表于 2019-06-24
STM32F1x系列——按键输入实验

嵌入式系统学习——STM32之按键输入

; GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIOINIT); GPIO_ResetBits(GPIOD, GPIO_Pin_13 | GPIO_Pin_14);}按键输入最关键的是对按键的初始化和输入判断。这里按键的初始化与LED的初始化不同的是GPIO的模式不一样了,LED是推挽输出,按键则相反,是输入,这个时候要考虑是哪一种输入方式,这里我的板子上按键是共阴极的,所以当按键按下的时候IO口输入的低电平,所以我需要在IO口接上拉电阻,使用上拉输入模式。按键初始化函数:#include "stm32f10x.h"#define KEY0
发表于 2019-06-24
嵌入式系统学习——STM32之按键输入

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved