///////////////////////////////////////////////////////////
//呼吸灯演示程序(PWM脉宽调制模型)
///////////////////////////////////////////////////////////
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint cycle=500; //PWM周期
uint pwm=0; //高电平持续时间
sbit led=P1^0; //LED端口
sbit sw=P2^5; //74HC573锁存端口
void delay(uint t)
{
unsigned int i;
for(i=0;i<t;i++); //之前演示时灯闪烁的原因是此处延时太大
}
void pwm_demo(void)
{
sw=1; //数据不锁存
led=1;
delay(60000);
for(pwm=1;pwm<cycle;pwm++)//在这个循环里pwm的值逐渐升高(pwm的值代表高电平持续时间),占空比增大,灯由暗变亮。
{
led=0;
delay(pwm);
led=1;
delay(cycle-pwm);
}
led=0;
delay(60000);
for(pwm=cycle-1;pwm>0;pwm--)//在这个循环里pwm的值逐渐减小(pwm的值代表高电平持续时间),占空比减小,灯由亮变暗。
{
led=0;
delay(pwm);
led=1;
delay(cycle-pwm);
}
}
|