专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

51单片机:PWM实现灯渐亮_渐灭,水滴效果

作者:佚名   来源:本站原创   点击数:  更新时间:2012年01月02日   【字体:

/********
脉冲宽度调制(Pulse Width Modulation,简称PWM),是利用微处理器的数字输出来对模拟电路进行控制的一种技术。
可近似的认为PWM就是一种方波。
___|~~~~~~~|____|~~~~~~~~  占空比:高电平在一个周期之内所占的时间比率
单片机控制LED灯发亮的,然后是花样繁多的流水灯,但不管灯的花样如何变化,单个LED的亮度没有变化,只有亮、灭两个状态
但如果P口输出高低不断变化,则LED会闪烁;如果这种高低电平变化非常快,由于人的视觉暂留现象,LED就会出现不同的亮度。。。
当P口输出低电平时,LED亮,输出高低高低构成PWM(用for循环即可取得时间差),PWM的占空比越小越亮
**/

#include<reg52.h> 
 #define uint  unsigned int 
 #define uchar unsigned char
 void delay(uint x) //延时一个1ms
{
 uint a,b;
 for(a=x;a>0;a--)
  for(b=274;b>0;b--);
}
 //------------------------
 #define P //不可写成P0否则会冲突,提示^,=错误
 #ifdef P
 uchar i;
 sbit P01=P1^1;
 sbit P03=P1^3;
 uchar code LightLevel[8]={0,1,2,4,8,16,32,64};   //亮点级别,数组用code
 void LED_PWM(void)
 {
 while(1)
 {
  P1=0xfd;      //第2个灯亮
  delay(2);
  for(i=0;i<=250;i++)
  {
   if(i<10)
   {
    P1=0xf7;   //第4个灯亮
   }
   else 
   {
    P1|=0x0a;
   }
  }
 } 
 }
 #endif
 void main()
 {
  LED_PWM(); 
 }
 
//据此思路即可写出水滴,滴落效果
关闭窗口

相关文章