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