void timer1_pwm()
{
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11)|(0<<WGM10);
//比较输出模式,快速PWM,比较匹配时清零OC1A/B,OC1A/B在TOP时置位。
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10);
//模式14,快速PWM,计数上限由ICR1确定,1024分频。
ICR1H = 0x00; //计数上限,也即是TOP值,调节PWM频率
ICR1L = 0xFF;
DDRD_Bit5=1;
DDRD_Bit4=1; //OC1A/B管脚设置为输出
OCR1AH=0x00; //OC1A匹配寄存器,调节占空比
OCR1AL=0xef;
OCR1BH=0x00; //OC1B匹配寄存器,调节占空比
OCR1BL=0x0F;
}
对照手册PWM设置很简单,上面的程序是初始化代码,在main函数中,修改OCR1A和OCR1B的值,就可以改变占空比了。在PD4和PD5端口接上发光二极管就可以调节发光二极管的亮度,你也可以接上示波器观察波形。
在力天开发板上,PD4和PD5是控制数码管的选通位,这样我们设置PORTB输出OXFF,然后可以看见一个数码位显示8,亮度从暗到亮,循环变化。图片我就不截取了。