之前已经实现了led的点亮以及闪烁,今天完成流水灯的实现。
可以看到单片机的led模块有8个led,从D1到D8,而实现led流水灯就是让这8个小灯依次亮灭并且循环这一过程。
首先我们要知道控制一个灯亮的方式,灯有8个,所以使用二进制中的0或1来控制每个灯的亮灭。
例如首先要第一个灯亮,则表示为1111 1110,0是亮,1是灭,从左往右表示为D8到D1,转换为十六进制就是0xFE;由此可以得到实现流水灯的主要代码,同时为了避免代码执行过快而观察不到流水灯,所以代码之间还需要加入延时的代码。
完整代码如下
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE;
Delay500ms();
P2=0xFD;
Delay500ms();
P2=0xFB;
Delay500ms();
P2=0xF7;
Delay500ms();
P2=0xEF;
Delay500ms();
P2=0xDF;
Delay500ms();
P2=0xBF;
De