以检测按键输入为例:
如图一共有三个按键,WK-UP按键被按下会被拉到高电平,其它两个被按下会被拉到低电平。下面例子中如果key0被按下那就让led0状态反转,如果是key1被按下那就让led1状态反转,如果是wk-up被按下那就让蜂鸣器状态反转。
首先要说明的是按键有两种模式,一种就像是快进键,持续被按下就持续快进,就像是可重复触发的单稳态触发器,另外一种就是像关机一样的键,就算被持续按下也只是被判定为一次触发,就像是不可重复触发的单稳态触发器。在程序中用key_mode这个参数配置模式。
读取IO输入的库函数是:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
在程序中直接使用了宏定义绕过库函数的使用达到操作寄存器的目的
1.key.h
#ifndef __key_h_
#define __key_h_
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#define wk_up PAin(0) //位操作参数宏,用多级宏映射寄存器
#define key0 PEin(4)
#define key1 PEin(3)
#define beep PBout(8)
#define led0 PBout(5)
#define led1 PEout(5)
u8 key_scan(u8 key_mode);
void key_init(void);
#endif
2.key.c