首页 理论教育 单片机控制发光二极管实现

单片机控制发光二极管实现

时间:2023-06-28 理论教育 版权反馈
【摘要】:所以,用户只需控制好单片机的I/O口就能随意控制发光二极管的亮灭。为保护单片机I/O口和发光二极管,请务必记住要串接限流电阻,建议阻值470以上或1k。

单片机控制发光二极管实现

单片机应用系统是硬件与软件的有机组合,搭建了单片机最小应用系统,只是意味着单片机可以工作了,但不知如何“工作”。我们还需要编写控制程序,并将控制程序下载到单片机的存储器中,这样单片机通过执行用户程序来实现用户期望的控制目标。这里我们期望让单片机点亮一个发光二极管。那如何来实现呢?

1.3.2.1 发光二极管基本工作原理

发光二极管本质上也是二极管,常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压大于5V。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过二极管的电流。当它处于正向工作状态时(即两端加上正向电压),电流从LED阳极流向阴极,半导体晶体就发出从紫外到红外不同颜色的光线,光的强弱与电流有关。

对普通发光二极管而言,可以采用目测法进行判别,即引脚较长的为正极,引脚较短的为阴极。当然,我们可以使用万用表进行检测。具体做法是如下。

1)将万用表置R×10或R×100档。

2)检测时,用万用表两表笔轮换接触发光二极管的两引脚。若管子性能良好,必定有一次能正常发光,此时,黑表笔所接的为正极,红表笔所接的为负极。请读者分别用目测法和万用表检测法判别发光二极管的引脚极性。

温馨提示

1)发光二极管导通时的压降比普通二极管大一些,不同颜色的发光二极管又存在一定区别,这里列出几种发光二极管的导通压降供读者参考。

978-7-111-55685-5-Chapter01-17.jpg红色发光二极管的压降为2.0~2.2V。

978-7-111-55685-5-Chapter01-18.jpg黄色发光二极管的压降为1.8~2.0V。

978-7-111-55685-5-Chapter01-19.jpg绿色发光二极管的压降为3.0~3.2V。

2)发光二极管导通时的亮度主要与电流大小有关,不同的产品不一样,根据管子的尺寸、亮度和规格,从几毫安到几十毫安之间变化。对普通发光二极管而言,10mA电流的亮度已足够。

3)可见,我们可以将发光二极管的一个引脚固定接某个电平(如阳极接电源正极),则可以通过控制另一个引脚来实现对发光二极管的控制。

想一想

假定发光二极管导通时,正向压降为2.0V,使用5V电源,导通电流为10mA,试问需要串接多大的限流电阻?

1.3.2.2 搭建应用电路

方法1 低电平驱动法,灌电流

这种方法是将发光二极管的阴极接到单片机的普通I/O口,阳极接到电源正极,注意必须串联限流电阻。当单片机的I/O口输出低电平(0)时,发光二极管点亮;当单片机的I/O口输出高电平(1)时,发光二极管熄灭。所以,用户只需控制好单片机的I/O口就能随意控制发光二极管的亮灭。驱动电路如图1-12所示。

978-7-111-55685-5-Chapter01-20.jpg

图1-12 低电平驱动

事实上,低电平驱动法是最常用的,单片机的引脚无论输入还是输出往往选择以低电平为有效电平。因为采用低电平进行驱动时,灌电流(相当于电流从外部电源灌入到单片机内部,单片机为接收者)大,驱动能力强。为保护单片机I/O口和发光二极管,请务必记住要串接限流电阻,建议阻值470Ω以上或1kΩ。

方法2 高电平驱动法,拉电流

这种方法是将发光二极管的阳极接到单片机的普通I/O口,阴极接到电源地。当I/O口输出高电平时,发光二极管点亮;当I/O口输出低电平时,发光二极管熄灭。这时当发光二极管点亮时,相当于从单片机拉电流出来,要求单片机的I/O口必须工作在推挽/强上拉模式,此时单片机输出高电平时可输出较大的电流,若为弱上拉/准双向口则可能无法点亮发光二极管。同理,必须添加限流电阻。驱动电路图1-13所示。

