STM32自学☞按键控制LED亮灭

 STM32自学☞按键控制LED亮灭_第1张图片

led.c文件

#include "stm32f10x.h"

#include "led.h"

void led_Init(void)

{

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

 GPIO_InitTypeDef GPIO_InitStruct;

 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11;

 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;

 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;

 GPIO_Init(GPIOB,&GPIO_InitStruct);

 GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11);

}

void led1_Open(void) //led亮

{

 GPIO_ResetBits(GPIOB,GPIO_Pin_1);

}

void led1_Off(void) //led灭

{

 GPIO_SetBits(GPIOB,GPIO_Pin_1);

}

void led1_turn(void) //按键控制亮灭

{

 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)

 {

  GPIO_SetBits(GPIOB,GPIO_Pin_1);

 }else

 {

  GPIO_ResetBits(GPIOB,GPIO_Pin_1);

 }

}

void led2_Open(void)

{

 GPIO_ResetBits(GPIOB,GPIO_Pin_10);

}

void led2_Off(void)

{

 GPIO_SetBits(GPIOB,GPIO_Pin_10);

}

void led2_turn(void)

{

 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==0)

 {

  GPIO_SetBits(GPIOB,GPIO_Pin_10);

 }else

 {

  GPIO_ResetBits(GPIOB,GPIO_Pin_10);

 }

}

void led3_Open(void)

{

 GPIO_ResetBits(GPIOB,GPIO_Pin_11);

}

void led3_Off(void)

{

 GPIO_SetBits(GPIOB,GPIO_Pin_11);

}

void led3_turn(void)

{

 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)

 {

  GPIO_SetBits(GPIOB,GPIO_Pin_11);

 }else

 {

  GPIO_ResetBits(GPIOB,GPIO_Pin_11);

 }

}

led.h文件

#ifndef _LED_H_

#define _LED_H_

void led_Init(void);

void led1_Open(void);

void led1_Off(void);

void led2_Open(void);

void led2_Off(void);

void led3_Open(void);

void led3_Off(void);

void led1_turn(void);

void led2_turn(void);

void led3_turn(void);

#endif

key.c文件

#include "stm32f10x.h"

#include "key.h"

#include "delay.h"

void key_Init(void)

{

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

 GPIO_InitTypeDef GPIO_InitStruct;

 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;

 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU; //上拉输入

 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;

 GPIO_Init(GPIOA,&GPIO_InitStruct);

}

uint8_t key_Getnum(void)

{

 uint8_t keyNum=0;

 //判断按键是否按下

 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)

 {

  delay_ms(20); //消抖

  while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);

  delay_ms(20);

  keyNum=1;

 }

 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0)

 {

  delay_ms(20); //消抖

  while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);

  delay_ms(20);

  keyNum=2;

 }

 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==0)

 {

  delay_ms(20); //消抖

  while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==0);

  delay_ms(20);

  keyNum=3;

 }

 return keyNum;

}

key.h文件

#ifndef _KEY_H_

#define _KEY_H_

#include "stdint.h"

void key_Init(void);

uint8_t key_Getnum(void);

#endif

main.c文件

#include "stm32f10x.h"

#include "led.h"

#include "key.h"

#include "delay.h"

uint8_t keyNum;

int main (void)

 //初始化

 led_Init();

 key_Init();

 while(1)

 {

  keyNum=key_Getnum();

  /*按下按键1灯亮再次按下灯灭,按下按键2灯亮再次按下灯灭,按下按键3灯亮再次按下灯灭

  if(keyNum==1)

  {

   led1_Open();

  }

  if(keyNum==2)

  {

   led1_Off();

  }

  */

  if(keyNum==1)

  {

   led1_turn();

  }

  if(keyNum==2)

  {

   led2_turn();

  }

  if(keyNum==3)

  {

   led3_turn();

  }

 }

}

你可能感兴趣的:(STM32,stm32,单片机,嵌入式硬件)