51单片机1-2流水灯

制作一个流水灯

我们要让他从左到右一次亮起,咋办呢。

很好办啊,就是让每一个灯依次亮起往复循环就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();

}

}

发表评论