**************************************************/ #include<reg51.h> #defineuInt unsigned int
#define uchar unsigned char ucharPWM_T = 0; //占空比控制變量 //////////////////主程序入口//////////////////////
void main(void)
{
bit flag = 1; //控制燈漸亮漸熄方式
uInt n; TMOD=0x02; //定時(shí)器0,工作模式2,8位定時(shí)模式
TH0=210; //寫入預(yù)置初值(取值1-255,數(shù)越大PWM頻率越高)
TL0=210; //寫入預(yù)置值 (取值1-255,數(shù)越大PWM頻率越高)
TR0=1; //啟動定時(shí)器
ET0=1; //允許定時(shí)器0中斷
EA=1; //允許總中斷 P1=0xff; //初始化P1 while(1)
{
for(n=0;n<600;n++); //延時(shí),將響應(yīng)定時(shí)器中斷,燈會自動加/減一個(gè)檔次的亮度
//取值0-65535,數(shù)字越大變化越慢 if(flag==1) //燈漸亮
PWM_T++;
else //燈漸熄
PWM_T--;
if(PWM_T>=100) //設(shè)置燈亮度級別為10
flag=0; if(PWM_T==0) //限定最低亮度級別為0
flag = 1;
} } ///////////////////定時(shí)器0中斷模擬PWM////////////////////
timer0() interrupt 1 using 2
{
static uchar t ; //PWM計(jì)數(shù) t++; //每次定時(shí)器溢出加1
if(t==100) //PWM周期 {
t=0; //使t=0,開始新的PWM周期
P1=0x00; //使LED燈亮
}
if(PWM_T==t) //按照當(dāng)前占空比切換輸出為高電平
P1=0xff; //使LED燈滅
}
|