制作一个流水灯

我们要让他从左到右一次亮起,咋办呢。
很好办啊,就是让每一个灯依次亮起往复循环就ok了。
接下来就让我们来看一下LED灯在cpu的所在位置吧。


可以看到啊LED灯在pcu的P2_0到P2_7啊。
接下来我们可以这样写
#include <REGX52.H>
void main()
{
while(1)
{
P2_0=0;//亮
P2_0=1;//灭
P2_1=0;//亮
P2_1=1;//灭
P2_2=0;//亮
P2_2=1;//灭
P2_3=0;//亮
P2_3=1;//灭
P2_4=0;//亮
P2_4=1;//灭
P2_5=0;//亮
P2_5=1;//灭
P2_6=0;//亮
P2_6=1;//灭
P2_7=0;//亮
P2_7=1;//灭
}
}
这样是不是全是亮的,不不不他只是闪的特别快,所以你会发现全是亮的。接下来就要学一个新的知识叫做延迟ok
这就是我们的延迟计算机了

你要多久 的延迟就可以填多少了
然后复制下来
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2_0=0;
Delay500ms();
P2_0=1;
Delay500ms();
P2_1=0;
Delay500ms();
P2_1=1;
Delay500ms();
P2_2=0;
Delay500ms();
P2_2=1;
Delay500ms();
P2_3=0;
Delay500ms();
P2_3=1;
Delay500ms();
P2_4=0;
Delay500ms();
P2_4=1;
Delay500ms();
P2_5=0;
Delay500ms();
P2_5=1;
Delay500ms();
P2_6=0;
Delay500ms();
P2_6=1;
Delay500ms();
P2_7=0;
Delay500ms();
P2_7=1;
Delay500ms();
}
}
这个是延迟500ms的
是不是太多代码了所以我们要学16的2进制
0x为16转换在0x后面可以用16进制他就会自己转化为2进制
比方说0x9他就是1001或者0xFF他就是1111 1111
我们的LED灯都在P2口上所以又都是八个,我们可以用两个16进制就是0xFF
我们可以用P2代替所有的P2_0到P2_7.然后用0xFF给赋值前面的F就是给RP7 1K 的四个LED灯数
首先我们知道1为灭0为亮
所以F就是1111就是从P2_0到P2_3都是1
后面的F就是RP9 1K的从P2_4到P2_7都是1
要想让他们一次点亮分别是0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFB,0xFE
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE;//1111 1110
Delay500ms();
P2=0xFD;//1111 1101
Delay500ms();
P2=0xFB;//1111 1011
Delay500ms();
P2=0xF7;//1111 0111
Delay500ms();
P2=0xEF;//1110 1111
Delay500ms();
P2=0xDF;//1101 1111
Delay500ms();
P2=0xBF;//1011 1111
Delay500ms();
P2=0x7F;//0111 1111
Delay500ms();
}
}