AT89S52单片机LED仿真电路制作

核心提示ORG?0START:?MOV?R2,#8 MOV?A,#0FEH SETB?CLOOP:?MOV?P1,A LCALL?DELAY RLC?A DJNZ?R2,LOOP MOV?R2,#8LOOP1:?MOV?P1,A LC

ORG?0

START:?MOV?R2,#8

MOV?A,#0FEH

SETB?C

LOOP:?MOV?P1,A

LCALL?DELAY

RLC?A

DJNZ?R2,LOOP

MOV?R2,#8

LOOP1:?MOV?P1,A

LCALL?DELAY?

RRC?A

DJNZ?R2,LOOP1

LJMP?START

DELAY:?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我,我一般晚上都在。

 
友情链接
鄂ICP备19019357号-22