初中生
最后登录1970-1-1
在线时间 小时
注册时间2022-7-15
|
任务要求:使用STM32F103R6芯片的PB0~PB9引脚分别接 10 个LED的阴极,通过程序控制实现跑马灯效果设计与调试。跑马灯效果就是先一个一个点亮,直至全部点亮;再一个一个熄灭;循环上述过程。
/*-----pmd.c-------*/
#include "stm32f10x.h"
#include "./user/bsp_led.h"
int main(void)
{
LED_UserConfig();
while(1)
{
LED_Display();
}
}
/*------bsp_led.c--------*/
#include "./user/bsp_led.h" // 此处需要使用绝对路径,不需要加头文件到工程了
uint16_t code[10]={0xFFFE,0xFFFC,0xFFF8,0xFFF0,0xFFE0,0xFFC0,0xFF80,0xFF00,0xFE00,0xFC00};
uint16_t i,j;
void LED_UserConfig(void)
{
/* 声明一个GPIO结构体 */
GPIO_InitTypeDef GPIO_InitStruct;
/* 使能GPIO时钟 */
RCC_APB2PeriphClockCmd(LED_GPIO_CLK, ENABLE);
/* 初始化GPIO结构体 */
GPIO_InitStruct.GPIO_Pin = 0x03FF; // GPIOx_BRR<0~9端口位清除>设为0x3FF
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 配置为推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 配置GPIO速度为50MHz
/* 初始化GPIO */
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
}
void LED_Display(void)
{
for(i=0;i<10;i++)
{
GPIO_Write(LED_GPIO_PORT,code[i]);
Delay(100);
}
for(j=10;j>0;j--)
{
GPIO_Write(LED_GPIO_PORT,code[j]+0x8000);
Delay(100);
}
}
// 延时函数
void Delay(unsigned int count)
{
unsigned int i;
for(; count!=0; count--)
{
i = 5000;
while(i--);
}
}
/*-------bsp_led.h----------*/
#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "stm32f10x.h"
#define LED_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED_GPIO_PORT GPIOB
/* 函数声明 */
void Delay(unsigned int count);
void LED_UserConfig(void);
void LED_Display(void);
#endif /* __BSP_LED_H*/
仿真结果:
|
|