点亮一个LED
# include <reg52.h>
sbit led1=P1^0;
void main()
{
led1=0;
}
-
以上代码中的第二行
sbit led1=P1^0;
是将P1的第一引脚重新命名,然后led1=0;
代表是能低电平,点亮对应的LED灯。 -
如需要点亮其他灯,只需要改动名称为
P1^2、P1^3 、P1^7
,即可点亮。
点亮多个LED灯
-
在之前我们使用寄存器的位操作,将我们看到的P1的某一位重新命名,在使用输出高低电平来控制对应的LED亮灭,现在我们还可以对整个P1寄存器进行操作。
-
之前总结过,在点亮LED灯实验中P1寄存器对应每一位输出与锁存器的DB口和Q相同高低电平,现在使用一个16进制的数控制这个寄存器。
-
例如现在我们需要点亮2468灯,则Q1、Q3、Q5、Q7对应的为单片机P1.1~P1.7,将这几脚对应低位,按照数字来看的话就是10101010,其中的D2在低位中,所以这串数字按照二进制的话从后往前读就是01010101(高位互换),就变成16进制为(用计算机算得)为55,程序表示0x55,所以程序中只需要进行P1=0x55操作就可以点亮2468LED灯。
-
代码如下
#include <reg52.h>
void main()
{
P1=0X55;
}
-
同理想要点亮1357就是反着来。0xaa。
-
代码如下
#include <reg52.h>
void main()
{
P1=0xaa;
}
-
这里拓展一点知识,当我们进行AD实验时,一般开发板LED旁边连接的有AD,因为要使用单片机的P1,此时为了防止LED灯乱跑,我们将LE设置低电平,此时无论P1的各个引脚输出为高电平还是低电平,锁存器都始终为Q0这个定值大于使LED导通的临界电平值,这样LED左右两边都是高电平,LED灯不通,此时就相当于LED被锁了起来。