dianzifendou 发表于 2011-8-22 09:29:36

单片机输出的PWM控制灯的亮度

 今天看了看定时器,就练习一下定时器,顺便再把独立键盘也写上了,主要设计的思路是用定时器2定时设置频率在P2.0口输出PWM波调节占空比就可以控制LED有亮度.



   这次用的是AT89S52单片机,下面是俺的小程序:

#include <reg52.h>   

#define uchar unsigned char
#define uint unsigned int

sbit LED10 = P2^0;          //要控制的LED 灯
sbit K1= P3^2;            //按键K1

uchar scale;   //用于保存占空比的输出0 的时间份额,总共10 份

void initial();
/*************************************************/
/*      主程序                                     */
/*************************************************/

void main(void)      
{
      uint n;
   initial();               
      while(1)   
      {       ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作

   if(!K1)      //如果读到K1 为0
                {
                  for(n=0;n<1000;n++); //等待按键稳定
                  while(!K1);   //等待按键松开
                  for(n=0;n<1000;n++);    //等待按键稳定松开

          //for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度
               scale++;
               if(scale==10)scale=0;
   }      
      }
}

/***********************************************/
/*      初始化子程序               */
/***********************************************/

void initial()
{
   RCAP2H =0xF3; //赋T2 的预置值,溢出1 次是1/1200 秒钟
    RCAP2L =0x98;      
    TR2=1;          //启动定时器
    ET2=1;          //打开定时器2 中断
    EA="1";
}

/*************************************************/
/*             1/1200 秒定时器2 中断                     */
/*************************************************/

timer2() interrupt 5   
{
      static uchar tt; //tt 用来保存当前时间在一秒中的比例位置
      TF2=0;

      tt++;
      if(tt==10) //每1/120 秒整开始输出低电平
      {
                tt="0";
                if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影
                LED10=0;   
      }
               
      if(scale==tt)    //按照当前占空比切换输出高电平
      LED10=1;
                        
}


K1键用来控制亮度,每按一次增加一个亮度级别

kezi 发表于 2011-9-20 22:47:10

正想找这样的例程,谢了

solomonlmz1 发表于 2015-2-6 20:38:09

不错,先收藏了

jymt 发表于 2015-2-24 14:01:43

楼主头像创意不错。

chwe1112 发表于 2015-3-13 07:14:05

刚看到,正好现在在学习PWM,不错!{:biggrin:}

颜靖峰 发表于 2015-3-13 23:52:19

又是一个定时器的PWM

mcufan5524 发表于 2015-5-16 22:56:10

很有用,好像51要实现PWM也只能用定时器了

crazydtone 发表于 2015-5-16 23:30:31

最近一个项目准备用到,谢谢LZ分享!

贴片机 发表于 2015-7-28 13:47:12

整个电脑控制亮度的

lanzhe1991 发表于 2015-8-4 11:05:32

谢谢楼主了。{:smile:}

大超134 发表于 2015-8-4 19:20:08

感谢楼主的分享!

kxm2008 发表于 2015-8-4 20:38:09

这个可以有{:lol:}

lxa0 发表于 2015-8-5 19:32:12

很不错
我也试验了一哈~~~~~~~~~~~``

柯铭凯 发表于 2016-4-16 06:59:45

刚好需要,谢啦兄弟
页: [1]
查看完整版本: 单片机输出的PWM控制灯的亮度