单片机汇编程序:有八个小灯,要求依次点亮,时间间隔1s

用80C51单片机的汇编程序做,谢谢了

/* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。
* 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。
*/
/* 程序详细功能介绍:
*做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,
*输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。
*/
ORG 0000H
LJMP START
ORG 0030H
START:
MOV R2,#8 ;左移次数
MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮
SETB C
LOOP: MOV P0,A
LCALL DELAY
RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动
DJNZ R2,LOOP

MOV R2,#8 ;右移次数
LOOP1: RRC A ;右移流水灯
MOV P0,A
LCALL DELAY
DJNZ R2,LOOP1
LJMP START

DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-26
这个是简单的:
org 000
main:
mov p1,#11111111b
lcall t1S ;灭1秒
mov p1,#01111111b
lcall t1S
mov p1,#00111111b
lcall t1S
mov p1,#00011111b
lcall t1S
mov p1,#00001111b
lcall t1S
mov p1,#00000111b
lcall t1S
mov p1,#00000011b
lcall t1S
mov p1,#00000001b
lcall t1S
mov p1,#00000000b
lcall t1S
ljmp main
t1s:
mov r2,#10 ;1秒
mov r1,#195
loop1:
djnz r0,$
djnz r1,loop1
djnz r2,loop1
RET

end
第2个回答  2009-12-27
最好先明确一下: 8只都点亮后,就静止了吗?