本实验用到的硬件资源有:
1) 指示灯 DS0、DS1
2) 蜂鸣器
3) 4 个按键:KEY0、KEY1、KEY2、和 KEY_UP。
DS0、DS1 以及蜂鸣器和 STM32F4 的连接在上两章都已经分别介绍了,在探索者 STM32F4
开发板上的按键 KEY0 连接在 PE4 上、KEY1 连接在 PE3 上、KEY2 连接在 PE2 上、KEY_UP连接在 PA0 上。
/key.h文件源码/
#ifndef _key_H_
#define _key_H_
#include "sys.h"
#define key0 PEin(4)
#define key1 PEin(3)
#define key2 PEin(2)
#define wk_up PAin(0)
/*初始化*/
void key_Init(void);
//独立按键的扫描
u8 key_scan(u8 mode);
#endif
/key.c文件源码/
#include "key.h"
#include "delay.h"
/*初始化*/
void key_Init(void){
GPIO_InitTypeDef GPIO_key_up,GPIOE_key;
//时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_key_up.GPIO_Mode = GPIO_Mode_IN;
GPIO_key_up.GPIO_Pin = GPIO_Pin_0;
GPIO_key_up.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_key_up.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_key_up);
GPIOE_key.GPIO_Mode = GPIO_Mode_IN;
GPIOE_key.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4;
GPIOE_key.GPIO_PuPd = GPIO_PuPd_UP;
GPIOE_key.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIOE_key);
}
//独立按键的扫描
/**
0:表示不支持长按, 1:表示支持长按,
**/
u8 key_scan(u8 mode){
static u8 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)wk_up = 1;
return 0;// 无按键按下
}
/main.c文件源码/
#include "stm32f4xx.h"
#include "led.h"
#include "key.h"
#include "delay.h"
int main(void)
{
u8 return_keyValue;
delay_init(168);
led_Init();
key_Init();
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
while(1){
return_keyValue = key_scan(0);//得到键值
if(return_keyValue){
//GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
switch(return_keyValue){
case 1:GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
case 2:GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
case 3:GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
case 4:GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
}
}else{
delay_ms(20);
}
}
}
版权声明:本文为weixin_48629688原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。