程序和电路都已经帮你弄好了,功能可以实现,如果觉得对你有用,请选最佳答案。用两个74hc138(三八译码器)一个74hc139(二四译码器)就可以实现,电路如图,成为如下:#include
#include
#define uchar unsigned char
sbit ctrl1=P3^0;
sbit ctrl2=P3^1;
sbit ctrl3=P3^2;
uchar t,i,g;
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器中断0
TR0=1;
t=0;
}
void main()
{
init();
while(1)
{
ctrl1=1;
ctrl2=0;
ctrl3=1;
P2=0X00;
g=P2;
for(i=0;i<8;i++)
{
P2=g;
while(t!=20);
t=0;
g=g+1;
}
ctrl2=1;
ctrl1=0;
g=0x00;
for(i=0;i<8;i++)
{
P2=(g+i<<3)+0x07;
while(t!=20);
t=0;
}
ctrl1=0;
ctrl2=0;
ctrl3=0;
g=0x00;
for(i=0;i<4;i++)
{
P2=(g+i<<6)+0x3f;
while(t!=20);
t=0;
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
同时亮,同时灭可以,流水灯完成不了。
20颗串联的无法流水。
不可能的任务。
………………
把那个IO口设置成串口输出吧