江科大STM32-按键控制Led灯
2026/7/4 3:42:40 网站建设 项目流程

1.遇到的问题和解决方法

1.在新建.c和.h文件的时候,注意是选择到具体文件夹

需要手动再选择一层

2.当文件的头文件报错的时候

点击魔术棒按钮,看Define和Include Paths,是否正确配置,点击ok

点击扳手按钮,再查看编码设置,点击ok,就能解决头文件报错的问题

2.按键控制流水灯

LED.c

#include "stm32f10x.h" // Device header void LED_Init(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_SetBits(GPIOA,GPIO_Pin_1); GPIO_SetBits(GPIOA,GPIO_Pin_2); } void LED1_ON(void){ GPIO_ResetBits(GPIOA,GPIO_Pin_1); } void LED1_OFF(void){ GPIO_SetBits(GPIOA,GPIO_Pin_1); } void LED1_Turn(void){ if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0){ GPIO_SetBits(GPIOA,GPIO_Pin_1); }else { GPIO_ResetBits(GPIOA,GPIO_Pin_1); } } void LED2_ON(void){ GPIO_ResetBits(GPIOA,GPIO_Pin_2); } void LED2_OFF(void){ GPIO_SetBits(GPIOA,GPIO_Pin_2); } void LED2_Turn(void){ if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0){ GPIO_SetBits(GPIOA,GPIO_Pin_2); }else { GPIO_ResetBits(GPIOA,GPIO_Pin_2); } }

LED.h

#ifndef __LED_H #define __LED_H void LED_Init(void); void LED1_ON(void); void LED1_OFF(void); void LED1_Turn(void); void LED2_ON(void); void LED2_OFF(void); void LED2_Turn(void); #endif

KEY.c

注意:GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;

否则按键按了,灯没反应

#include "stm32f10x.h" // Device header #include "delay.h" void Key_init(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStruct); } uint8_t Key_GetNum(void){ uint8_t ret=0; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){ Delay_ms(20); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0); Delay_ms(20); ret=1; } if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0){ Delay_ms(20); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0); Delay_ms(20); ret=2; } return ret; }

KEY.h

#ifndef __KEY_H #define __KEY_H void Key_init(void); uint8_t Key_GetNum(void); #endif

main.c

#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){ LED1_Turn(); } if(KeyNum==2){ LED2_Turn(); } } //return 0; }

修仙一途,道阻且长,共勉!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询