延时子函数,这个延时不算精确,但对于我们这个流水灯的延时来说,没影响,还有其他的延时方法,但我觉得这个对于我们初学者来说是比较好去理解的。
void delays(int a)//延时函数
{
int i,j;
for(i=a;i>0;i--)
for(j=110;j>0;j--);
}
流水灯的主函数以及全部代码如下
#includesbit led1=P1^0; sbit led2=P1^1; sbit led3=P1^2; sbit led4=P1^3; sbit led5=P1^4; sbit led6=P1^5; sbit led7=P1^6; sbit led8=P1^7; void delays(int a)//延时函数 { int i,j; for(i=a;i>0;i--) for(j=110;j>0;j--); } void main() { while(1) { led1=0;//1灯亮,其他灭 led8=1;//8灯灭 delays(100);//延时100mS不变 led1=1;//2灯亮,其他灭 led2=0; delays(100);//延时100mS不变 led1=1;//3灯亮,其他灭 led2=1; led3=0; delays(100);//延时100mS不变 led1=1;//4灯亮,其他灭 led2=1; led3=1; led4=0; delays(100);//延时100mS不变 led1=1;//5灯亮,其他灭 led2=1; led3=1; led4=1; led5=0; delays(100);//延时100mS不变 led1=1;//6灯亮,其他灭 led2=1; led3=1; led4=1; led5=1; led6=0; delays(100);//延时100mS不变 led1=1;//7灯亮,其他灭 led2=1; led3=1; led4=1; led5=1; led6=1; led7=0; delays(100);//延时100mS不变 led1=1;//8灯亮,其他灭 led2=1; led3=1; led4=1; led5=1; led6=1; led7=1; led8=0; delays(100);//延时100mS不变 } }
还有更多更简便的代码,上面是最初级的表达方式了,下面这个是比较高级一点的表达方式,效果跟上面的代码是一样的。
#includevoid delay(int a) { int i,j; for(i=a;i>0;i--) {for(j=110;j>0;j--);} } void main() { unsigned char a=0x01;//这里的0x01:0000 0001,0xfe:1111 1110 while(1) { if(a==0x00)// { a=0x01; } P1=~a;//~是取反的符号 a=a<<1; delay(100);//每次灯亮的状态延时100ms } }
proteus8.6版本仿真效果图,共阳极



