第1个回答 2012-06-03
#include <reg51.H>
//假设P2口顺序接LED,并且高电平点亮;
typedef unsigned char uchar;
typedef unsigned int uint;
void delay1ms(uint);
main()
{
while(1)
{
static uchar order=1;
uchar n;
P2=0x00; //每种方式的开始,灯光全灭
if(order==1) //方式一:全灯逐个点亮,然后逐个灭掉
{
for(n=0;n<8;n++)
{
P2|=0x01<<n; //逐个点亮,直至全亮
delay1ms(500); //半秒间隔
}
for(n=0;n<8;n++)
{
P2<<=1; //逐个灭,直至全灭
delay1ms(500);
}
}
else if(order==2) //方式二:全灯两两先亮后灭;
{
for(n=0;n<8;n+=2)
{
P2=0x03<<n;
delay1ms(500);
P2=0x00;
delay1ms(500);
}
}
else //方式三:全灯逐个先亮后灭;
{
for(n=0;n<8;n++)
{
P2=0x01<<n;
delay1ms(500);
P2=0x00;
delay1ms(500);
}
}
if(++order>3)order=1; //order控制闪烁方式循环
}
}
void delay1ms(uint t)
{
uint i;
uchar j;
for(i=0;i<t;i++)
for(j=0;j<121;j++);
}