您现在的位置: 主页 > 嵌入式开发入门到精通 > 单片机技术进阶 > PWM --用按键控制 LED 的亮度 -
本文所属标签:
为本文创立个标签吧:

PWM --用按键控制 LED 的亮度 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]
以前写过一篇关于PWM的博文,已经有一年了,链接如下:http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74文中使用了示波器来显示不同占空比的波形。其实,利用LED也能通过亮度来表现出PWM参

以前写过一篇关于PWM的博文,已经有一年了,链接如下:

本文引用地址: http://www.21ic.com/app/mcu/201806/764434.htm


http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74


文中使用了示波器来显示不同占空比的波形。


其实,利用LED也能通过亮度来表现出PWM参数的变化,用实物进行测试,效果很好,但是用PROTEUS进行仿真试验,却只是看到闪烁的厉害,基本上看不出亮度的变化。


近来发现,加上一个大电容,就可以减弱LED的闪烁,亮度就能够稳定一些,这样一来,就可以用PROTEUS软件直接观察亮度的变化了。


电路见下图。图中的大电容(C6)的容量是4700uF,这个是可以随便调整的,实际的电路就不需要它了。

图中的占空比参数是10,LED(D1)的显示为“半亮”状态。




C语言的程序,在去年就发表出来了,可见上面的链接,现在略加改动如下:


#include

unsignedchara,b;

sbitK1=P3^2;//定义两个调整占空比的按键

sbitK2=P3^3;

//------------------------------------------

voiddelay(unsignedinti)

{

unsignedcharj;

while(i--)for(j=0;j<60;j++);

}

//------------------------------------------

voidmain()

{

TMOD=0x01;//T0定时方式1

TH0=(65536-500)/256;//500us@12MHz

TL0=(65536-500)%256;

TR0=1;

ET0=1;

EA=1;


a=0;

b=10;

while(1){

if(!K1){delay(20);if(!K1){b++;if(b>19)b=19;while(!K1);}}

if(!K2){delay(20);if(!K2){b--;if(b<1)b=1;while(!K2);}}

//以上两行是检查按键、延时消抖、修改占空比、等待按键释放,b=1~19


P0=((b/10)<<4)+b%10;//显示占空比等级

}

}

//------------------------------------------

voidtime0()interrupt1

{

TL0=(65536-493)%256;//补偿中断进入时间

TH0=(65536-493)/256;//500us@12MHz

a--;//a=1~20

if(a==0){a=20;P2=0;}//周期=20*500us

if(a<=b)P2=255;//输出到示波器

P1=~P2;//输出到LED,低电平发光

}

//------------------------------------------


这个程序,PWM的周期比去年的短了一些;去年是应网友的要求,设计成1s,有些偏长,不太实用。

这次也不用外部中断来输入按键了,改用查询按键的方法。


当使用按键进行占空比调整的时候,LED可以显示出来不同的亮度。几幅截屏的画面如下:




当PWM参数稍小时,亮度有些不足,这可以适当减小一些限流电阻的阻值进行弥补。


用来显示PWM的LED,其中的电流是间断的,所以,它的限流电阻可以比平常时小一些,100欧左右,是经验数据。


制作实物电路的时候,大电容就不需要了,不用花钱去买了,呵呵




              查看评论 回复



嵌入式交流网主页 > 嵌入式开发入门到精通 > 单片机技术进阶 > PWM --用按键控制 LED 的亮度 -
 

"PWM --用按键控制 LED 的亮度 -"的相关文章

网站地图

围观()