• GPIO输入—按键检测(开关控制小灯)


    本次的代码全是在上次代码之上添加的.

    1.user下新建文件夹key,新建bsp_key.h bsp_key.c文件.

    2.keil项目添加bsp_key.c,魔术棒C/C++中include path添加key文件夹.

    3.相应的源码为:

    bsp_key.h中内容

    //条件编译,防止重复定义头文件(stm32f10x.h在这里引入,但是在主函数中仍然引入,会被加载两次,若没有添加编译会报错.)
    #ifndef BSP_KEY_H_
    #define BSP_KEY_H_
    
    #include "stm32f10x.h"
    
    #define  KEY_ON 1
    #define  KEY_OFF 0
    
    #define KEY_LED_GPIO_PIN     GPIO_Pin_13
    #define KEY_LED_GPIO_PORT    GPIOC
    #define KEY_LED_GPIOC_CLOCK  RCC_APB2Periph_GPIOC
    
    void KEY_LED_Config(void);
    uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
    
    #endif

    bsp_key.c中内容

    //只需要包含自身的头文件即可
    #include "bsp_key.h"
    //配置按键的GPIOC,配置完成后通过检测GPIOC的pin13引脚(对应的寄存器为GPIOC-IDR-PIN13)的高低电平 判断键是否被按下,高--按下,低--未按下 void KEY_LED_Config(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(KEY_LED_GPIOC_CLOCK, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Pin=KEY_LED_GPIO_PIN; GPIO_Init(KEY_LED_GPIO_PORT, &GPIO_InitStruct); }
    //检测案件是否按下函数 GPIO_ReadInputDataBit 库函数中函数,含义为 检测某个GPIOX的某个pin的电平
    uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin){ /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin)==KEY_ON){ /*等待按键释放 */ while(GPIO_ReadInputDataBit( GPIOx, GPIO_Pin)==KEY_ON) ; return KEY_ON ; }else return KEY_OFF; }

    main函数中内容

    #include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
    #include "bsp_led.h"
    #include "bsp_key.h"
    
    #define SOFT_DELAY    Delay(0x0FFFFF);
    //void Delay(__IO u32 nCount);
    void Delay( uint32_t count){
     for( ;count!=0;count--);
    
    }
    
    
    int main(void)
    {
    	// 来到这里的时候,系统的时钟已经被配置成72M。
    	LED_GPIO_Config();
    //默认情况,灯为灭的.(LED电路图为低电平点亮,配置完成后默认为低电平,即便是不赋值也会亮起来) LED_OFF; KEY_LED_Config(); while(1){ if(Key_Scan(KEY_LED_GPIO_PORT,KEY_LED_GPIO_PIN)==KEY_ON){ LED_TOGGLE; //有按键按下,灯的亮灭翻转一次 } } }
  • 相关阅读:
    程序打印的日志哪里去了?结合slf4j来谈谈面向接口编程的重要性
    vue项目用npm安装sass包遇到的问题及解决办法
    nginx反向代理配置及常见指令
    你以为你以为的就是你以为的吗?记一次服务器点对点通知的联调过程
    jeecg逆向工程代码的生成及常见问题
    java注解
    终于有了,史上最强大的数据脱敏处理算法
    SpringBoot项目下的JUnit测试
    递归方法
    练习题
  • 原文地址:https://www.cnblogs.com/wenshinlee/p/8853621.html
Copyright © 2020-2023  润新知