普通的流水灯是让8个led依次点亮,此升级版会让流水灯点亮第三个LED后再回到第二个LED,让LED呈现出震荡的形式,从左边到右边,再从右边弹到左边,实验程序很简单,还是很有趣的。此程序会让初学者对FOR语句的掌握更加牢固。
一下是本程序的源码:
/*本程序使led向右移动2格再向左移动一格以此循环,在触及到第八个LED时又弹回来向左以以上规律移动*/
/********************************************************************/
#include<reg52.h> // 定义了一些特殊功能寄存器
#include<intrins.h> // 需用到左右移函数
#define led P2 // 将P2定义为led
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
/***********************************/
void delay(u16 i) //延时函数 循环一次延时10us,当i=50000时大概延时450ms
{
while(i--);
}
/***********************************/
void main() //主函数
{
u8 i,j; // i led逐步右移计数,jled左右闪动计数
while(1) //无限循环
{ led=0x01; //让第一个LED发光 ,延时
delay(8000);
for(i=0;i<6;i++) //由于最后一个LED发光后不能跳到后一个LED,所以第七次单独运行
{
for(j=0;j<2;j++) //LED向右移动2
{
led=_crol_(led,1);
delay(8000);
}
for(j=j;j>1;j--) //LED向左移动1
{
led=_cror_(led,1);
delay(8000);
}
}
for(i=i;i<7;i++) //当i=6时led向右移动2
{
led=_crol_(led,1);
delay(8000);
}
for(i=0;i<6;i++) // 和以上过程相反
{
for(j=0;j<2;j++)
{
led=_cror_(led,1);
delay(8000);
}
for(j=j;j>1;j--)
{
led=_crol_(led,1);
delay(8000);
}
}
for(i=i;i<7;i++)
{
led=_cror_(led,1);
delay(8000);
}
}
}
相机速度有点慢,看起来有两个LED同时移动
|