LED PWM調(diào)光C程序
#include
sbit LED1 = P2^0;
sbit LED = P2^1; //定義LED燈,通過(guò)LED顯示調(diào)光效果
sbit LED2 = P2^2;
unsigned char CYCLE; //定義周期 該數(shù)字X基準(zhǔn)定時(shí)時(shí)間 如果是10 則周期是10 x 0.1ms
unsigned char PWM_ON ;//定義高電平時(shí)間
/******************************************************************/
/* 延時(shí)函數(shù)&nbs/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主函數(shù) */
/******************************************************************/
void main()
{
bit Flag;
TMOD |=0x01; //定時(shí)器設(shè)置 0.1ms in 12M crystal
TH0=(65536-100)/256;
TL0=(65536-100)%256; //定時(shí)0.1mS
IE= 0x82; //打開(kāi)中斷
TR0=1;
CYCLE = 50; // 時(shí)間可以調(diào)整 這個(gè)是10調(diào)整 8位PWM就是256步
while(!Flag)
{
delay(20000); //延時(shí)時(shí)間,從一個(gè)亮度到下一個(gè)亮度的間隔時(shí)間,速度快就能看到連續(xù)效果
PWM_ON++; //這個(gè)使用較長(zhǎng)延時(shí),以便能看清楚變化過(guò)程
if(PWM_ON == CYCLE)
{ //這個(gè)里可以添加其他程序 如到最亮?xí)r候控制設(shè)備
Flag=1;
}
}
while(Flag) //亮度遞減 同上,是個(gè)相反的過(guò)程
{
delay(20000); //延遲時(shí)間為20000*0.4=8000us
PWM_ON--;
if(PWM_ON == 0)
{
Flag=0;
}
}
}
/******************************************************************/
/* 定時(shí)器中斷函數(shù) */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256; //定時(shí)0.1mS
if (count==PWM_ON)
{
LED1 = 1;
LED = 1; //燈滅
LED2 = 1;
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果開(kāi)啟時(shí)間是0 保持原來(lái)狀態(tài)
{
LED1 = 0;
LED = 0; //燈亮
LED2 = 0;
}
}
}