“閃”的原因是你刷新數據的速度不夠快!
人的視覺殘留時間是多少?參考電影的幀速率為24-30幀/秒,就能算出來約33~41ms,
即最多41ms,最少33ms,你就要發一次數據(暫不管1638自掃時間)。
再來看你的總占空比的多少,即多少級亮度,如果是8級,就要8等分這幀時間了:
假設某位對應某LED,置“1”為亮,置“0”為滅,當設為1級亮度時,發“1”的數據1次,發“0”的數據7次。。。
所以41/8或33/8,最多5ms,最少4ms你就得發一幀數據,且不被中斷、周而復始。。
那么,你用main中的while(1)顯然是不夠的,你要開一個優先級最高的定時器,固定4ms發一次數據。
而在main中的while(1)中不停地更新要發送的數據,所以,你的51MCU會很忙!
注意,這才8級,且每幀數據只發一次。
如果是要穩定地顯示,且祼眼視覺不閃,每幀數據都重復多次。。。
那你的定時器需要更短的時間來響應。。。
其實這方法很有用的,還可以在點陣黑白屏上做出灰度的像素點來。。 |