1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 单片机产生可调方波(c语言) 单片机产生占空比可调方波(PWM)

单片机产生可调方波(c语言) 单片机产生占空比可调方波(PWM)

时间:2023-11-30 16:27:27

相关推荐

单片机产生可调方波(c语言) 单片机产生占空比可调方波(PWM)

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

程序名称: 发光二极管D1进行亮度控制

版本: VER1.0

适用板本: 51hei学习板

利用定时器控制产生占空比可变的PWM波对发光二极管D1进行亮度控制

按S2,PWM值增加,则占空比减小,D1灯变亮。

按S3,PWM值减小,则占空比增加,D1灯变暗。

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

*****************************************************************/本文引用地址:/article/12/324604.htm

#include#includesbit S2 =P3^4 ; //PWM值减少键

sbit S3 =P3^5 ; //PWM值增加键

sbit BEEP =P2^3 ; //蜂鸣器

unsigned char PWM=0x03 ; //赋初值

///

void Beep();

void delayms(unsigned char ms);

void delay(unsigned char t);

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

void main()

{

P1=0xff;

TMOD=0x00 ;

TH0=0x00 ; //延时常数

TL0=0x00 ; //频率调节

TH1=PWM ; //脉宽调节

TL1=0xff ;

EA=1;

ET0=1;

ET1=1;

TR0=1 ;

while(1)

{

do{

if(PWM!=0xff)

{PWM++ ;delayms(10);}

else Beep() ;

}

while(S3==0);

do{

if(PWM!=0x02)

{PWM-- ;delayms(10);}

else Beep() ;

}

while(S2==0);

}

}

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

// 定时器0中断服务程序 (频率)

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

void timer0() interrupt 1

{

TR1=0 ;

TH0=0x00;

TL0=0x00 ;

TH1=PWM ;

TR1=1 ;

P1=0xfe ; //启动输出

}

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

// 定时器1中断服务程序 (脉宽)

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

void timer1() interrupt 3

{

TR1=0 ;

P1=0xff ; //结束输出

}

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

//蜂鸣器子程序

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

void Beep()

{

unsigned char i ;

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

{

delay(100) ;

BEEP=!BEEP ; //Beep取反

}

BEEP=1 ; //关闭蜂鸣器

delayms(100);

}

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

// 延时子程序

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

void delay(unsigned char t)

{

while(t--) ;

}

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

// 延时子程序

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

void delayms(unsigned char ms)

{

unsigned char i ;

while(ms--)

{

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

}

}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。