于我们可以按我们的要求,改变数组中的数据来驱动端口上的LED,达到我们预期的显示效果。这可以说是流水灯的万能程序。这样我们迈出了第一步。
再来看如何产生需要的图案。
现在我们让LED显示数字12为例,我们先作一个表。
0 1 0 0 1 1 1 1 低四位 1 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
0 1 0 0 0 1 0 0 高四位 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 0 1 1 1 1
从下到上将每列看成是一个16进制数,我得到8个16进制数 10000010=0x82 11111111=0xff 10000000=0x80 00000000=0x00 11100011=0xe3 10010001=0x91 10001001=0x89 10000111=0x87
这样我们得到了我们想要的一组扫描码{0x82,0xff,0x80,0x00,0xe3,0x91,0x89,0x87}
将前一程序的数组数据改成我们得到的扫描码,我们得到新的C51程序 #include
code unsigned char led[]={0x82,0xff,0x80,0x00,0xe3,0x91,0x89,0x87}; void main(void) {
unsigned int i,j; while(1) {
for(j=0;j<8;j++){ P0=~led[j];
for(i=600;i>0;i--); }
for(i=8000;i>0;i--); for(i=8000;i>0;i--); } }
编译下载后,将运行进的电路板来回晃晃看……,哈,“12”已隐约出现在眼前。
哈哈,是不是成功离我们已经不远了。
最后是发挥部分。接着要做的事就是解决如何让这些LED运动,如何检测运行时的开始和结束,如何给运动着的系统供电,如何控制运动着的系统….等等。不同的解决方案造就各具特色的LED旋转屏。
用上面的办法对一些简单图案还能行,当遇到LED个数多或图文复杂时,用这样直接取码的工作量就会很大,这就需要专门软件,根据显示的字符和图案自动生成扫描码。好在网上有不少这类软件可免费下载,免去了手工取码之苦。 临渊羡鱼,不如退而结网,动手做一个真正属于自己的旋转LED显示并不难。
用硬盘音圈电机DIY摇摆显示钟(附详细资料) 2008-02-29 00:08
看到市场上正在流行的时尚商品——摇摆LED时钟,感觉非常新颖独特,正在玩单片机的我,激起了自己也想DIY一个的冲动。不就是一个流水灯吗?有什么难的?! 于是,一个单片机项目就这样开始了。
然而动手以后才知道问题并非想象那样简单,有许许多问题在制作中一一出现,经过十多天的制作、修改与调试,作品才告完成,基本达到预先要求。
一. 设计思路
本制作是根据视觉暂留原理, 让一排8只LED运动, 在空中呈现数字来表示时钟。由于其实质就是一个摆动的流水灯,特别适合初入门的单片机爱好者动手制作。
整个屏可显示七个字符,平时作时钟只用其中的五个字符。
显示分 “正常运行”、“调分”和“调时” 三种状态。正常运行时中间的“:”符每一秒闪现一次,调分和调时时,则为调整的项闪现。
设置三个调整按键,一个为“状态键”,一个为“加法键”,一个为“减法键”。
完成图(见图1、图2)
图1
图2
效果图(见图3)
图3
二. 硬件结构
主板的结构布局见图4。