杨桃32学习笔记,本文图片文字皆为转述
延时函数介绍
分为delay_s秒,delay_ms毫秒,delay_us微秒延时,最大参数不能超过65535。
呼吸灯原理
当led以点亮和熄灭时间相同的时候,我们看到的led亮度为最高亮度的百分之50。如果把点亮状态延时5us,而熄灭状态延时500us时led的亮度就弱了,接下来调节亮灭占空比来实现呼吸灯。在main.c中输入一下程序并烧录验证,得到预期呼吸灯效果。
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
int main (void){//主程序
//定义需要的变量
u8 MENU; //菜单模式 8位无符号
u16 t,i; //16位无符号
RCC_Configuration(); //时钟设置
LED_Init();//led初始化
MENU=0; //初始菜单状态
t=1; //初始亮状态延时时长
//主循环
while(1){
//菜单0 根据菜单的值不同运行不同的程序
if(MENU==0)
{
for(i=0;i<10;i++)//由于延时时间t从0~500 所以是循环变亮 i的值可以调节呼吸灯变化的速度
{//同一个亮度循环10次
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));//LED1接口输出高电平1
delay_us(t);
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));//LED1接口输出高电平1
delay_us(501-t); //通过将501换成更大的值可以将亮度细分为更多的等级
}
t++;
if(t==500){//由亮变暗
MENU=1;
}
}
//菜单1
if(MENU==1)
{
for(i=0;i<10;i++)//由于延时时间t从500~0 所以是循环变暗
{
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));//LED1接口输出高电平1
delay_us(t);
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));//LED1接口输出高电平1
delay_us(501-t);
}
t--;
if(t==1){
MENU=0;
}
}
}
}