按键简介(1) 按键:常见的输入设备,按下导通,松手断开
(2) 按键抖动:由于按键内部使用的是机械式弹**来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动
二、按键控制LED函数代码#include "stm32f10x.h" // Device header
//变量声明
u8 Key=0;
typedef enum {
on=1,
off=0
}State;
//函数声明
u8 KeyNum(void);
void LedInit(void);
void LedCtl(u8 num,State state);
void KeyInit(void);
int main(void)
{
LedInit();
KeyInit();
while(1)
{
Key=KeyNum();
if(Key==1)
{
LedCtl(1,on);
}
if(Key==2)
{
LedCtl(2,on);
}
}
}
/*
*函数名:u8 KeyNum();
*类型:unsigned char
*返回值:u8 num
*功能:读取按键值
*参数:void
*/
u8 KeyNum(void)
{
u8 num=0;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)
{
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);
num=1;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
{
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);
num=2;
}
return num;
}
/*
*函数名:void LedInit()
*类型:void
*返回值:无
*功能:初始化led引脚
*参数:void
*/
void LedInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
}
/*
*函数名:void LedCtl(u8 num,State state)
*类型:void
*返回值:无
*功能:控制led亮灭
*参数:序号:u8 num 状态:State state
*/
void LedCtl(u8 num,State state)
{
if(state){
switch(num){
case 1: GPIO_ResetBits(GPIOA,GPIO_Pin_1);break;
case 2: GPIO_ResetBits(GPIOA,GPIO_Pin_2);break;
default:break;
}
}
else{
switch(num){
case 1: GPIO_SetBits(GPIOA,GPIO_Pin_1);break;
case 2: GPIO_SetBits(GPIOA,GPIO_Pin_2);break;
default:break;
}
}
}
/*
*函数名:void KeyInit()
*类型:void
*返回值:无
*功能:初始化按键引脚
*参数:无
*/
void KeyInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
}
|