在第上一课中,我们主要讲了keil软件的使用及如何使用keil软件建立一个工程文件,下面我们就使用C语言编写一个程序点亮实验板上的一个发光二极管。首先我们来讲一下发光二极管的发光原理。
1、发光二极管发光原理
发光二极管简称LED,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。 当在LED发光二极管PN结上加正向电压时, P区的空穴注入到N区,N区的电子注入到P区,这空穴与电子相复合时产生的能量大部分以光的形式出现,因此而发光,并且根据释放能量的不同能发出不同波长的光,在电路或仪器中可用作指示灯,也可以组成文字或显示器件。
发光二极管按封装(这里可以暂理解为外形)可分为直插式和贴片式的两种,按发光颜色可分为红色、蓝色、绿色等,如图1所,上面为帖片发光二极管,下边为直插式的发光二极管。
图1 发光二极管
LED工作时,应该串接一个限流电阻,该电阻的阻值大小应根据不同的使用电压和LED所需工作电流来选择。LED发光二极管的压降一般为1.5~3.0 V(红色和黄色一般为2V。其它颜色一般为3V),其工作电流一般取10~20 mA为宜。其限流电阻的计算公式为R=(U-UL)/I,U为电源电压,UL为发光二极管正常发光时端电压,I为发光二极管的电流。
以上是发光二极管的基础知识,但这里只说了一些重要的性质和参数,实际在做电路时还要考虑到其它的因素,如各种种样的封装尺寸以及价格等,下面说一下如何通过编程让实验板上的一个发光二极管发光。
学过电子技术的人应该知道,要让一个发光二极管发光我们可能采用如下电路实现,如图2,这里只要限流电阻选择恰当,就可以让发光二极管发光。
图2 全硬件电路实现发光二极管发光
下面我们把电路稍作变化,如图3,把图2中接地的一端直接接到单片机的P1口的第1个引脚上,大家想想现在怎么才能让发光二极管发光呢?可能大家马上会说出,让单片机第1脚输出低电压,而单片机的引脚可以输出0和1两种电平,0代表低电平也就是低电压,1代表高电平也就高电压这个我们在前面的课程中讲过,也就是说我们现在只要能通过程序让每1脚输出0就可以了。[page]
图3 单片机实现发光二极管发光的原理图
为了便于演示结果,我们先给出实验板上的原理图,如图4所示,8个发光二极管通过一个排阻,再通过一个跳线帽接电源的正极5V,而所有管的负极则分别接到单片机的P1口的8个引脚上。关于跳线帽这里就不解释了,下面先说下排阻吧。
所谓排阻,其实就是一排若干个参数完全相同的电阻,主要有有直插和贴片两种形式,如图5所示。它们的一个引脚都连到一起,作为公共引脚,其余引脚正常引出,通常最左边的那个是公共引脚,它在排阻上一般用一个色点标出来。如图4所示,8个发光二极管阴极接单片机P1口的8个引脚,阳极分别接8个电阻的一端,然后电阻的另一端全部接在一起由1脚引出,然后通过跳线帽直接接电源的正极5V。采用排阻直接代替8个电阻,这样不仅可以缩小电路板尺寸,而且也提高的焊点的可靠性。
图4 实验板上的8个发光二极管
图5 直插排阻和贴片的排阻
2、发光二极管及流水灯程序
2.1 点亮第一个发光二极管
上面我们介绍了发光二极管的发光原理,同时对实验板上的原理图作了相应的分析,下面给出点亮第一个发光管具体程序。关于工程文件的建立,前面已经详细的讲过,这里不在叙述,这里我们点击keil软件,建立工程LED1,然后建立文件LED1,最后输入程序如下。
例1 点亮第一个发光二极管程序
(2)输入源程序(又称为程序编辑)
#include//52系列单片机头文件
sbit D1=P1^0;//位定义单片机P1口的第1位
void main()//主函数
{
D1=0;//点亮第一个发光二极管
}
输入上面程序时,keil软件会自动识别C51的关键字,如本程序中的include、sbit、void,并会以不同的颜色加以提示,如果输入有误,则不会变颜色,这样就可以使得程序编写者减少输入错误,提高编程质量,当然这一系列的前提是,建立文件时必须先保存才会出现这种效果,这个也是我们上一节讲的为什么文件建好后最好先进行保存的原因。
(2)程序的编译与错误检查
程序输入完毕后,下一步的工作就是对文件进行编译和错误检查与排除。
图6 输入代码后的界面[page]
如图6所示,为程序输入后的界面。点击全部编译快捷按钮
,此时会进入编译后的界面如图7.
图7 编译后的界面
在图7中我们会下到最下边的编译对话框里会多出几行字,具体的含义如下:
创建目标“Target1”
编译文件led1.c…
链接…
程序大小:内部RAM= 9.0个字节 外部RAM =0个字节,ROM空间=18字节
工程“led1”0错误,0警告。
这就表示程序语法上没有错误,当然如果有错误,刚编译不能通过,现在我们更改程序,如我们把“sbit D1=P1^0; ”后面的“; ”,再次编译,此时会出现错误提示界面如图8所示。
图8编译错误的界面
此时双击错误提示行(图8蓝色行),会有在程序中出现一个箭头,错误信息就出现在箭头附近,这里相当于一个提示,此时根据该提示信息,就可以快速的找到程序错误的地方。
(3)程序下载
在下载程序到单片机之前,我们还需做一步工作就是生成“HEX”文件生成的设置,因为单片机只能认识0和1之类的二进制数字代码,也就是说再复杂的程序最终下载到单片机内部都只能是一连串的二进数。单片机允许下载HEX文件和BIN文件,BIN是二进制文件,是binary的简称,可直接下载到单片机内部,HEX是十六进制文件,是hexadecimax的简称,下载时经过下载软件,又被翻译成二进制文件,最终下载到单片机里。
Keil软件可以直接输出HEX文件,但需要设置。此时回到编辑界面,然后点击Project Opitions for Targtet ‘Target 1’选项,或直接点击界面左上角快捷方式按钮
,出现设置界面如图9。选择Output选项,然后在Creat Hex file选项前打钩,然后点击确定即可。
图9 hex文件输出设置窗口
HEX文件设置后,会重新回到编辑界面,此时再次点击全部编译按键,此时会在最后面的编译信息窗口看到多出了creating hex file from “led1”…,如图10所示此时表明在工程文件中生成了hex文件,这个
图10 生成hex文件后的窗口
此时我们用ISP软件将来此HEX文件下载到实验板中,看到的实验现象如图11所示。
图11 第一个发光二极管发光的实验现象