嘛,先解释一下,流星雨就是几个亮度不同的灯一起滚动,亮度依次更暗,像流星雨拖着尾巴。
控制全彩(三色)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, 下载次数: 1040)
|