利用单片机控制八个led灯,要求:全亮全灭 ,四亮四灭,以从右到左的 流水形式编程,不是用c语言 编

如题所述

#include <reg52.h>
#define LED P0 /*宏定义LED接于P0口*/
void delay (int); /*声明延迟子函数*/
main()
{
int i;
while(1)
{
LED=0xfe;
for(i=0;i<7;i++)
{
delay(100);
LED=(LED<<1)|0x01; /*最低位LED灯左移一位后进行或运算使得最低位不会为“0”*/
}
for(i=0;i<7;i++)
{
delay(100);
LED=(LED>>1)|0x80; /*最低位LED灯右移一位后进行或运算使得最高位不会为“0”*/
}
LED=0xff;
for(i=0;i<4;i++)
{
delay(300);
LED=~LED; /*所有的LED灯取反全亮或者全灭*/
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-22
因为我知道这是你单片机实习报告,老师李欢欢。org 0100H
jmp start
start: mov A,#0FFH
mov P0,A
mov R1,#07FH
mov R2,#02H
mov R3,#09H
mov R4,#09H
mov R5,#0FEH
loop1: dec R2
jz over
loop2: dec R3
jz loop3
mov A,R1
rl A
mov P0,A
call delay
mov R1,A
jmp loop2
loop3: dec R4
jz loop1
mov A,R5
rr A
mov P0,A
call delay
mov R5,A
jmp loop3
delay: mov R0,#07FH
djnz R0,delay
ret
over: nop
end
用Proteus仿真只有左边第一个灯亮而且一直亮着,当我把那个延时程序去掉仿真时,8个灯间隔的显示,但显示的顺序有点混乱,达不到预期效果。
预期效果是:让8个LED等从左到右显示再从右到左显
相似回答