一、實驗原理
我們在做呼吸燈的時候,我們首先得了解呼吸燈的原理,我們得知道我們電壓做的功,我們首先看張圖
這張圖是自己手工畫的,有點不夠規范,就像第一個信號一樣,間隔大概一樣,有點高數知識的師兄都知道連續的,那么他的積分就是他所做的功,也可以這樣理解,我們做得功就等于(W=UIt),所以我們還是積分比較好理解,當我們LED的引腳是高電平時,我們觀察的亮度是最亮的,這是因為做的功是全部,這時候我們可以比較這兩條線,上面的線比較平均,大概就是50%左右的樣子,我們行容這種東西叫做占空比用q表示,q=高電平時間/周期時間(高電平時間指的是一個周期里面的)相對于下面這條,一開始我們我們看到高電平時間比較短,占空比比較小,(在這里說明一下,我用的單片機是3.3v——0v就是說單片機低電平“0”是點亮)所以這個實驗現象是慢慢的變暗,因為做的功多,占空比比較大,如果占空比達到了100%,單片機的LED則會熄滅/。
二、代碼思路
我們在了解PWM的工作原理,我們可以簡單的做一個呼吸燈,我們首先得定義一個周期,然后調節占空比就能達到我們想要的結果,我們可以用延時函數(delay)和for循環來達目的。
三、實驗源碼
四、我們但可以用延時函數,還可以用定時器來設置占空比,時間控制的更合理,難度高的PWM還是用定時器比較好。。寫的不太好,如果有錯誤,請批評,大家多交流。
單片機源程序如下:- /***************************************************************************************************
- 筆者自己用的是普中的單片機,因為LED引腳在P2上面,個人需要根據自己說的單片機自己設定,經自己測試,當周期是400時候
- 亮度剛好,單片機的晶振用的12MHz
- ***************************************************************************************************/
- #include "reg52.h"
- sbit LED=P2^2;
- /****************************************
- 函數名稱:void delay(unsigned int n)
- 函數功能:延時函數
- 輸入參數:n
- 輸出參數:無
- ****************************************/
- void delay(unsigned int n)
- {
- while(n--);
- }
- void main()
- {
- unsigned int CYCLE=400,LOW=0;
- while(1)
- {
- delay(5000);//延時一下
- for(LOW=1;LOW<CYCLE;LOW++)//從滅到亮
- { LED=0;
- delay(LOW);
- LED=1;
- delay(CYCLE-LOW);
- }
- //從亮到滅
- for(LOW=CYCLE-1;LOW>0;LOW--)
- { LED=0;
- delay(LOW);
- LED=1;
- delay(CYCLE-LOW);
- }
- }
- }
復制代碼
附上源碼hex:
LED.zip
(22.52 KB, 下載次數: 30)
2020-11-2 21:37 上傳
點擊文件名下載附件
|