单片机 亮灯:8个灯左右来回亮。既先按流水灯从左到右亮,再从右到左灭。循环。

我现在能够实现从左到右一次亮 怎么才能够在这个基础上实现从右往左依次灭 如次循环

用移位操作,首先把P1口赋值,然后向右移位,判断是否移到最后移位,如果不是,一直移位,如果是,则反向移位,判断是否移位到第一位,如果是则循环到右移,具体代码就自己写了。代码不难,我只是记不清楚具体定义了。追问

我就是代码不会啊 我是对这个一窍不通 啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-13
用这个,LED 接在P1口,12M晶振 大约0.5秒一位。
ORG 0300H
MOV A,#1
LOOP:MOV P1,A
LCALL DELAY
SETB C
RLC A
JNC LOOP
CLR C
RRC A

LOOP1:MOV P1,A
LCALL DELAY
CLR C
RRC A
JC LOOP1
SETB C
RLC A
SJMP LOOP
DELAY:NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R1DELAY
DJNZ R2,DELAY
第2个回答  2011-12-13
#include<reg52.h>
unsigned char code temp[9]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
void delay()
{
int a,b;
for(a=0;a<50;a++)
for(b=0;b<1000;b++);
}
void main()
{
char a;
while(1)
{
for(a=0;a<9;a++)
{
P1=temp[a];
delay();
}
for(a=8;a>=0;a--)
{
P1=temp[a];
delay();
}
}
}
第3个回答  2011-12-13
发光二极管是共阳,还是共阴,用c语言,还是汇编追问

不用了 结束了....

第4个回答  2011-12-13
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

void DelayMS(uint x)
{
uchar t;
while(x--)
{
for(t=120;t>0;t--);
}
}

void main()
{
uchar i;
P2=0x01;
while(1)
{
for(i=7;i>0;i--)
{
P2=_crol_(P2,1);
DelayMS(150);
}
for(i=7;i>0;i--)
{
P2=_cror_(P2,2);
DelayMS(150);
}
}
}
相似回答