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

检测按键按下与否,进而做出相应的消息响应,
按键与IO口和GND相连。

   *********************************
   #ifndef __KEY_H
   #define __KEY_H   

  #define KEYPORT   GPIOA   //IO口的宏定义
  #define KEY1  GPIO_Pin_0  
  #define KEY2  GPIO_Pin_1  
   void KEY_Init(void);                     
  #endif
  *********************************
  #include "key.h"
 void KEY_Init(void){ //按键初始化
GPIO_InitTypeDef  GPIO_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)); //等待按键起来 
}
}

你可能感兴趣的:(按键控制LED灯亮灭(STM 32))