单片机(STC12C5A60S2)内部PWM实现呼吸灯
上个文章写了用单片机的两个定时器给大家实现了呼吸灯,其实上个文章是在为大家解析PWM的原理,今天我们将使用单片机内部自带的PWM来进行呼吸灯设计,自己可以查看该单片机型号的中文资料。所看章节如下:
直接上代码吧,大家可以查看代码,如果不明白的可以给我留言,^_^。
#include <stc12c5a60s2.h>
unsigned char dy[15]={16,32,48,64,80,96,112,128,144,160,176,192,208,224,240}; // CCAP0H值的分配,为了实现不同的占空比
void modify_duty();
void Init_PWM();
void delay();
void main()
{
Init_PWM();
while(1)
{
modify_duty();
}
}
void Init_PWM() // PWM功能的初始化
{
CMOD = 0X02; // 设置脉冲源
CCAPM0 = 0X42; // 开启比较器,允许输出脉宽调制信号
PCA_PWM0 = 0X00; // 组成9位比较器,可以设置成1,也可以设置成0
CCAP0L = 0x80; // 比较器中的初值
CCAP0H = 0X80; // 比较器初值重装
CL=0; // 装载值为0
CR =1; // 启动计数模式
}
void modify_duty()
{
int i;
for(i=0;i<15;i++)
{
CCAP0H = dy[i];
delay();
}
for(i=13;i>=1;i--)
{
CCAP0H = dy[i];
delay();
}
}
void delay()
{
int i,j;
for(i=0;i<200;i++)
{
for(j=0;j<200;j++);
}
}
可以看结果了: