STM32单片机入门学习(五)-按钮控制LED

按钮和LED接线

LED负极接B12,正极接VCC

按钮一端接B13,一端接GND,按下为低电平,松开为高电平

如图:

主程序代码:main.c
#include "stm32f10x.h"
#include "Delay.h"     //delay函数所在头文件
#include "LED.h"
#include "KEY.h"

int main(void)
{
	int isdown;
	
	LED_Init();   //初始化LED
	LED_OFF();		//默认LED灭
	
	KEY_Init(); 	//初始化KEY
	
	while(1)
		{
			isdown  = Key_IsDown();	//循环判断按钮是否被按下
			if(isdown == 1)
				{
					LED_ON();
				}
				else
				{
					LED_OFF();
				}
		}
}
 LED.h和LED.c

LED.h

#ifndef __LED_H
#define __LED_H


void LED_Init(void);
void LED_ON(void);
void LED_OFF(void);

#endif

LED.c

#include "stm32f10x.h"

void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //设置时钟
	
	GPIO_InitTypeDef GPIOInitStruct;
	
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽模式
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_12;     //B12
	GPIOInitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB, &GPIOInitStruct);
	
	GPIO_SetBits(GPIOB, GPIO_Pin_12); // 不亮
	
}

void LED_ON(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_12); // 亮
}


void LED_OFF(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_12); // 不亮
}

KEY.h和KEY.c

KEY.h

#ifndef __KEY_H
#define __KEY_H


void KEY_Init(void);
unsigned char Key_IsDown(void);
	
#endif

KEY.c

#include "stm32f10x.h"
#include "Delay.h" 


//初始化KEY
void KEY_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //设置时钟
	
	GPIO_InitTypeDef GPIOInitStruct;
	
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_IPU;    //上拉模式
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_13;     //B13
	GPIOInitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB, &GPIOInitStruct);
}



//判断key是否被按下
uint8_t Key_IsDown(void)
{
	uint8_t isdown = 0;
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)   //判断是否按下
	{
		Delay_ms(20);    //消抖
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)    //判断是否确实被按钮
		{
			isdown = 1;
		}
		else
		{
			isdown = 0;
		}
	}
	else
	{
		isdown = 0;
	}
	return isdown;
;
}
整体工程文件如下:

STM32单片机入门学习(五)-按钮控制LED_第1张图片

STM32单片机入门学习(五)-按钮控制LED_第2张图片

你可能感兴趣的:(STM32,单片机,stm32,学习)