/********
脈沖寬度調(diào)制(Pulse Width Modulation,簡(jiǎn)稱(chēng)PWM),是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種技術(shù)。
可近似的認(rèn)為PWM就是一種方波。
___|~~~~~~~|____|~~~~~~~~ 占空比:高電平在一個(gè)周期之內(nèi)所占的時(shí)間比率
單片機(jī)控制LED燈發(fā)亮的,然后是花樣繁多的流水燈,但不管燈的花樣如何變化,單個(gè)LED的亮度沒(méi)有變化,只有亮、滅兩個(gè)狀態(tài)
但如果P口輸出高低不斷變化,則LED會(huì)閃爍;如果這種高低電平變化非?欤捎谌说囊曈X(jué)暫留現(xiàn)象,LED就會(huì)出現(xiàn)不同的亮度。。。
當(dāng)P口輸出低電平時(shí),LED亮,輸出高低高低構(gòu)成PWM(用for循環(huán)即可取得時(shí)間差),PWM的占空比越小越亮
**/
#include<reg52.h> #define uint unsigned int #define uchar unsigned char void delay(uint x) //延時(shí)一個(gè)1ms { uint a,b; for(a=x;a>0;a--) for(b=274;b>0;b--); } //------------------------ #define P //不可寫(xiě)成P0否則會(huì)沖突,提示^,=錯(cuò)誤 #ifdef P uchar i; sbit P01=P1^1; sbit P03=P1^3; uchar code LightLevel[8]={0,1,2,4,8,16,32,64}; //亮點(diǎn)級(jí)別,數(shù)組用code void LED_PWM(void) { while(1) { P1=0xfd; //第2個(gè)燈亮 delay(2); for(i=0;i<=250;i++) { if(i<10) { P1=0xf7; //第4個(gè)燈亮 } else { P1|=0x0a; } } } } #endif void main() { LED_PWM(); } //據(jù)此思路即可寫(xiě)出水滴,滴落效果