当前位置:文档之家› 利用单片机PWM控制LED

利用单片机PWM控制LED

利用单片机PWM控制LED
利用单片机PWM控制LED

/*******************************************************************/ // PWM 控制LED 灯渐亮渐灭程序

// 晶振为11.0592M

// 利用定时器控制产生占空比可变的PWM 波

// 按K1,PWM值增加,则占空比减小,LED 灯渐暗。

// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

/*********************************************************/

#include < reg51.h >

//#include < intrins.h >

#define uchar unsigned char

uchar PWM

sbit K1 =P1^0 ;

sbit BEEP =P1^5 ;

void Beep();

void delayms(uchar ms);

void delay(uchar t);

/*********************************************************/

void main()

{

P1=0xff;

TMOD=0x21 ;

TH0=0xfc ; //1ms延时常数

TL0=0x66 ; //频率调节

EA=1;

ET0=1;

ET1=1;

TR0=1 ;

while(1)

{

do{

if(PWM!=255)

{

PWM++ ;delayms(10);

}

else Beep() ;

}

while(K1==0);

}

/*********************************************************/ // 定时器0中断服务程序.

/*********************************************************/ void timer0() interrupt 1

{

TR1=0 ;

TH0=0xfc ;

TL0=0x66 ;

TH1=PWM ;

TR1=1 ;

P3=0x00 ; //启动输出

}

/*********************************************************/ // 定时器1中断服务程序

/*********************************************************/ void timer1() interrupt 3

{

TR1=0 ;

P3=0xff ; //结束输出

}

/*********************************************************/ //蜂鸣器子程序

/*********************************************************/

void Beep()

{

uchar i ;

for (i=0 ;i<100 ;i++)

{

delay(100) ;

BEEP=!BEEP ; //Beep取反

}

BEEP=1 ; //关闭蜂鸣器

delayms(100);

}

/*********************************************************/ // 延时子程序

/*********************************************************/ void delay(uchar t)

while(t--) ;

}

/*********************************************************/ // 延时子程序

/*********************************************************/ void delayms(uchar ms)

{

uchar i ;

while(ms--)

{

for(i = 0 ; i < 120 ; i++) ;

}

}

/*********************************************************/

相关主题
文本预览
相关文档 最新文档