单片机跑马灯!
发布网友
发布时间:2022-04-20 05:53
我来回答
共2个回答
热心网友
时间:2022-07-13 05:57
ORG
0000H
;开机上电主程序入口
AJMP
START
;系统一进来就转到主程序
ORG
0030H
;主程序地址
START:
MOV
A,
#0FFH
;主程序开始,A中初始化成全1
CLR
C
;c清零
MOV
R2,
#08H
;R2左转循环计数器
LOOP:
RLC
A
<<C+A+C<<带进位循环左移,A中的内容在8此循环中从0位到7位依次变0
MOV
P2,
A
;送到P2,使P2从0位到7位依次点亮LED
CALL
DELAY
;单片机运行很快,为了能看到灯的变化,必须延迟,把速度降下来
DJNZ
R2,
LOOP
;R2每次减1后判断是否=0,8次后=0程序才会下行,否则会跳回LOOP
MOV
R2,#07H
;R2右转循环计数器
LOOP1:
RRC
A
>>C+A+C>>带进位循环右移,A中的内容在8此循环中从7位到0位依次变0
MOV
P2,
A
;送到P2,使P2从7位到0位依次点亮LED
CALL
DELAY
;和上个循环一样,延时
DJNZ
R2,
LOOP1
;R2每次减1后判断是否=0,7次后=0程序才会下行,否则会跳回LOOP1
JMP
START
;跳回程序起始位置重复下一个循环
DELAY:
MOV
R3,
#20;延时子程序,这个应该不用解释了吧
D1:
MOV
R4,
#200
D2:
MOV
R5,
#248
DJNZ
R5,
$
DJNZ
R4,
D2
RET
END
热心网友
时间:2022-07-13 05:58
//P1外接8个LED,低电平发光.
//下列程序在PROTEUS中仿真成功
#include<reg52.h>
//-----------------------------
void
delay_ms(unsigned
int
s)
{
unsigned
int
x;
for(s;
s
>
0;
s--)
{
x
=
98;
while(x--);
}
}
//-----------------------------
void
main()
{
char
i,
j;
while(1)
{
for(j
=
0;
j
<
8;
j++)
{
P1
=
255;
//全灭,
P1外接LED,
是低电平发光.
delay_ms(500);
//稍等片刻.
for(i
=
0;
i
<
8;
i++)
{
P1
<<=
1;
delay_ms(900
-
100
*
j);
//延时渐短
}
}
}
}
//-----------------------------