(一)
LED(light-emitting diode),即发光二极管,俗称 LED 小灯,它的种类很多,参数也不尽相同,我们板子上用的是普通的贴片发光二极管。这种二极管通常的正向导通电压是 1.8V到 2.2V 之间,工作电流一般在 1mA~20mA 之间。其中,当电流在 1mA~5mA 之间变化时,随着通过 LED 的电流越来大,我们的肉眼会明显感觉到这个小灯越来越亮,而当电流从5mA~20mA 之间变化时,我们看到的发光二极管的亮度变化就不是太明显了。当电流超过20mA 时,LED 就会有烧坏的危险了,电流越大,烧坏的也就越快。所以我们在使用过程中应该特别注意它在电流参数上的设计要求。那么下面我们来看一下这个发光二极管在开发板上的设计应用。首先来看图 2-3。(不喜欢看文字?登录乐搏学院官网,里面有海量的免费在线课程等你来学习)
图 2-3 是我们开发板上的 USB 接口电路,通过 USB 线,电脑给我们的开发板供电和下载程序以及实现电脑和开发板之间的通信。从图上可以看出,USB 座共有 6 个接口,其中 2脚和 3 脚是数据通信引脚,1 脚和 4 脚是电源引脚,1 脚是 VCC 正电源,4 脚是 GND 即地线。5 脚和 6 脚是外壳,我们直接接到了 GND 上,大家可以观察一下开发板上的这个 USB座的 6 个引脚。我们现在主要来看 1 脚 VCC 和 4 脚 GND。1 脚通过 F1(自恢复保险丝)接到右侧,在正常工作的情况下,保险丝可以直接看成导线,因此左右两边都是 USB 电源+5V,自恢复保险丝的作用是,当你后级电路哪个地方有发生短路的时候,保险丝会自动切断电路,保护开发板以及电脑的 USB 口,当电路正常后,保险丝会恢复畅通,正常工作。右侧有 2 条支路,第一条是在+5V 和 GND 接了一个 470uF 的电容,电容是隔离直流的,所以这条支路是没有电流的,电容的作用,我们下节课再介绍,这节课我们主要看第二条支路。我们把第二条支路摘取出来就是如图 2-4 这个样子。
发光二极管是二极管中的一种,因此和普通二极管一样,这个二极管也有阴极和阳极,习惯上也称之为负极和正极。原理图里的 LED 画成这样方便在电路上观察,方向必须接对了才会有电流通过让LED 小灯发光。刚才提到了我们接入的 VCC 电压是 5V,发光二极管自身压降大概是 2V,那么在右边R34 这个电阻上承受的电压就是 3V。那么现在我们要求电流
范围是 1~20mA 的话,就可以根据欧姆定律 R=U/I,把这个电阻的上限和下限值求出来。U=3V,当电流是 1mA 的时候,电阻值是 3K;当电流是 20mA 的时候,电阻值是 150欧,也就是 R34 的取值范围是 150~3K 欧姆。这个电阻值大小的变化,直接可以限制整条通路的电流的大小,因此这个电阻我们通常称之为“限流电阻”。在图 2-3 中,我们用的电阻是1K,这条支路电流的大小,我想大家可以轻松计算出来了,而这个发光二极管在这里的作用,
是作为电源指示灯的,使用 USB 线将开发板和电脑连起来,这个灯就会亮了。同理,我们在板子后级开关控制的地方,又添加了一个 LED10 发光二极管,作用就是当我们打开开关时,这个二极管才会亮起,如图 2-5 所示。
大家注意,这里的开关虽然只有一个,但是是 2 路的,2 路开关并联能更好的确保给后级提供更大的电流。电容 C19 和 C10,都是隔离断开直流的,作用我们下节课介绍,这里大家可以忽略。那么下面呢,我们把图 2-4 进行一下变化,把右侧的 GND 去掉,改成一个单片机的 IO口,如图 2-6 所示。
图 2-4 由于电源从正极到负极有电压差,并且电路是导通的,所以就会有电流通过,LED小灯因为有了电流通过,所以就会直接发光。我们把右侧的原 GND 处接到单片机 P0.0 引脚上,那么如果我们单片机输出一个低电平,也就是跟 GND 一样的 0V 电压,就可以让 LED
小灯和图 2-4 一样发光了。因为我们的单片机是可以编程控制的,我们可以让 P0.0 这个引脚输出一个高电平,就是跟 VCC 一样的 5V 电压,那么这个时候,左侧 VCC 电压和右侧的 P0.0 的电压是一致的,那就没有电压差,没有电压差就不会产生电流,没有电流 LED 小灯就不会亮,也就是会处于熄灭状态。下面,我们就用我们的编程软件来实现控制小灯的亮和灭。
(二)
忙活了半天,准备工作做了那么多,终于要编写我们的程序代码了。如果学过 C 语言的话,你应该很轻松的跟着我的编程自己写出来,如果没学过 C 语言也没关系,你先照着我的抄,我会在合适的位置写出来对 C 语言语法的解释,这样抄几次后再看看解释,就应该很明白了,抄的时候一定要认真,尤其标点符号不可以搞错。
先从程序语法上来分析一下。
1、main 是主函数的函数名字,每一个 C 程序都必须有且仅有一个 main 函数。
2、void 是函数的返回值类型,本程序没有返回值,用 void 表示。
3、{}在这里是函数开始和结束的标志,不可省略。
4、每条 C 语言语句以;结束的。
(不习惯浏览文字?登录“乐搏学院”官网,搜索“单片机”免费学习视频课程,还有海量IT技能视频课程等你来,免费让你看够学会)
逻辑上来看,程序这样写就可以了,但是在实际单片机应用中,存在一个问题。比如我们的程序空间可以容纳 100 行代码,但是我们实际上的程序只用了 50 行代码,当运行完了50 行,再继续运行时,第 51 行的程序不是我们想运行的程序,而是不确定的未知内容,一旦执行下去程序就会出错从而可能导致单片机自动复位,所以我们通常在程序中加入一个死循环,让程序停留在我们希望的这个状态下,不要乱运行,有以下两种写法可以参考:
程序一的功能是程序在反复不断的无限次执行 LED = 0;这条语句,而程序二的功能是执行一次,然后程序直接停留下来等待,相对程序一来说程序二更加简洁一些。针对于图 2-6,我们这个程序能够把小灯点亮,但是这个程序却点不亮我们板子上的小灯,这是为什么呢?这里大家就要培养一个意识了,我们做单片机编程,实际上算是硬件底层驱动程序开发,这种程序的开发,是离不开电路图的,必须根据我们的电路图来进行程序的编写。如果我们设计电路板的电路图和图 2-6 一样的话,程序可以成功点亮小灯,但是如果不一样,就可能点不亮。我们的开发板上,还有一个 74HC138 作为 8 个 LED 小灯的总开关,而 P0.0 仅仅是个分开关。如同我们家里总是有一个供电总闸,然后每个电灯又有一个专门的开关,我们刚才的程序仅仅打开了那个电灯的开关,但是没有打开那个总电闸,所以程序需要加上这部分代码。
因为这节课要介绍的内容比较多,所以我们把 74HC138 的原理以及为什么要加额外的代码在下节课统一介绍,这节课我们直接加上这部分代码,大家知道有这么一回事就可以了。
虽然仅仅提供给大家简单学习使用,但是我们也得按照实际产品的开发模式去设计,所以综合考虑因
素很多,大家学到后边就会明白它的设计价值了,这里大家只要跟着我们去做就可以了。程序编好了,我们要对我们的程序进行编译,生成我们需要的可以下载到单片机里的文件,在编译之前,我们先要勾选一个选项,Project-->Options for Target ‘Target1’...,或者直接点图 2-17 中红框内的快捷图标:
在弹出的对话框中,点击 Output 选项页,勾选其中的“Create HEX File”复选框,然后
点 OK,如图 2-18 所示。
设置好以后呢,点击“Project-->rebuild all target files”,或者鼠标点击图 2-19 中红框内的
快捷图标,就可以对程序进行编译了。
编译完成后,在我们的 Keil 下方的 Output 窗口会出现相应的提示,大家注意看图 2-20,这个窗口告诉我们编译完成后的情况,data=9.0,指的是我们的程序使用了单片机内部的 256字节 RAM 资源中的 9 个字节,code=29 的意思是使用了 8K 代码 Flash 资源中的 29 个字节。当提示“0 Error(s), 0 warning(s)”表示我们的程序没有错误和警告,就会出现“creating hex filefrom “LED”...,意思是从当前工程生成了一个 HEX 文件,我们要下载到单片机上的就是这个HEX 文件。如果出现有错误和警告提示的话,就是 Error 和 warning 不是 0,那么我们就要对程序进行检查,找出问题,解决好了再进行编译产生 HEX 才可以。
到此为止,程序就编译好了,下一章介绍如何把编译好的程序文件下载到单片机里。登录乐搏学院官网,免费学习视频课程,还有更多IT职业课程任你学。