延时子函数,这个延时不算精确,但对于我们这个流水灯的延时来说,没影响,还有其他的延时方法,但我觉得这个对于我们初学者来说是比较好去理解的。
void delays(int a)//延时函数
{
int i,j;
for(i=a;i>0;i--)
for(j=110;j>0;j--);
}
流水灯的主函数以及全部代码如下
#include <reg51.h>
sbit 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不变
}
}
还有更多更简便的代码,上面是最初级的表达方式了,下面这个是比较高级一点的表达方式,效果跟上面的代码是一样的。
#include <reg51.h>
void 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版本仿真效果图,共阳极