978-7-111-55685-5-Chapter01-21.jpg

图1-13 高电平驱动

一般情况下,不推荐使用这种方法驱动发光二极管。

根据上述内容,请读者在下列区域,使用单片机的P0口接8个发光二极管,采用低电平驱动法。

978-7-111-55685-5-Chapter01-22.jpg

1.3.2.3 编写控制程序

通过以上分析可以得出,对采取低电平驱动方式而言,要点亮某个发光二极管亮,只要对应的I/O口的输出低电平(0);要熄灭它,只要对应的I/O口输出高电平(1)。

那么问题来了:

1)单片机复位后I/O口的状态是什么?

2)我们如何才能改变I/O口的状态?

对第一问题,让我们再次查阅附录C,可知单片机复位后,P0的8个位均为高电平(1)。这样,当单片机上电时,接在P0口的8个指示灯是无法点亮的。

对第二问题,通过前面的学习,我们知道可以通过操作特殊功能寄存器实现对I/O口状态的改变。要操作特殊功能寄存器,就必须使用编程软件进行编程了。

Keil C51是德国Keil Software公司开发的一种专为8051单片机设计的高效率的C语言编译器,符合ANSI标准,生成的程序代码效率极高。这里以Keil uVision3版本介绍Keil C51的使用。

1.新建一个工程(Project)

每个设计任务,都必须要有一个配套的工程(Project),即使是点亮LED这样简单的任务也不例外。因此,我们首先要新建一个工程,打开我们的Keil软件后,单击:Project→New Project…,然后会出现一个新建工程的界面,如图1-14所示。

978-7-111-55685-5-Chapter01-23.jpg

图1-14 新建工程

2.保存工程

选择保存路径,建议为每个工程单独建立一个文件夹(文件夹命名应做到顾名思义)。本例为点亮一个发光二极管,如图1-15所示。

978-7-111-55685-5-Chapter01-24.jpg

图1-15 保存工程a

注意务必记得先打开新建的文件夹,再保存工程名。一般工程名与文件夹名一致,如图1-16所示。

978-7-111-55685-5-Chapter01-25.jpg

图1-16 保存工程b

3.选择单片机

说明:STC单片机本质是8051单片机,因此,可以从元器件库中选择内核是8051的任意一个单片机。这里我们推荐选择AT80C51。

然后单击【保存】就会出现如图1-17所示的界面,选择元器件。

978-7-111-55685-5-Chapter01-26.jpg

图1-17 元器件选择a

该对话框用以选择CPU的型号。在这里有很多型号可以选择,一般选择的型号只要满足控制要求就可以了,不是说一定要选择某一种型号的CPU。本例中选择Atmel公司的AT89C51的芯片,如图1-18所示。(www.xing528.com)

978-7-111-55685-5-Chapter01-27.jpg

图1-18 元器件选择b

4.加载启动代码

单击“确定”之后,会弹出一个如图1-19所示的对话框,每个工程都需要一段启动代码,如果单击“否”,则编译器会自动处理这个问题;如果单击“是”,这部分代码会提供给我们用户,我们就可以按需要自己去处理这部分代码。这部分代码初学者一般是不需要去修改的,但是随着单片机应用能力的提高和知识的扩展,我们就有可能会需要了解这部分内容,因此这里我们选择“是”,让这段代码出现,但是我们暂时不需要修改它,读者知道这么回事就可以了。

978-7-111-55685-5-Chapter01-28.jpg

图1-19 加载启动代码

5.新建文件(File)

这样工程就建立好了,如图1-20所示,如果我们单击Target1左边的加号,会出现我们刚才加入的初始化文件STARTUP.A51,这个我们先不管。工程有了之后,我们要建立编写代码的文件,单击File→New,新建一个文件,也就是我们编写源代码的文件。

978-7-111-55685-5-Chapter01-29.jpg

图1-20 新建文件

6.保存文件

