点亮一个LED灯
根据LED
模块原理图,我们可以知道,通过控制P20、P21...P27
这八个位置的高低电平,可以实现D1~D8
八个LED
灯的亮灭。VCC
接的是高电平,如果P20
接的是低电平,那么D1
就可以亮。如果P20
接的是高电平,D1
就不能亮,以此类推。
P20~P27
一共有八个端口,依次可以用P2_0,P2_1,P2_2...P2_7
进行表示。也可以直接用P2
进行表示。
例如P2_0=0
,表示P20
是低电平,P2_1=1
,表示P21
是高电平。
如果只用P2
表示,P2=0xFF
,表示P20~P27
全是高电平,因为0xFF
是十六进制,转化为二进制是1111 1111
,十六进制转二进制是四位一组,F
表示15
,1111
。因此对应P20=1,P21=1,....P27=1
。
如果P2=0xFE
,表示P20=0,P21~P27
全是高电平,因为0xFE
转化为二进制是1111 1110
从低位开始依次对应P20,P21,P22...P27
。一个二进制数对应一个引脚。 低电平表示亮,高电平不亮。0
表示低电平,1
表示高电平。
#include <REGX52.H>
void main(){
P2=0xFE;//1111 1110 点亮D1
while(1){
}
}
点亮一个LED
使一个LED灯闪烁
while
循环使得程序一直运行下去。如果要使一个LED
灯闪烁,那么就要使一个灯亮,然后灭,交替进行。
如果我们写这样的代码,可以使得一个LED
灯闪烁吗?
#include <REGX52.H>
void main(){
while(1){
P2=0xFE;//1111 1110
P2=0xFF;
}
}
答案是不可以,因为机器的运算速度是非常的快的,我们的肉眼没办法区分两行代码的区别,所以我们看到的是灯一直亮着。如果要让肉眼看见LED
灯闪烁,那就要让机器慢下来,也就是让机器延时,再运行下一段代码。</