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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务