×
单片机 > 单片机程序设计 > 详情

4.STM32F407ZG按键输入

发布时间:2020-05-28 发布时间:
|

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  按键输入 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
关于89C52单片机11.0592M晶振产生115200波特率的方法