STM32实战篇:按键控制LED

按键控制LED

功能要求

有两个按键,分别控制两个LED灯。当按键按下后,灯的亮暗状态改变。实物如下图所示:

由图可知,按键一端直接接地,故另一端所对应IO引脚的输入模式应该为上拉输入模式


实现代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

unsigned int KEY()      //判断按键是否按下
{
	unsigned int Key;
	
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0)
	{
		Delay_ms(10);
		while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0);//等待按键松手
		Delay_ms(10);
		Key=1;
	}
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0)
	{
		Delay_ms(10);
		while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0);//等待按键松手
		Delay_ms(10);
		Key=2;
	}
	
	return Key;
}

void LED1_Turn()  //LED1灯的亮暗翻转
{
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0)
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
	}
	else
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);
	}
}

void LED2_Turn()  //LED1灯的亮暗翻转
{
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)==0)
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET);
	}
	else
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET);
	}
}

int main()
{
	uint16_t KeyNum;
	
	//开启时钟
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//IO引脚PA1、PA2初始化,推挽输出模式
	GPIO_InitTypeDef GPIO_InitStruct_Out;
	GPIO_InitStruct_Out.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
	GPIO_InitStruct_Out.GPIO_Speed=GPIO_Speed_2MHz;
	GPIO_InitStruct_Out.GPIO_Mode=GPIO_Mode_Out_PP;
	
	GPIO_Init(GPIOA, &GPIO_InitStruct_Out);
	
	//IO引脚PB1、PB11初始化,上拉输入模式
	GPIO_InitTypeDef GPIO_InitStruct_In;
	GPIO_InitStruct_In.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11;
	GPIO_InitStruct_In.GPIO_Speed=GPIO_Speed_2MHz;
	GPIO_InitStruct_In.GPIO_Mode=GPIO_Mode_IPU;
	
	GPIO_Init(GPIOB, &GPIO_InitStruct_In);
	
	while(1)
	{
		KeyNum=KEY();
		if(KeyNum==1){LED1_Turn();}
		if(KeyNum==2){LED2_Turn();}
	}
}

 

 

 

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 11:24:03       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 11:24:03       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 11:24:03       90 阅读
  4. Python语言-面向对象

    2024-07-10 11:24:03       98 阅读

热门阅读

  1. WebKit源代码探秘:深入理解其组织结构与组件

    2024-07-10 11:24:03       27 阅读
  2. 【回溯+双指针算法题记录】回文字符串汇总

    2024-07-10 11:24:03       27 阅读
  3. 2288. 价格减免

    2024-07-10 11:24:03       26 阅读
  4. Quartz 介绍

    2024-07-10 11:24:03       28 阅读
  5. Taro自定义实现本地路径转换为文件

    2024-07-10 11:24:03       18 阅读
  6. Python 类与对象:深入理解与应用

    2024-07-10 11:24:03       22 阅读
  7. 20240709每日后端--------Spring Boot的启动流程

    2024-07-10 11:24:03       35 阅读
  8. qt 播放相机的数据

    2024-07-10 11:24:03       32 阅读