51单片机:点亮LED灯

点亮原理

首先我们要明白LED在单片机中的工作原理才能写出使其点亮的代码。请先看原理图:

51单片机:点亮LED灯_第1张图片

VCC(电源)连接LED(D1~D8)的阳极,IO口P20~P27进电阻(RP9、RP10)依次连接LED(D1~D8)的阴极。电阻有限流保护LED的作用。

LED(发光二极管)只有在电流方向正确时才会被点亮;也就是说要让电流从“大头”进、“小头”出(阳极接正极,阴极接负极),才能成功点亮。

那么要如何实现呢?例如:我要点亮“D2”,只需要让P21口输出一个低电平(0)、VCC(电源)输出一个高电平(1),如此就实现了LED的点亮条件。

下面介绍两个方法,点亮LED灯

方法一

在写代码前我们还需了解一个知识、,sbit。sbit是定义特殊功能的寄存器的位变量(具体用法可自行去了解)。此处用法为:sbit 变量名=地址值;例如:sbit LED=P2^0 说明P2^0是变量LED的地址值,把地址赋给变量。

代码如下:

#include    //51或者52都可以

sbit LED=P2^1;       //注意P21口的写法,用keil的话,sbit要用在函数声明之前,原因很简单,自己想吧

void main()
{
     while(1)        //死循环结构,让主程序一直运行
     {
      LED=0;        //使P21口输出低电平,以此点亮D2
     }
}

方法二

同样还是点亮第二个LED。试想一下如果P2口除了P21口都是高电平(1),只有P21低电平(0),是不是可以实现同样的功能呢?代码如下:

P2=0xFD;   //二进制1111 1101的16进制是0xFD,0x表示16进制

再来解释下为什么是0xFD(1111 1101):

单片机的每组IO口的电平状态都储存在一个单独的8位寄存器中(不知道概念的,可以去看看单片机的工作原理),1和0就对应IO口的高低电平。P2口对应的寄存器叫做“P2寄存器”,如果P2口除了P21口都是高电平(1),只有P21低电平(0),寄存器储存的值如下表:(注意IO口的顺序!)

7 6 5 4 3 2 1 0
1 1 1 1 1 1 0 1

也就是1111 1101,换算成16进制就是0xFD(大小写无所谓,小冉习惯了大写),0x表示16进制。

如直接1111 1101的话,会被识别成十进制,所以用16进制。

将所有东西集成到一个代码上的话,诸君请看:

#include 

void main()
{
	while(1)
	{
		P2=0xFD; 
	}
}

然后将hex文件烧入单片机就点灯成功了。

你可能感兴趣的:(51单片机)