STM32 - 按键控制LED灯

功能:按键控制LED的亮灭。

两个按键:PE3和PE2

两个LED:PE5和PB5

按键PE3控制LED2 - PE5;按键PE2控制LED3 - PB5

main.c:

cs 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"

uint8_t KeyNum;

int main(void)
{
	LED_Init();
	Key_Init();
	
	
	while(1)
	{
       KeyNum = Key_GetNum();
		   if(KeyNum == 1)   //按键2按下
			 {
				 LED2_Turn();
			 }
			 if(KeyNum == 2)   //按键3按下
			 {
				 LED3_Turn();
			 }
	}
	
}
 

下面是LED的函数功能实现:

LED.c:

cs 复制代码
//用来存放驱动程序的主体代码

#include "stm32f10x.h"                  // Device header

void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5  ;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_Init(GPIOE, &GPIO_InitStructure);
	
	GPIO_SetBits(GPIOE, GPIO_Pin_5);
	GPIO_SetBits(GPIOB, GPIO_Pin_5);
	
}

void LED2_ON(void)    //打开和关闭LED2
{
	GPIO_ResetBits(GPIOE, GPIO_Pin_5);
}


void LED2_OFF(void)
{
	GPIO_SetBits(GPIOE, GPIO_Pin_5);
}

void LED2_Turn(void)	
{ 
	//如果当前输出为0,就置1;否则,就置0.这样可以实现端口的电平翻转
	if  (GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5) == 0) 
	{
		GPIO_SetBits(GPIOE, GPIO_Pin_5);     //把PE5置1
	}
	else
	{
		GPIO_ResetBits(GPIOE, GPIO_Pin_5);   //把PE5置0
	}
}
void LED3_ON(void)    //打开和关闭LED3
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}

void LED3_OFF(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_5);
}

void LED3_Turn(void)	
{ 
	//如果当前输出为0,就置1;否则,就置0.这样可以实现端口的电平翻转
	if  (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 0) 
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_5);     //把PE5置1
	}
	else
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_5);   //把PE5置0
	}
}

LED.h:

cs 复制代码
//用来存放这个驱动程序可有对外提供的函数或变量的声明

#ifndef __LED_H
#define __LED_H

void LED_Init(void);

void LED2_ON(void);
void LED2_OFF(void);
void LED2_Turn(void);

void LED3_ON(void);
void LED3_OFF(void);
void LED3_Turn(void);



#endif

下面是按键函数的实现:

Key.c:

cs 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

void Key_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉输入
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 | GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE, &GPIO_InitStructure);
}

uint8_t Key_GetNum(void)   //调用这个函数,就可以返回按下按键的键码
{
	 uint8_t KeyNum = 0;
	 if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0)
	 {
		 Delay_ms(20);
		 while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0);
		 Delay_ms(20);
		 
		 KeyNum = 1;
	 }
	 if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0)
	 {
		 Delay_ms(20);
		 while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0);
		 Delay_ms(20);
		 
		 KeyNum = 2;
	 }
	
	 return KeyNum;     //将这个变量作为返回值
}

Key.h:

cs 复制代码
#ifndef __KEY_H
#define __KEY_H

void Key_Init(void);

uint8_t Key_GetNum(void);

#endif
相关推荐
Zw-awa3 小时前
传感器是什么:让 STM32 知道车外发生了什么
stm32
SuperByteMaster5 小时前
allegro 布线规则管理器
嵌入式硬件
女神下凡7 小时前
芯参谋(41):DDR2_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
Zhao136824553918 小时前
国产替代DPE5500百兆以太网控制芯片兼容W5500
嵌入式硬件·物联网
yuehuaxin019 小时前
LP20R100FN 同步整流|3C 认证适配器 CCM 工况倒灌、温升超标样机避坑解析
嵌入式硬件·智能家居·适配器模式·智能硬件
国科安芯9 小时前
商业立方星平台中高集成度抗辐射MCU的功耗优化与批量化应用可行性探讨
单片机·嵌入式硬件·架构·risc-v·抗辐射·as32x601
女神下凡10 小时前
芯参谋(40):UFS 电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
iCxhust10 小时前
CAN信号电平与485信号电平实测
单片机·can·通讯·rs485
深圳市恒锐丰科技杨生11 小时前
EG1125 准谐振原边反馈 CC‑CV 功率开关|屹晶 EGmicro
嵌入式硬件·硬件工程
iCxhust11 小时前
51单片机电力载波应用开发(七)广播通讯
c语言·开发语言·单片机·嵌入式硬件·51单片机