/********
脈沖寬度調制(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();
}
//據此思路即可寫出水滴,滴落效果
