**
CC2530实现呼吸灯效果
**
编程实现 PWM 输出驱动 LED , 控制 PWM 电平的宽度,逐渐改变 PWM 的占空比来使得 LED 能够模拟呼吸过程长 —— 由渐暗到渐亮,渐亮到渐暗, 如此反复,利用 LED 余辉和人眼的暂留效应,实现模拟呼吸过程。
我们利用CC2530的定时器1的自由运行模式输出PWM,控制P1.1实现呼吸灯效果。
CC2530定时器1是一个独立的16位定时器,支持定时/计数功能(输入捕获、输出比较和PWM功能),
在自由运行模式下,不用配置定时器1计数器高(T1CNTH)、低(T1CNTL)字节,因为自由运行模式的计数周期是固定值0xffff,当计数器达到最终计数值0xffff时,系统自动设置标志位IRCON.T1IF和·T1STAT.OVFFIF。
PWM调光就是利用在一定的时间下I/O口输出的高电平和低电平的多少即占空比达到调整电压、电流、功率的方法,最终达到调整光亮度。
CC2530外设I/O引脚映射
定时器1一共5个通道它们相互独立,互不影响。
有映射表看出P1_1是定时器1的通道1

{P1SEL &= ~0x1f; //11100000P1DIR |= 0x1b; //00011011LED1=LED2=LED3=LED4=0;
}void InitT1(){T1CTL |= 0x01; //定时器1时钟频率1分频,自动重装0x0000-0xFFFFPERCFG=0x40; //定时器1选择外设位置2P1SEL|=0x02; //P1_0选择外设功能0x01T1CCTL1=0x64; //定时器1通道2向上比较,比较模式T1CC1L=0xff; T1CC1H=h;}void main(void)
{unsigned char a=1; //a=1为渐亮,a=2为渐灭IO_Init();InitT1()
;while(1){if((T1STAT&0x02)>0) {T1STAT=T1STAT&0xfd; //清除中断标志if(a==1) //渐亮h=h+1;else //渐灭h=h-1;T1CC1L=0xff; //重装比较值T1CC1H=h;if(h>=254) //最大亮度a=2; //设为渐灭if(h==0) //最小亮度a=1; //设为渐亮}}
}