我们将单片机中的LED灯以流水的形式进行闪烁。首先,我们需要定义8个LED灯的引脚。根据单片机的原理图,LED的引脚为P2^0 到P2^7。代码中声明如下:
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
接下来,我们编写LED灯流水线的代码。我们定义一个方法`style_1`,然后在这个方法里面编写流水灯的代码。代码如下:
void style_1();
void style_1()
{
LED1 = 0;
LED2 = 0;
Delay();
LED1 = 1;
LED2 = 1;
LED3 = 0;
LED4 = 0;
Delay();
LED3 = 1;
LED4 = 1;
LED5 = 0;
LED6 = 0;
Delay();
LED5 = 1;
LED6 = 1;
LED7 = 0;
LED8 = 0;
Delay();
LED7 = 1;
LED8 = 1;
Delay();
}
需要注意的是,为了展示视觉效果,我们在流水灯闪烁的时候添加了一个延时函数`Delay`。
void Delay();
void Delay() //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
最后,我们编写主函数,在主函数中调用`style_1`方法。完整的代码如下:
#include <regx51.h>
void Delay();
void style_1();
//声明1-8个LED灯
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
void Delay() //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void style_1()
{
LED1 = 0; //第一个LED亮起
LED2 = 0; //第二个LED亮起
Delay(); //延时,让其有视觉效果
LED1 = 1; //第一个LED熄灭
LED2 = 1; //第二个LED熄灭
LED3 = 0; //第三个LED亮起
LED4 = 0; //第四个LED亮起 以此类推
Delay();
LED3 = 1;
LED4 = 1;
LED5 = 0;
LED6 = 0;
Delay();
LED5 = 1;
LED6 = 1;
LED7 = 0;
LED8 = 0;
Delay();
LED7 = 1;
LED8 = 1;
Delay();
}
void main()
{
while(1)
{
style_1();
}
}
通过以上的代码,我们成功实现了LED灯的流水线效果。