八个流水灯隔灯闪烁,程序怎么写?

如题所述

#include 

unsigned int LED;

unsigned int a,i,m;

void yiwei();

void delay(unsigned int b);

void main()

TMOD=0x01;  //T0为方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;   //初值

EA=1;       //允许中断

ET0=1;

while(1)

P2=0x00;

delay(2000);

LED = 0x7f;

m

=0;

for (i = 0 ;i < 8 ; i++)

a=0;

TR0=1;

delay(100);

while(m);

delay(2000);

P2=0x00;

delay(2000);

LED = 0xfe; 

m=0;

for (i = 0 ;i < 8 ; i++)

a=1;

TR0=1;

delay(100);

while(m);

}

delay(2000);      

}

}

void t0() interrupt 1 using 1

{  

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

m++;

if(m==20)

{

m=0;

yiwei();      

}   

}

void yiwei()

{  

if(a==0)

{        

P2=LED;

LED = LED>>1; // 右移

LED = LED|0x80;     

}

else

{    

P2  = LED;

LED = LED << 1;     // 左移

LED = LED | 0x01;   

}

}

void delay(unsigned int b)

{

unsigned char j;

for(b; b > 0; b--)    //机器在这里执行需要一段时间 也就达到了延时效果

for(j = 255; j > 0; j--);

}

自己调试过,我12晶振

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-05-22
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(500); //调用延时函数
temp<<=1;
}
}} void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}本回答被网友采纳