“闪”的原因是你刷新数据的速度不够快!
人的视觉残留时间是多少?参考电影的帧速率为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级,且每帧数据只发一次。
如果是要稳定地显示,且祼眼视觉不闪,每帧数据都重复多次。。。
那你的定时器需要更短的时间来响应。。。
其实这方法很有用的,还可以在点阵黑白屏上做出灰度的像素点来。。 |