51单片机脉冲宽度调制(PWM)控制LED灯亮度

来源:本站
导读:目前正在解读《51单片机脉冲宽度调制(PWM)控制LED灯亮度》的相关信息,《51单片机脉冲宽度调制(PWM)控制LED灯亮度》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机脉冲宽度调制(PWM)控制LED灯亮度》的详细说明。
简介:介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。

 /*程序中使用定时器0产生2.5ms周期脉冲,使用占空比控制变量scale控制占空比,在低电平期间使LED灯亮,在高电平期间使LED灯灭,改变scale就改变了高电平与低电平的时间,因此也就控制了LED灯的亮度。*/#include "AT89X51.H"  //模拟PWM输出控制灯的10个亮度级unsigned int scale;   //占空比控制变量void main(void)       // 主程序{ unsigned int n;    //延时循环变量TMOD=0x02;  //定时器0,工作模式2(0000,0010),8位定时模式TH0=0x06;   //写入预置初值6到定时器0,使250微秒溢出一次(12MHz)TL0=0x06;   //写入预置值TR0=1;    //启动定时器ET0=1;    //允许定时器0中断EA=1;     //允许总中断while(1)   //无限循环,实际应用中,这里是做主要工作{ for(n=0;n<50000;n++);  //每过一段时间,就自动加一个档次的亮度scale++;    //占空比控制变量scale加1if(scale==10)  scale=0;  //如果scale=10,使scale为0} }timer0() interrupt 1    //定时器0中断服务程序{ static  unsigned int   tt ;   //tt用来保存当前时间在一秒中的比例位置tt++;    //每250微秒增加1if(tt==10)   //2.5毫秒的时钟周期{ tt=0;  //使tt=0,开始新的PWM周期P2_0=0;  //使LED灯亮}if(scale==tt)  //按照当前占空比切换输出为高电平P2_0=1;        //使LED灯灭} /*程序中从tt=0开始到scale为低电平,从scale开始到tt=10为高电平,由于scale是变量,所以改变scale就可以改变占空比。*/

提醒:《51单片机脉冲宽度调制(PWM)控制LED灯亮度》最后刷新时间 2024-03-14 01:00:02,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机脉冲宽度调制(PWM)控制LED灯亮度》该内容的真实性请自行鉴别。