ORG?0
START:?MOV?R2,#8

LOOP:?MOV?P1,A
LCALL?DELAY RLC?A DJNZ?R2,LOOP MOV?R2,#8LOOP1:?MOV?P1,A
LCALL?DELAY? RRC?A DJNZ?R2,LOOP1 LJMP?STARTDELAY:?MOV?R5,#20?;
D1:?MOV?R6,#20
D2:?MOV?R7,#248
DJNZ?R7,$ DJNZ?R6,D2 DJNZ?R5,D1 RET下面是C语言程序
#include?<reg51.H>
unsigned?char?i;
unsigned?char?temp;
unsigned?char?a,b;
void?delay(void)
{
unsigned?char?m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)

for(s=248;s>0;s--);
}
void?main(void)
{
while(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}
我看了你写的,感到秋收的关键问题是不理解8×8点阵LED?驱动电路是如何工作的。
这个8×8点阵LED?驱动电路是“行”和“列”的扫描方式工作的,这64个发光管,在每个瞬间只有一个亮。我画了一个简图,图中,红色的仅在1高,A低时工作,同样绿色的仅在2高,D低时工作,**的仅在6高,E低时工作,不是同时都亮。

只要64个发光管在1/25秒内扫描一次(或是说整个64只管子,每秒扫描35次以上)视觉上是看不出是扫描的。
行和列的扫描频率是1比8,这样就能有序的工作了。
你的R1,R2电阻也好确定了,你只要按一个发光管的工作来考虑。这里也用不上什么3态,你将OE接0电平就行了。
好好想想吧,搞不清可以HI我,我一般晚上都在。


