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

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


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


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


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


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


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

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


PWM --用按键控制 LED 的亮度 - 非著名博主 - 电子信息角落



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


#include<reg52.h>

unsigned char a, b;

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

sbit K2 = P3^3;

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

void  delay(unsigned int i)

{

    unsigned char j;

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

}

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

void main()

{

    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; //显示占空比等级

    }

}

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

void time0() interrupt 1

{

    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 --用按键控制 LED 的亮度 - 非著名博主 - 电子信息角落


PWM --用按键控制 LED 的亮度 - 非著名博主 - 电子信息角落


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


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


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


  • 17
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
按键PWM控制LED亮度是一种常见的电路应用,通过调节PWM信号的占空比来实现LED亮度控制。在Cubemx程序中,我们可以通过以下步骤来实现这种控制方式。 步骤一:在Cubemx中选择合适的MCU型号,并添加按钮和LED组件。这里我们假设使用的是STM32F103C8T6 Microcontroller,需要添加一个GPIO Input和GPIO Output组件。 步骤二:为按钮和LED组件分配相应的引脚。这里我们将按钮分配到PA0引脚,LED分配到PB0引脚,具体分配方式可以通过Cubemx的GPIO配置界面实现。 步骤三:设置PWM通道。在Cubemx的RCC配置中找到TIM4定时器,并使能其时钟。然后,转到TIM4的PWM输出配置对话框,并将它与PB0引脚关联。接下来,选择一个合适的预分频值和计数周期,并将PWM输出模式设置为PWM模式1。最后,启用PWM输出通道2的DMA操作。 步骤四:编写代码。通过Cubemx代码生成器,我们可以得到一个基础代码框架。在这个框架中,我们可以添加按键中断服务函数,并在其中编写PWM控制代码。在按键中断服务函数中,我们可以通过读取PA0引脚的状态来确定PWM占空比的大小,然后利用TIM4的PWM输出通道2来控制LED亮度。 综上所述,按键PWM控制LED亮度的程序Cubemx的实现步骤包括:选择MCU型号和添加按钮和LED组件、分配引脚、设置PWM通道和编写代码。通过这些步骤的实现,我们可以很轻松地实现这种亮度控制方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值