急求 用AT89S52单片机设计一个可以控制8个发光二级管,要流水灯的效果。谢谢

如题所述

第1个回答  2014-06-27
这个简单。
单片机最小系统,用其中一个IO,用共阳接法,串1K 欧姆限流电阻。
以上是电路做法。

程序方面,汇编用移位指令即可达到流水效果,但需写个延时。

这个是单片机最简单的应用了。追问

谢谢 我要汇编程序 不是C程序。
您能帮我再改改么?

追答

确认下,你的硬件部分好了么? 发光二极管接的哪个IO口。
我先发你个跑灯例程给你参考。

ORG 0000H
AJMP main
ORG 0030H
MAIN: LCALL INITAL ;初始化IO
mov P0,#80h
MOV A,P0
LOOP:
RL A
MOV P0,A
lcall dealy
ajmp LOOP

INITAL: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
RET
DELAY: MOV R5,#40 ;延时。
D1: MOV R6,#40
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END

第2个回答  2014-06-27
/* 名称:从左到右的流水灯
说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//延时
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
void main()
{
P0=0xfe;
while(1)
{
P0=_crol_(P0,1); //P0的值向左循环移动
DelayMS(150);
}
}追问

谢谢 我要汇编程序 不是C程序。
您能帮我再改改么?

追答

main:
MOV A,#0
lcall delay
MOV R4,#08H
LOOP:mov p1,A
lcall delay
RL A
INC A
DJNZ R4,LOOP
ljmp main
delay:
mov r1,#10
d3:mov r2,#100
d2:mov r3,#250
d1:djnz r3,d1
djnz r2,d2
djnz r1,d3
ret
end