STM32库函数开发KEY控制LED亮灭

LED硬件连接图

 

配置LED的GPIO

void LED_GPIO_Config()
{
		/*定义一个GPIO_InitTypeDef类型的结构体*/
		GPIO_InitTypeDef GPIO_InitStructure;

		/*开启LED相关的GPIO外设时钟*/
		//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
		/*选择要控制的GPIO引脚*/
		GPIO_InitStructure.GPIO_Pin = R_LED|B_LED|G_LED;
		/*设置引脚模式为通用推挽输出*/
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		/*设置引脚速率为50MHz */   
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
		/*调用库函数,初始化GPIOB*/
		GPIO_Init(GPIOB, &GPIO_InitStructure);
		/* 关闭所有led灯	*/
		GPIO_SetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5);
}

配置KEY的GPIO

#define KEY1  GPIO_Pin_0 
#define KEY2  GPIO_Pin_13
void KEY1_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure; //构造结构体 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能其所在时钟        
    GPIO_InitStructure.GPIO_Pin = KEY1;//定义IO端口                       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//定义IO端口模式为浮空输入      
  
    GPIO_Init(GPIOA,&GPIO_InitStructure);
}

void KEY2_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure; //构造结构体 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能其所在时钟        
    GPIO_InitStructure.GPIO_Pin = KEY2;//定义IO端口                       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//定义IO端口模式为浮空输入      
  
    GPIO_Init(GPIOC,&GPIO_InitStructure);
}

开灭LED

//X_LED为LED的GPIO_Pin_x
//GPIO端口输出高电平关闭LED
GPIO_SetBits(GPIOB, X_LED);
//GPIO端口输出低电平点亮LED
GPIO_ResetBits(GPIOB, X_LED);

完整代码

通过key改变红蓝切换

#include "stm32f10x.h"

#define R_LED GPIO_Pin_5
#define G_LED GPIO_Pin_0
#define B_LED GPIO_Pin_1

#define KEY1  GPIO_Pin_0 
#define KEY2  GPIO_Pin_13

void LED_GPIO_Config()
{
		/*定义一个GPIO_InitTypeDef类型的结构体*/
		GPIO_InitTypeDef GPIO_InitStructure;

		/*开启LED相关的GPIO外设时钟*/
		//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
		/*选择要控制的GPIO引脚*/
		GPIO_InitStructure.GPIO_Pin = R_LED|B_LED|G_LED;
		/*设置引脚模式为通用推挽输出*/
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		/*设置引脚速率为50MHz */   
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
		/*调用库函数,初始化GPIOB*/
		GPIO_Init(GPIOB, &GPIO_InitStructure);
		/* 关闭所有led灯	*/
		GPIO_SetBits(GPIOB, GPIO_Pin_0);
		/* 关闭所有led灯	*/
		GPIO_SetBits(GPIOB, GPIO_Pin_1);	 
    /* 关闭所有led灯	*/
		GPIO_SetBits(GPIOB, GPIO_Pin_5);
}

void KEY1_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure; //构造结构体 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能其所在时钟        
    GPIO_InitStructure.GPIO_Pin = KEY1;//定义IO端口                       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//定义IO端口模式为浮空输入      
  
    GPIO_Init(GPIOA,&GPIO_InitStructure);
}

void KEY2_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure; //构造结构体 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能其所在时钟        
    GPIO_InitStructure.GPIO_Pin = KEY2;//定义IO端口                       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//定义IO端口模式为浮空输入      
  
    GPIO_Init(GPIOC,&GPIO_InitStructure);
}

int main()
{
	uint16_t s = 0;
	LED_GPIO_Config();            //GPIOD初始化配置
	KEY1_Init();										//KEY1 初始化 
	KEY2_Init();										//KEY2 初始化
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOA,KEY1)||GPIO_ReadInputDataBit(GPIOC,KEY2))
		{
			while(GPIO_ReadInputDataBit(GPIOA,KEY1)||GPIO_ReadInputDataBit(GPIOC,KEY2));
			s++;
			
		}
		if(s%2 == 0)
		{
			GPIO_SetBits(GPIOB, G_LED);
			GPIO_SetBits(GPIOB, B_LED);
			GPIO_ResetBits(GPIOB, R_LED);
		}
		if(s%2 == 1)
		{
			GPIO_SetBits(GPIOB, G_LED);
			GPIO_SetBits(GPIOB, R_LED);
			GPIO_ResetBits(GPIOB, B_LED);
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值