51单片机-简单流水灯

延时子函数,这个延时不算精确,但对于我们这个流水灯的延时来说,没影响,还有其他的延时方法,但我觉得这个对于我们初学者来说是比较好去理解的。

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版本仿真效果图,共阳极

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三目条件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值