做药品的电商网站有哪些,网站推广免费渠道,建设营销型网站的目的有哪些,各地持续优化防控措施学习目录 一.流水灯1.创建文件2.编写相关代码 一.流水灯
1.创建文件
将方法进行分类保存在不同的 .c 文件中#xff0c;方便复用和寻找#xff1b;
创建Hardware\LED文件#xff0c;其中有led.c和led.h文件#xff0c;用于存放有关LED灯操作的方法#xff1b;
在User文… 学习目录 一.流水灯1.创建文件2.编写相关代码 一.流水灯
1.创建文件
将方法进行分类保存在不同的 .c 文件中方便复用和寻找
创建Hardware\LED文件其中有led.c和led.h文件用于存放有关LED灯操作的方法
在User文件中创建delay.c和delay.h文件用于存放延迟的方法 2.编写相关代码
1编写LED灯有关的代码 在led.h中声明方法名等方便其他 .c 文件进行引用
#ifndef __LED_H
#define __LED_H#include stm32f10x.h//宏定义
#define LED1 GPIO_ODR_ODR0
#define LED2 GPIO_ODR_ODR1
#define LED3 GPIO_ODR_ODR8//初始化
void LED_Init(void);//控制某个LED的开关
void LED_On(uint16_t led);
void LED_Off(uint16_t led);//翻转LED状态
void LED_Toggle(uint16_t led);//对一组LED灯全开全关
void LED_OnAll(uint16_t leds[],uint8_t size);
void LED_OffAll(uint16_t leds[],uint8_t size);#endif在led.c中实现方法
#include led.h//初始化
void LED_Init(void)
{//1.时钟配置为了让stm32的时钟与外设的时钟进行适配RCC-APB2ENR | RCC_APB2ENR_IOPAEN;//2.GPIO工作模式配置GPIOA-CRL ~GPIO_CRL_CNF0;GPIOA-CRL | GPIO_CRL_MODE0;GPIOA-CRL ~GPIO_CRL_CNF1;GPIOA-CRL | GPIO_CRL_MODE1;GPIOA-CRH ~GPIO_CRH_CNF8;GPIOA-CRH | GPIO_CRH_MODE8;//3.PA0输出高电平默认关灯LED_Off(LED1);LED_Off(LED2);LED_Off(LED3);
}//控制某个LED的开关
void LED_On(uint16_t led)
{GPIOA-ODR ~led;
}void LED_Off(uint16_t led)
{GPIOA-ODR | led;
}//翻转LED状态
void LED_Toggle(uint16_t led)
{//需要先判断当前LED状态读取IDR对应位if((GPIOA-IDR led) 0){LED_Off(led);}else{LED_On(led);}
}//对一组LED灯全开全关
void LED_OnAll(uint16_t leds[],uint8_t size)
{for (uint8_t i 0; i size; i){LED_On(leds[i]);}}void LED_OffAll(uint16_t leds[],uint8_t size)
{for (uint8_t i 0; i size; i){LED_Off(leds[i]);}
}2编写延迟的代码
在delay.h中
#ifndef __DELAY_H
#define __DELAY_H#include stm32f10x.hvoid Delay_us(uint16_t us);
void Delay_ms(uint16_t ms);
void Delay_s(uint16_t s);#endif在delay.c中
在该方法中使用到了stm32中自带的系统时钟
#include delay.h// 延时函数微秒作为单位利用系统嘀嗒定时器72MHz一次嘀嗒 1/72 us
void Delay_us(uint16_t us)
{//1.装载一个计数器72 * usSysTick-LOAD 72 * us;//2.配置使用系统时钟1计数结束不产生中断0使能定时器1SysTick-CTRL | 0x05;//3.等待计数值变为0判断CTRL标志位COUNTFLAG是否位1while ((SysTick-CTRL SysTick_CTRL_COUNTFLAG) 0){}//4.关闭定时器SysTick-CTRL ~SysTick_CTRL_ENABLE;}void Delay_ms(uint16_t ms)
{while (ms--){Delay_us(1000);}}void Delay_s(uint16_t s)
{while (s--){Delay_ms(1000);}}3主函数编写
#include led.h
#include delay.hint main(void)
{//初始化LEDLED_Init();//定义一个LED数组uint16_t leds[] {LED1,LED2,LED3};//在循环中执行流水灯依次点亮每个灯保持一段时间再关灯while(1){for (uint8_t i 0; i 3; i){LED_On(leds[i]);Delay_ms(500);LED_Off(leds[i]); }}
}