嘛,先解釋一下,流星雨就是幾個亮度不同的燈一起滾動,亮度依次更暗,像流星雨拖著尾巴。
控制全彩(三色)led也可以用同樣的概念編程。
硬件用的STC 12C5A60S2,晶振應該是11.0592。
程序上設計的是,使用P1口,低電平點亮,同時亮4個亮度不同的燈。
可以自己更改,P1為I/O口,if(atimer0<5)這里的數字代表每個燈的亮度,定時中里的nn越大,流動越慢。
原理使用PWM,同時調節4個口得占空比,再同時使它們移動。
簡略解釋一下程序。注釋里的2.5ms無意義,最初想用T0運行pwm,后來發現速度不夠,所以T0改成50ms用作流動值的累加。
第一部分設定變量,這個不必說。
第二部分,主函數設定定時器。
第三部分,while循環里的前半段:a b c d是所亮led的序號,這部分程序在對abcd加減的同時防止其超出正常值
第四部分,while循環里的后半段:以分辨率255,判斷每次循環執行時led是否點亮,輸出占空比。
這里使用主函數里的while,pwm頻率為單片機運行這部分的最高速度/255。
第五部分,定時器0中斷,負責:間隔指定的時間后移動流水燈。
流星雨.rar
(922 Bytes, 下載次數: 1042)
2013-10-14 02:06 上傳
點擊文件名下載附件
|