单片机C语言编程:让8个LED流水灯以0.2s时间间隔从左到右依次点亮然后重复实现

如题所述

#include<reg52.h>
#include<intrins.h>
void delay(unsigned int z );
void main()
{
unsigned int a;
unsigned char b=0xfe;
for(a=0;a<8;a++)
{
P1=b;//P1口接8个LED灯
delay(200);
b=_crol_ (b,1);
}
}
void delay(unsigned int z)
{
unsigned int i;
for(;z>0;z--) //延迟时间自己算吧
for(i=110;i>0;i--);
}
用汇编写这个容易点
main: mov a,#0feh
mov r0,#8
loop: mov p1,a
acall delay
rl a
djnz r0,loop
delay:mov r6,#0ffh
loop1: mov r7,#01h
djnz r7,$
djnz r6,loop1
ret
end
好像是这样,延迟时间可能不太准,也是P1口接8个LED灯
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-17
void delay(int tick);//延时0.1*tick秒
void led8(unsigned char pat);//驱动8个LED,每个bit驱动1个.从bit7到bit0,从左到右排列.输出1表示点亮.
unsigned char pat = 0;

while (1)
{
pat = 0x00;
led8(pat);
delay(2);
for(i = 0; i < 7;i++)
{
pat |= (0x80 >> i);
led8(pat);
delay(2);
}
}
第2个回答  2011-03-17
#include<reg51.h>
void delay(void)
{
unsigned int i,j;
for(i=0;i<200;i++)
for(j=0;j<1000;j++)
;
}

void main(void)
{
while(1)
{
P3=0xfe; //第一个灯亮
delay(); //延时
P3=0xfd; //第二个灯亮
delay();
P3=0xfb; //第三个灯亮
delay();
P3=0xf7; //第四个灯亮
delay();
P3=0xef; //第五个灯亮
delay();
P3=0xdf; //第六个灯亮
delay();
P3=0xbf; //第七个灯亮
delay();
P3=0x7f; //第八个灯亮
delay();
}

}
第3个回答  2011-03-17
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<250;j++)
{;}
}
main()
{
unsigned char a=0xfe;
unsigned int k=0;
while(1)
for(k=0;k<8;k++)
{
P1=a;//假设LED连接的是P1口
delay(200);
a=~a;
a=a<<1;
a=~a;
}
}
第4个回答  2022-04-18
要求不高,就不用 C 语言。
    ORG 0
    MOV A, #127
LOOP:  MOV P1, A
    RL  A
DL:   DJNZ R7, $
    DJNZ R6, DL
    JMP LOOP
END