美文网首页
按键控制LED灯亮灭(STM 32)

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

作者: tomato_20fc | 来源:发表于2019-02-22 17:59 被阅读0次

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

       <key.h>*********************************
       #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
      <key.c>*********************************
      #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)  
    }
     <main.c>*********************************
     #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)

          本文链接:https://www.haomeiwen.com/subject/nqoeyqtx.html