用51单片机控制八个发光二极管,从左到右轮流点亮,并循环

如题所述

ORG 0000H

 AJMP MAIN

 ORG 0003H

 

MAIN: MOV P1,#0FFH

 LCALL DELAY

 MOV R1,#0

 MOV DPTR,#TAB

MAIN1: MOV A,R1

 MOVC A,@A+DPTR

 MOV P1,A

 LCALL DELAY

 INC R1

 CJNE R1,#8,MAIN1

 AJMP MAIN

      

DELAY:  MOV R4,#08H

DL01: MOV R3,#74H

DL00:   MOV R2,#0D6H

     DJNZ R2,$

     DJNZ R3,DL00

     DJNZ R4,DL01

     NOP

     RET

TAB: DB 11111110B

 DB 11111100B

 DB 11111000B

 DB 11110000B

 DB 11100000B

 DB 11000000B

 DB 10000000B

 DB 00000000B

 

 END

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-06
#include<reg51.h>
#include <intrins.h>
unsigned char temp;
void delay(unsigned int );
void main()
{
temp=0xfe;
P1=temp;

while(1)
{
temp=_crol_(temp,1);//循环左移函数
delay(600);
P1=temp;
}
}

void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}本回答被提问者采纳
第2个回答  2020-01-01
mov
a,#01h;初值
shift:
mov
p1,a;点亮
lcall
delay;延时

mov
p1,#00h;熄灭
rl
a;左移

lcall
shift;循环
delay:
mov
r1,#0fah;延时子程序
loop0: mov
r0,#0c7h;
loop1:
djnz
r0,loop1

djnz
r1,loop0

ret
第3个回答  2019-08-02
ORG 0000H
AJMP MAIN
ORG 0003H

MAIN: MOV P1,#0FFH
LCALL DELAY
MOV R1,#0
MOV DPTR,#TAB
MAIN1: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
INC R1
CJNE R1,#8,MAIN1
AJMP MAIN

DELAY: MOV R4,#08H
DL01: MOV R3,#74H
DL00: MOV R2,#0D6H
DJNZ R2,$
DJNZ R3,DL00
DJNZ R4,DL01
NOP
RET
TAB: DB 11111110B
DB 11111100B
DB 11111000B
DB 11110000B
DB 11100000B
DB 11000000B
DB 10000000B
DB 00000000B

END
第4个回答  2010-05-18
mov a,#01h
loop:
mov p1,a
rl a
call delay;延时
jmp loop
delay:
。。。
ret
end
相似回答