STM32点亮流水灯,按下按键后只有最后一个灯亮。
软件:Keil5、Proteus8.9
代码如下:
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)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
GPIO_SetBits(GPIOB,GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3);
delay_ms(10000);
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
GPIO_SetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_2 |GPIO_Pin_3);
delay_ms(10000);
GPIO_ResetBits(GPIOB,GPIO_Pin_2);
GPIO_SetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_3);
delay_ms(10000);
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_SetBits(GPIOB,GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_0);
delay_ms(10000);
}
}
}
key.c
#include "stm32f10x.h" // Device header
#include "delay.h"
void Key_Init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
uint8_t KEY_GetNum()
{
uint8_t KeyNum = 0 ;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)
{
delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0);
delay_ms(20);
KeyNum=1;
}
return KeyNum;
}
led.c
void LED_Init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 ;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3);
}
流水灯,没有实现循环点亮的功能,但亮了 说明灯点亮的函数没问题
那一般就是循环点亮灯模块的代码有问题
或者是你赋值是不是写错了