利用STM32MCU按键控制LED灯

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

知识介绍

引言

在我们的日常生活中,使用按键控制电器开关的情况还是非常多的,比如说按键控制LED灯的亮灭,按键控制继电器的吸合,按键控制电机的正反转等操作。同样按键在嵌入式开发也非常的重要,比如说按下KEY1,使LED1点亮,再按下KEY1,LED1熄灭。按键的种类有很多,然而今天我们要研究的是贴片按键的使用,我们今天的实例为:通过KEY1的状态来控制LED的点亮与熄灭。

工程文件放置

图片

图片

只有在添加进这一串之后,才能使用头文件集合 stm32f10x_conf.h

图片

选择类型

图片

初始化时钟从哪找

在stm32f10x_rcc.c中。

图片

断言函数

图片

重要程序

LED.c

#include "YANG_LED.h"
void LED_GPIO_Config(void)
{
 /*定义3个GPIO_InitTypeDef 类型的结构体*/
 GPIO_InitTypeDef  GPIO_InitStruct1;
 GPIO_InitTypeDef  GPIO_InitStruct2;
 /*开启 LED 相关的 GPIO 外设时钟*/
 RCC_APB2PeriphClockCmd(LED_GPIO_CLK, ENABLE);
 GPIO_InitStruct1.GPIO_Pin = LED_B_GPIO_PIN;
 GPIO_InitStruct2.GPIO_Pin = LED_R_GPIO_PIN;
  GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStruct1.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStruct2.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStruct2.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct1); 
 GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct2);
 }
复制代码

LED灯的原理图如下,通过对IO口的相关操作,进行对LED灯的相应控制。

图片

KEY.h

#ifndef __KEY_H

#define __KEY_H


#include "stm32f10x.h"


int anjian(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void KeyInit(void);


#endif /* __KEY_H */

复制代码

KEY.c

#include "key"

void KeyInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOC, ENABLE);
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//设置端口模式为浮空输入
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}


int anjian(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  u8 anjianbianliang;
  int anjianzhi;
  anjianbianliang=GPIO_ReadInputDataBit(GPIOx, GPIO_Pin);
  if(anjianbianliang==1)
    anjianzhi=1;
  
  else if(anjianbianliang==0)
    anjianzhi=0;
  return anjianzhi;

}

复制代码

main.c

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
#include "LED.h"
#include "KEY.h"
 int main(void)
{
LED_GPIO_Config();
 Key_Init();
   while (1) 
 {

 if(anjian(GPIOC,GPIO_Pin_8)==0)
        {
             LED_G(ON);      
        }
  if(anjian(GPIOC,GPIO_Pin_9)==0)
       {
          
  LED_G(OFF);                        
        }
 }



复制代码

仿真图

图片

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享