主函数如下:
#include "system.h"
#include "SysTick.h"
#include "led.h"
int main()
{
u32 i=1;
SysTick_Init(72);
LED_Init();
while(1)
{
if(i<1400)
{
for(i=1;i<1400;i+=2) //i/3000的值为LED的亮度
{
LED1=0;
delay_us(i);
LED1=1;
delay_us(3000);
}
}
else
{
for(i=1200;i>1;i-=2) //i/3200的值为LED的亮度
{ //此比例呼吸灯的效果较明显。
LED1=0;
delay_us(i);
LED1=1;
delay_us(3200);
}
}
}
}
SysTick.c:
#include "SysTick.h"
static u8 fac_us=0;
static u16 fac_ms=0;
void SysTick_Init(u8 SYSCLK)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us;
SysTick->VAL=0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;
SysTick->VAL =0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
SysTick.h:
#ifndef _SysTick_H
#define _SysTick_H
#include "system.h"
void SysTick_Init(u8 SYSCLK);
void delay_ms(u16 nms);
void delay_us(u32 nus);
#endif