您好,欢迎来到客趣旅游网。
搜索
您的当前位置:首页Pwm波形发生器

Pwm波形发生器

来源:客趣旅游网


Pwm波形发生器

仿真效果图

源程序

#include

//#define LED P1^0

sbit LED = P1^0; //定义LED接口

#define uchar unsigned char

#define uint unsigned int

#define LED_ON() LED = 0x00 ; //所有LED亮

#define LED_OFF() LED = 0xff ; //所有LED熄灭

uchar TimeCounter = 0 ; //中断计数

bit LedDirection = 0 ; //LED方向控制 0:渐亮char LedPWMCounter = 0 ; //LED占空比

char PWMCounter = 0 ; //占空比

void Timer0Init(void) //定时器初始化

{

TMOD=0x01; //定时器0工作方式1

TH0=0xff ; //定时器初始值(200us中断一次)

TL0=0x4f ;

EA=1;

:渐灭

1

ET0=1;

TR0=1;

}

void main()

{

Timer0Init();

while(1);

}

void Time0Isr(void) interrupt 1

{

static uint PWMCounter = 0 ; //声明静态变量的只能被初始化一次

TH0=0xff ; //定时器重新赋初值

TL0=0x47 ;

TimeCounter++;

if(TimeCounter > 100) //每20MS调整一下LED的占空比

{

TimeCounter = 0 ;

//如果是渐亮方向变化,则占空比递增

if((LedPWMCounter<=99) &&(0==LedDirection))

{

LedPWMCounter++ ;

if(LedPWMCounter>99)

{

LedDirection=1;

LedPWMCounter=99 ;

}

}

//如果是渐暗方向变化,则占空比递减

if((LedPWMCounter>=0)&&(1==LedDirection))

{

LedPWMCounter-- ;

if(LedPWMCounter<0)

{

LedDirection=0;

LedPWMCounter=0;

}

}

PWMCounter=LedPWMCounter ; }

//获取LED的占空比

if(PWMCounter>0) //占空比大于0,则点亮LED,否则熄灭LED

{

LED_ON() ;

PWMCounter-- ;

}

else

{

LED_OFF();

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务