然后单击File→Save或者直接单击Save快捷键,这样就可以保存该文件,保存时我们把它命名为“点亮一个发光二极管.c”。后缀为.c的是C语言源程序,后缀名.asm为汇编语言源程序,后缀名为.h是头文件,后缀名为.txt是文本文件。请读者务必将文件保存为.c文件,如图1-21所示。

978-7-111-55685-5-Chapter01-30.jpg

图1-21 保存文件

7.加载文件

我们每做一个功能程序,必须要新建一个工程,一个工程代表了单片机要实现的一个功能。但是一个工程,有时候我们可以把程序分为多个文件进行编写,所以每编写一个文件,我们都要添加到我们所建立的工程中去,用鼠标右键单击Source Group 1,单击Add Filesto Group‘Source Group1’,如图1-22所示。

978-7-111-55685-5-Chapter01-31.jpg

图1-22 加载文件a

在弹出的对话框中,单击“点亮一个发光二极管.c”并选中它,然后单击Add,或者直接双击“点亮一个发光二极管.c”都可以将文件加入到这个工程下,然后单击Close,关闭添加。这个时候读者会看到在Source Group 1下边又多了一个“点亮一个发光二极管.c”文件,如图1-23所示。

978-7-111-55685-5-Chapter01-32.jpg

图1-23 加载文件b

8.编写程序

打开新加载的.c文件,并输入如图1-24所示的源程序。

978-7-111-55685-5-Chapter01-33.jpg

图1-24 点亮发光二极管的源程序

对图1-24源程序简单介绍如下。

978-7-111-55685-5-Chapter01-34.jpgmain是主函数的函数名字,每一个C程序都必须有且仅有一个main函数。

978-7-111-55685-5-Chapter01-35.jpgvoid是函数的返回值类型,本程序没有返回值,用void表示。

978-7-111-55685-5-Chapter01-36.jpg{}必须成对出现。

978-7-111-55685-5-Chapter01-37.jpg每条C语言语句以“;”(分号)结束。

978-7-111-55685-5-Chapter01-38.jpg合理使用缩进。

978-7-111-55685-5-Chapter01-39.jpgC语言是严格区别大小写的!上文中除了用户自己定义的LED外,其他的都属于关键字(保留字),必须严格遵守大小写!(用户自己定义的变量,一般要做到顾名思义,一旦定义好,其大小写就确定了,比如这里的LED,你就不能在使用时写成Led之类的)。

动一动

请读者查阅附录B,找出图1-24中符号include、sbit、void、main、while等的功能,上述符号是否可以随意变更大小写?

9.编译程序

单击编译按钮,如图1-25所示。

978-7-111-55685-5-Chapter01-40.jpg

图1-25 全部编译并链接

当出现0 Error(s),0 Warning(s).说明没有错误且没有警告,如图1-26所示。这时可以下载程序了。

978-7-111-55685-5-Chapter01-41.jpg

图1-26 编译结果

10.下载程序

若编译前未对工程选项(Options)按照图1-27所示进行设置,请先设置后,重新编译程序,若无错误则会生成一个.hex的文件。.hex类型文件就是我们要下载到单片机中的目标程序(十六进制)。

STC15系列单片机下载程序十分简单,只需将P3.0(RxD接收)和P3.1(TxD发送)两根通信线分别接到另一方对应的TxD(接收)和RxD(发送),同时给单片机供电,即可实现程序下载。考虑到不少笔记本,包括部分台式机不再使用COM口,这里推荐使用USB转TTL方式实现用户程序的下载,常用的芯片是CH340T。接线示意图如图1-28所示(摘自STC数据手册)。应特别注意的是:单片机的TxD必须接到CH340G的RxD,单片机的RxD必须接到CH340G的TxD。

978-7-111-55685-5-Chapter01-42.jpg

图1-27 工程选项设置

978-7-111-55685-5-Chapter01-43.jpg

图1-28 下载程序接线图

到此,恭喜你——点亮了第一个发光二极管!

动一动

请编写控制程序,点亮第0、2、4、6四个指示灯,并给出注释,编译完毕后下载验证。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