用51单片机实现流水灯的方法有多种:普通电灯法,位移法,数组法。其次模拟电路的电流图也与点一盏LED相似。具体如下:
一 首先是最简单的代码:
#include
sbit led0=P0^0;
sbit led1=P0^1; // 定义八盏灯,并规定每个灯的io接口
sbit led2=P0^2;
sbit led3=P0^3;
sbit led4=P0^4;
sbit led5=P0^5;
sbit led6=P0^6;
sbit led7=P0^7;
void delay(void) // 声明延迟函数
{
unsigned char a,b; //定义两个变量a,b
for(a=0;a<200;a++)
for(b=0;b<200;b++); //这是两个for循环嵌套。用分号来区分。
} // 每当a循环一次,b都要循环200次。同时200也是灯闪烁的时间。
void main() //主函数
{
led0=0; //点亮第一个灯泡
delay(); // 延时函数
led0=1; //熄灭灯泡
delay(); //延时 通过这一系列过程实现闪烁
led1=0;
delay();
led1=1;
delay();
led2=0;
delay();
led2=1;
delay();
led3=0;
delay();
led3=1;
delay();
led4=0;
delay();
led4=1;
delay();
led5=0;
delay();
led5=1;
delay();
led6=0;
delay();
led6=1;
delay();
led7=0;
delay(); 但是该方法存在弊端:需要一个个的定义变量。如果需要同时让许多灯点亮的话则不大方便。代码过于繁琐。因此可以使用其他两种方法
led7=1;
delay();
led8=0;
delay();
led8=1;
delay();
}
二 使用数组的方法点亮十六盏流水灯