流水灯制作

 

       上一篇提到,如何点亮一个LED灯,不难,也就是很简单一波操作。给一个高低电平完全解决问题。当然,今天这个也就是给几个高低电平就完全OK了。由于是整组的进行操作,今天将直接提供8个LED灯用于操作,当然,是共地的,和上一篇的LED1一样,给高电平就可以直接点亮,简单在看下原理图吧:(依旧不是用AD画的,打开太慢了。)

今天的电路和昨天的LED1一样,只是多了几个,好像不是几个,是好几个。电路分析就不做了,就是给高电平导通,二极管发光就行了。没有太大的可说性。直接上程序了。

首先,我们再来体现一下用上一篇我很推崇的位定义来做,程序比较长一点。图片一张截不下,直接打在下面了:

#include<reg51.h>

sbit LED1=PA0;

sbit LED2=PA1;

sbit LED3=PA2;

sbit LED4=PA3;

sbit LED5=PA4;

sbit LED6=PA5;

sbit LED7=PA6;

sbit LED8=PA7;

void delay()

{

int x,y,z;

for(x=0;x<100;x++)

for(y=0;y<100;y++)

for(z=0;z<100;z++)

}

int main()

{

LED1=0;

LED2=0;

LED3=0;

LED4=0;

LED5=0;

LED6=0;

LED7=0;

LED8=0;

for(int i=1;i<=8;i++)

{

       switch(i)

       case 1:LED1=1;            delay();break;

       case 2:LED2=1;LED1=0;delay();break;

       case 3:LED3=1;LED2=0;delay();break;

       case 4:LED4=1;LED3=0;delay();break;

       case 5:LED5=1;LED4=0;delay();break;

       case 6:LED6=1;LED5=0;delay();break;

       case 7:LED7=1;LED6=0;delay();break;

       case 8:LED8=1;LED7=0;delay();break;

}

}

这个可以实现功能,可是代码太长了,需要简化,在此之前,我们很明显注意到了一个delay()函数,这个函数就是延时用的,延时一段时间,在这个函数里一直在进行空运算,就是z每加100,y+1,y每加100,z+1;每运行一次delay,系统就进行了1000000次运算,很恐怖吧,好像不算流水灯了,有点慢,大致就是这个意思,大家也可以找到计算延时的小工具延时自己想要的时间然后生成代码也可以实现这波操作。用到了switch’函数就是简单地做一个选择功能,其中i是一直在做自加运算,从1加到8,在置一,再从1加到8,就这样进行循环,LED灯也就实现了流水灯的效果。不过代码相对来说还是也特别的冗杂,需要简化。

今天挺晚了,明天继续,用另外一种方法实现一样的效果。当然,不是用if来替换switch,那样的代码也很复杂,运算也慢,当有对一个元素进行多次重复判断时,switch占用更少的运行空间。

明天见!