stm32按键反转led的亮灭

这个小实验主要还是利用到GPIO:

下面这个bsp_led.h文件使用寄存器版本写的

#ifndef __LED_H
#define __LED_H
#include"stm32f10x.h"
//定义端口,时钟,引脚
#define red_PORT  GPIOB
#define red_PIN   GPIO_Pin_5
#define red_LCK   RCC_APB2Periph_GPIOB

#define green_PORT  GPIOB
#define green_PIN   GPIO_Pin_0
#define green_LCK   RCC_APB2Periph_GPIOB

#define blue_PORT  GPIOB
#define blue_PIN   GPIO_Pin_1
#define blue_LCK   RCC_APB2Periph_GPIOB

#define ON 0
#define OFF 1
            
#define    digitalHi(p,i)         {p->BSRR=i;}     //引脚输出高电平       
#define digitalLo(p,i)         {p->BRR=i;}     //引脚输出低电平
#define digitalToggle(p,i) {p->ODR ^=i;} //反转

#define red_TOGGLE         digitalToggle(red_PORT,red_PIN)
#define red_OFF           digitalHi(red_PORT,red_PIN)
#define red_ON               digitalLo(red_PORT,red_PIN)

#define green_TOGGLE         digitalToggle(green_PORT,green_PIN)
#define green_OFF           digitalHi(green_PORT,green_PIN)
#define green_ON               digitalLo(green_PORT,green_PIN)

#define blue_TOGGLE         digitalToggle(blue_PORT,blue_PIN)
#define blue_OFF           digitalHi(blue_PORT,blue_PIN)
#define blue_ON               digitalLo(blue_PORT,blue_PIN)

void LED_GPIO_Config(void);
                
#endif
                

下面是bsp_key.h文件:
#ifndef __KEY_H
#define __KEY_H
#include"stm32f10x.h"

#define key_1_PORT  GPIOA
#define key_1_PIN   GPIO_Pin_0
#define key_1_CLK   RCC_APB2Periph_GPIOA

#define key_2_PORT  GPIOC
#define key_2_PIN   GPIO_Pin_13
#define key_2_CLK   RCC_APB2Periph_GPIOC

#define KEY_ON      1
#define KEY_OFF     0

void Key_GPIO_Config(void);
uint8_t KEY_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

#endif

下面是bsp_key.c文件:

#include"bsp_key.h"
void Key_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(key_1_CLK|key_2_CLK,ENABLE);
    GPIO_InitStructure.GPIO_Pin=key_1_PIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init(key_1_PORT,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin=key_2_PIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init(key_2_PORT,&GPIO_InitStructure);
}
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;     //才返回一个KEY_ON
    }
    else
        return KEY_OFF;
}

下面是main.c文件

#include"stm32f10x.h"
#include"bsp_led.h"
#include"bsp_key.h"
int main(void)
{
    LED_GPIO_Config();
    red_ON;
    Key_GPIO_Config();
    while(1)
    {
        if(KEY_Scan(key_1_PORT,key_1_PIN) == KEY_ON  )//
        {
            red_TOGGLE;
            //red(OFF);
        } 

        if( KEY_Scan(key_2_PORT,key_2_PIN) == KEY_ON  )
        {
            green_TOGGLE;
            //green(ON);
        }    
    }
}

以上就是一个简单的通过按键反转LED的亮灭的代码文件,如有不妥,望请指正。

转载于:https://www.cnblogs.com/lzd626/p/9203498.html

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值