单片机输出PWM波

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机输出PWM波

//*******************函数声明,变量定义******************* #include

#include

#define uchar unsigned char

#define uint unsigned int

//端口定义

sfr p0=0x80;

sfr p1=0x90;

sfr p2=0xa0;

sfr p3=0xb0;

//键

sbit add_speed=P1^0;

sbit sub_speed=P1^1;

//PWM控速

uint time_PWM=0; //PWM时间计数

uint high_PWM=0; //PWM高电平时间

uint t_PWM=16; //PWM周期

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

void delayms(unsigned char ms)

{

unsigned char i ;

while(ms--)

{

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

}

}

//*******************键盘扫描程序*******************

void key_change()

{

if(add_speed==0)

{

delayms(10);

if(add_speed==0)

{

if(high_PWM < 16)

{

high_PWM++;

} } }

if(sub_speed==0)

{

delayms(10);

if(sub_speed==0)

{

if(high_PWM > 0)

{

high_PWM--;

} } } }

//*******************中断程序******************* //PWM波生成,T0中断

void PWM_T0(void) interrupt 1

{

TH0=0Xd8;

TL0=0Xf0;

time_PWM++;

if(time_PWM < high_PWM)

{

p2=0xff;

}

if(time_PWM==high_PWM)

{

p2=0x00;

}

else if(time_PWM==t_PWM)

{ p2=0xff;

time_PWM=0;

} }

//*******************主程序******************* void main()

{p0=0xff;

p1=0Xff;

p2=0xff;

p3=0xff;

TH0=0xd8; //定时10us

TL0=0xf0;

TMOD=0x01;

EA=1;

ET0=1;

TR0=1;

while(1)

{ key_change();

}}

相关文档
最新文档