按键控制LED灯亮灭(STM|按键控制LED灯亮灭(STM 32)

【按键控制LED灯亮灭(STM|按键控制LED灯亮灭(STM 32)】检测按键按下与否,进而做出相应的消息响应,
按键与IO口和GND相连。

********************************* #ifndef __KEY_H #define __KEY_H#define KEYPORTGPIOA//IO口的宏定义 #define KEY1GPIO_Pin_0 #define KEY2GPIO_Pin_1 void KEY_Init(void); #endif ********************************* #include "key.h" void KEY_Init(void){ //按键初始化 GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin = KEY1 | KEY2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //当按键没有按下时,IO口检测为高电平,为上拉电阻模式,按下IO口与地连接,为低电平 //GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; //与按键相连的IO口为输入,不需要设置接口速度,只有输出才用 GPIO_Init(KEYPORT,&GPIO_InitStructure) } ********************************* #include "stm32f10x.h" //STM32???? #include "delay.h" #include "key.h" int main (void){ u8 a; RCC_Configuration(); KEY_Init(); while(1){ //方法1 if(GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读取按键的高低电平 判断按键是否按下 GPIO_ResetBits(LEDPORT,LED1); //按下后的消息响应,此处为点灯 }else{ GPIO_SetBits(LEDPORT,LED1); // } //方法2更为常用 if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ delay_ms(20); //延时 20ms ,硬件消抖,防止读取错误 if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键起来 } }

    推荐阅读