跪求大型流水灯的制作方法
各位老师:
我准备做一个大约20米长、200个红色发光二极管组成的流水灯(按一定的速度流水点亮),用89C51单片机怎么做呀?有C程序的源码吗?急用!!谢谢!
[解决办法]
一个51单片机一般有4组8位I/O,用矩阵排列线路,再用数码管的刷屏方式输出,16*16=256个,也就是说一个单片机用矩阵刷屏法可以控制256个LED。当然,如果你的不是LED,比如是那种光管,器件的点亮与熄灭速度没那么快,那就不能用这种矩阵刷屏法工作。
对于这种情况,有两种方案,第一种是扩展I/O口,以二进制方式输出信号,当符合8位或16位之后,目标I/O整体变化输出。第二种就是多弄几个单片机,然后分为主控和被控,单片机之间可用串口或SPI方式通讯,按照具体自己定义的规则工作。
其实在控制或程序上,无论那种方式都不算难,但考虑到功率和器件特性,可能就要有针对性的处理,比如LED,就用达林顿管用共阴的方式就很好解决,但如果是别的东西,可能要用到MOS管或专门的驱动模块来控制,电压电流的不同,器件的选型控制都不同,对于弱电控制上,51单片机是比较合适的,但对于非通信运用的控制领域,PLC 相对来说用的人比较多。所以,做一个硬件项目,很多细节上的不同,采用的方案可能截然不同,这点上硬件与软件是有天壤之别的。
[解决办法]
1、用一个单片机,一位输出口,软件实现串行输出,再有几位控制用(比如锁存信号、移位信号等)所以
C2051就够了
2、分配一块儿存储区,把亮灯模式(待循环输出数据DN)存进去。比如:每间隔7个灯亮一个,D=00000001B
间隔四个灯亮一个 D=00010001B,每隔15个灯亮一个 D1=00000000B D2=00000001B 以此类推。
3、编一个软件定时,通过改变定时数控制灯的流速。
4、硬件支持:做一个200位的移位寄存器(8位的链接起来,要带所存的),驱动LED灯。
注:只靠单片机,没有任何硬件支持,恐怕不太好办。
把亮灯模式DN循环串出就可以了。用汇编就行了,不必C.细节问题就不赘述了。
不一定对,供参考。
[解决办法]
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,num,num1;
sbit beep=P2^3;
void delay(uint);
void main()
{
temp=0xfe;
while(1)
{
for(num1=0;num1<3;num1++)
{
for(num=0;num<8;num++)
{
P1=temp;
beep=0;
delay(100);
temp=_crol_(temp,1);
P1=0xff;
beep=1;
delay(100);
}
}
for(num1=0;num1<3;num1++)
{
for(num=0;num<8;num++)
{
P1=temp;
beep=0;
delay(100);
temp=_cror_(temp,1);
P1=0xff;
beep=1;
delay(100);
}
}
while(1);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}