專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機(jī):PWM實現(xiàn)燈漸亮_漸滅,水滴效果

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2012年01月02日   【字體:

/********
脈沖寬度調(diào)制(Pulse Width Modulation,簡稱PWM),是利用微處理器的數(shù)字輸出來對模擬電路進(jìn)行控制的一種技術(shù)。
可近似的認(rèn)為PWM就是一種方波。
___|~~~~~~~|____|~~~~~~~~  占空比:高電平在一個周期之內(nèi)所占的時間比率
單片機(jī)控制LED燈發(fā)亮的,然后是花樣繁多的流水燈,但不管燈的花樣如何變化,單個LED的亮度沒有變化,只有亮、滅兩個狀態(tài)
但如果P口輸出高低不斷變化,則LED會閃爍;如果這種高低電平變化非常快,由于人的視覺暫留現(xiàn)象,LED就會出現(xiàn)不同的亮度。。。
當(dāng)P口輸出低電平時,LED亮,輸出高低高低構(gòu)成PWM(用for循環(huán)即可取得時間差),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};   //亮點級別,數(shù)組用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(); 
 }
 
//據(jù)此思路即可寫出水滴,滴落效果
關(guān)閉窗口

相關(guān)文章