一、LED简介
1、LED,它是一个发光二极管,它具有单向导电性,那么通过5毫安的一个电流,就可以使它发光,那么电流越大,它的发光也就越强,但是电流不能过大,过大会把这个发光二极管给烧坏,也就击穿,一般呢,我们控制在3毫安到20毫安的一个电流,通过这个发光二极管的电流控制在这一块,可以让我们的这个发光二极管,可以正常的一个发光,那如果说我们的外部输入的电流大于这个电流范围的话,我们会在这个发光氨极管的两个引脚上串一个电阻,这个电阻就是限流,所以该电阻称为限流电阻,其目的是为了保障我们的这个发光二极管不至于因为电流过大而烧毁。
2、发光二极管在发光的时候,我们测量两端的电压,就这两端的电压,大概是1.7V,所以这个电压又叫做发光二极管的一个导通压降。
3、
由这两个图,我们分别列出了这个发光二极管的两种封装,一种是这种插件式的,可以直接插的。另一种是贴片式的。
二、硬件设计
1、接下来我们来看一下我们的板载LED模块的一个电路,从这个电路我们放了两张图。
(1)左边一张是我们集成版的,也就是我们的A2到A3到A4这三款开发板,它对应的这个LED模块的一个电路,因为它是集成到资源就是集成到这个单面积的管脚,而右边这张图,是我们的A5到A6到A7它的一些图,因为A5到A7这些产品,它的模块是完全独立的。之所以叫完全独立,是因为它的这些资源,没有对这个芯片的管脚进行绑定,由用户自己来连接,因此,这种灵活性就更多了吧。
(2)为了方便统一,兼容,我们可以按照这种集成式的这个管脚进行连接,同样提供的程序,也按这种管脚来,对应的,比如说这里有第一管,第一指示灯,那第一指示灯我们通过网络的标号可以知道,它是连接在P2.0关掉的。要让这个发光二极管进行发光,那必须保证P20管脚为低电平,这样我们的电流才能流进来,才能使它发光。像RP9,RP10,这叫排阻,相当于这里面就是一个电阻,只是它的封装,将四个电阻全部封装在一个小的排阻里面,方便于我们PCB的一个板机的缩小,所以呢,这是我们的这个集成式的这种电路,可以看到,它的管脚全部被绑定到我们单片机上面了,所以要控制那个灯点亮就对应使用哪个管脚输出低电平,比如,我要让D1指示灯点亮,那就将P20管脚让它输出一个低电平,让电流往这里流,如果是高电平,电流是流不过来的。
(3)我们这里使用的是471,也就是470欧,如果说,为了提高我们的亮度,我们也会使用100欧,这样我们的发光二极管也会更亮,电阻更大,电流也就更小。
(4)右边这张图是我们A5到~A7开发板对应的LED模块的一个电路,那我们这里呢,对同样的,如果说你要让第一指示灯点亮,它也是全部供阳极接法,所以要让它亮,就是要输出低电平,那这里对应的是这个管脚,因为这个管脚它全部是模块独立,这里引出来的都是一些排针,那排针的话,我可以将一根导线,一端连接到我们脚的一端,一端连接到我们单片机的P20管脚,是不是就相当于这个脚就是P2.0,跟我们的这个脚是不是对应了,通过这种方式,我们可以进行一个程序的兼容。
三、软件设计
1、本部分要实现的功能是:点亮D1指示灯,即让P2.0管脚输出一个低电平。完成后可再控制D1指示灯闪烁,即间隔一段时间点亮和熄灭D1指示灯。
2、前面我们分析了,其实只要让这个P20管脚输出一个低电平,这样我们的电流才能流向低指示灯,才能发光,对于我们的A5,A6,A7这些51的板子,这是模块独立,所以要让它发光,同样要将这个管脚连接到我们单片机对应的管脚,你才能使它发光。
3、既然我们是要D1指示灯发光,那我们知道D1指示灯他是连接在P2.0的,所以我们先定义一下这个管脚,那如何来定义这个管教呢,在C语言里面,我如何用C语言来定义我单片机的管脚,这里介绍一个方法,我们使用一个关键字,前面我们在讲解C语言的时候,sbit,这个是特殊功能继电器的一些未定义,我们在头文件里面也能看到有这样定义的一个身影。
那通过sbit可以将我们的一个寄存器,它的某一个位来进行重命名,那因为我现在要使用P2口,P2口在我们的头文件里面已经进行了一个定义了,所以我们可以直接用P2,那我们重命名,命名为LED1,这是我们重命名的,那不会写格式没关系,我们参照别人写的,那我要让它dp 20,p20是不是就相当于P2口的D零个管脚。
(1)^ 这是特殊的写法,是系统规定的
(2)这里的P2是我们的寄存器已经封装好定义的,那P2寄存器里面的D0个脚,这就是我们的P20脚。
(3)语句要加分号,这是我们的这个单片机的一个LED的一个控制管脚,因为它是连接在P20对应到我们的模块独立的开发板上面,也可以连接到P20脚。
(4)定义好我们的LED的控制引脚,下面我们就通过程序来控制它点亮,要点亮的话,我们的程序都是从main函数来执行的,进入main函数后,开始往下执行,执行我首先就要让它亮,让它亮,是不是就相当于将P20这个管脚输出一个低电平,那我既然已经重命名了,那我是不是直接就利用我定义的这个名字来代替这个P2.0,当然是可以的,然后我们让它输出一个低电平。你要对它进行数据的输入和输出,就是直接对我们定义的管脚来进行操作就行了。
(5)这样是不是将相当于把0赋值给我们的这个LED1,然后LED1也是我们定义的这个P2.0脚,相当于把0赋值给我们,也就是我们的P2.0要输出一个低电平,因为输出一个低电平,这个D1指示灯就会亮,因为它的阳极,也就是正极是接的VCC电源,所以这里输出低电平,这里就会有电流,就会流过它进行发光。
(6)当然,将LED1放到这里面来也是可以的
因为我们的单片机程序,我们所有的功能通常都会在我们的main函数里面进行运行的,而且我们会把我们所有的逻辑功能,统一放到我们的while(1)循环里面,让我们的程序不断地在这里循环运行。
(7)无论是放前面还是放里面,只要让它输出低电平即可,这里就会点亮,后面的循环你有没有改变他的状态,所以他依然是点亮的,对你这个指示灯就没有影响,然后while循环里面就是一个我们的不断循环,我们在前面介绍C语言循环语句的时候说过,while1是它的条件,这里的1是真的,所以他会在这里循环循环。
4、这是我们程序编译之后会产生一个hex文件,然后将我们的烧写软件打开,然后选择我们的这个hex文件就可以了。
5、我们的这个程序代码有多大呢,这里我们可以看一下,这个生成编译之后会产生一条信息。
我们可以看到这里面有一个data,xdata,以及code,那么code表示我们程序所占用的flash的一个大小,而这个data表示的是我们数据存储器内部RAM占用的大小,我们的这个代码flash占用了16字节,然后数据占用了RAM占用了9字节,xdata是数据存储器外部RAM,外部的RAM我们没有拓展,所以这里是0.
6、我们的程序具体有多大,可以通过code和data进行一个换算,而不是看这个hax文件,你可以看一下,这个hax文件有1KB,但不是看哪里,而是看我们这个编译的这个code和data。