![]() |
發布時間: 2019-5-10 18:31
正文摘要:網上找的一個程序,想請教大佬們,這段代碼是怎么實現PWM的?X1為低電平時間,X2為高電平時間,LED置0時點亮,置1時熄滅。這段代碼邏輯是啥?到底能不能實現PWM,連占空比都看不出來是多少,很急,謝謝大家。 |
搞個2812燈帶玩一玩,可以任意顏色和亮度。 |
PWM是一種方波脈沖串,占空比可調,占空比是開和關持續時間的比值。 該代碼分別控制開啟和關閉持續時間 X1 和 X2。 循環時間/計數為 1000。 |
進來學習的,可惜代碼不全。 |
占空比=X1/1000.總時間是1000個時間量,低電平時X1個時間量,高電平是1000-X1個時間量,改變X1就是改變占空比,實現亮與暗的時間比例變化,由于時間短,看到的是光的總亮度變化。 |
m182892 發表于 2019-5-11 08:26 問題是樓主位代碼算X2的值算錯了。 |
看到你這個代碼 讓我想到的是呼吸燈的代碼,從滅到亮 逐漸變化的 |
PWM周期是1000,首先是燈亮,等待X1低電平時間到,轉為燈滅,持續X2時間,高電平占空比為X2/1000 |
占空比=X1/1000.總時間是1000個時間量,低電平時X1個時間量,高電平是1000-X1個時間量,改變X1就是改變占空比,實現亮與暗的時間比例變化,由于時間短,看到的是光的總亮度變化。 |
你的截圖代碼不完整,沒辦法解釋, 而且X2本來就有問題,117-120行已經表明X1永遠都是等于0后才往下執行,那么X2=1000-X1;這個就是多余的,123行的X2永遠都是從1000開始減, 這個程序如果不給出完整的代碼只能認為是錯誤的 |
本帖最后由 ccl09 于 2019-5-11 13:38 編輯 while(x1!=0){},等待 x1*指令周期 的時間 ,x1<1000, while(x2!=0){},等待 x2*指令周期 的時間,占空比x2/1000. |