1.2 一个按键控制一只LED亮灭的单片机应用系统开发全过程
1.2.1 明确控制要求并选择合适型号的单片机
1. 明确控制要求
在开发单片机应用系统时,先明确需要实现的控制功能,单片机硬件和软件开发都需围绕着要实现的控制功能进行。如果要实现的控制功能比较多,可一条一条列出来,若要实现的控制功能比较复杂,则需分析控制功能及控制过程,并明确表述出来(如控制的先后顺序、同时进行几项控制等),这样在进行单片机硬、软件开发时才会目标明确。
1-4:明确要求并选择合适型号的单片机
本项目的控制要求是:当按下按键时,LED(发光二极管)亮;松开按键时,LED熄灭。
2. 选择合适型号的单片机
明确单片机应用系统要实现的控制功能后,再选择单片机的种类和型号。单片机的种类很多,不同种类、型号的单片机结构和功能有所不同,软、硬件开发也有区别。
在选择单片机型号时,一般应注意以下几点:
① 选择自己熟悉的单片机。不同系列的单片机内部硬件结构和软件指令或多或少有些不同,而选择自己熟悉的单片机可以提高开发效率,缩短开发时间。
② 在功能够用的情况下,考虑性能价格比。有些型号的单片机功能强大,但相应的价格也较高,而选择单片机型号时功能足够即可,不要盲目选用功能强大的单片机。
目前市面上使用广泛的为51单片机,其中宏晶公司(STC)51系列单片机最为常见,编写的程序可以在线写入单片机,无须专门的编程器,并且可反复擦写单片机内部的程序,另外价格低(5元左右)且容易买到。
1.2.2 设计单片机电路原理图
明确控制要求并选择合适型号的单片机后,接下来就是设计单片机电路,即给单片机添加工作条件电路、输入部件和输入电路、输出部件与输出电路等。图1-5是设计好的用一个按键控制一只发光二极管亮灭的单片机电路原理图,该电路采用了STC公司8051内核的89C51型单片机。
1-5:设计并绘制单片机电路原理图
图1-5 用一个按键控制一只发光二极管亮灭的单片机电路原理图
单片机是一种集成电路,普通的集成电路只需提供电源即可使内部电路开始工作,而要让单片机内部电路正常工作,除了需提供电源外,还需提供时钟信号和复位信号。电源、时钟信号和复位信号是单片机工作必须具备的,提供这三者的电路称为单片机的工作条件电路。
STC89C51单片机的工作电源为5V,电压允许范围为3.8~5.5V。5V电源的正极接到单片机的正电源脚(VCC、40脚),负极接到单片机的负电源(VSS、20脚)。晶振X、电容C2、C3与单片机时钟脚(XTAL2-18脚、XTAL1-19脚)内部的电路组成时钟振荡电路,产生12MHz时钟信号提供给单片机内部电路,让内部电路有条不紊地按节拍工作。C1、R1构成单片机复位电路,在接通电源的瞬间,C1还未充电,C1两端电压为0V,R1两端电压为5V,5V电压为高电平,它作为复位信号经复位脚(RST、9脚)送入单片机,对内部电路进行复位,使内部电路全部进入初始状态,随着电源对C1充电,C1上的电压迅速上升,R1两端电压则迅速下降,当C1上充电电压达到5V时充电结束,R1两端电压为0V(低电平),单片机RST脚变为低电平,结束对单片机内部电路的复位,内部电路开始工作,如果单片机RST脚始终为高电平,内部电路则被钳制在初始状态,无法工作。
按键S闭合时,单片机的P1.2脚(3脚)通过S接地(电源负极),P1.2脚输入为低电平,内部电路检测到该脚电平再执行程序,让P0.3脚(36脚)输出低电平(0V),发光二极管VD导通,有电流流过VD(电流途径是:5V电源正极→R2→VD→单片机的P0.3脚→内部电路→单片机的VSS脚→电源负极),VD点亮;按键S松开时,单片机的P1.2脚(3脚)变为高电平(5V),内部电路检测到该脚电平再执行程序,让P0.3脚(36脚)输出高电平,发光二极管VD截止(即VD不导通),VD熄灭。
1.2.3 制作单片机电路
按控制要求设计好单片机电路原理图后,还要依据电路原理图将实际的单片机电路制作出来。制作单片机电路有两种方法:一种是用电路板设计软件(如Protel99SE软件)设计出与电路原理图相对应的PCB图(印制电路板图),再交给PCB板厂生产出相应的PCB电路板,然后将单片机及有关元件安装焊接在电路板上即可;另一种是使用万能电路板,将单片机及有关元件安装焊接在电路板上,再按电路原理图的连接关系用导线或焊锡将单片机及元件连接起来。前一种方法适合大批量生产,后一种方法适合少量制作实验,这里使用万能电路板来制作单片机电路。
图1-6是一个按键控制一只发光二极管亮灭的单片机电路元件和万能电路板(又称洞洞板)。在安装单片机电路时,从正面将元件引脚插入电路板的圆孔,在背面将引脚焊接好,由于万能电路板各圆孔间是断开的,故还需要按电路原理图连接关系,用焊锡或导线将有关元件引脚连接起来,为了方便将单片机各引脚与其他电路连接,在单片机两列引脚旁安装了两排20脚的单排针,安装时将单片机各引脚与各自对应的排针脚焊接在一起,暂时不用的单片机引脚可不焊接。制作完成的单片机电路如图1-7所示。
图1-6 一个按键控制一只发光二极管亮灭的单片机电路元件和万能电路板
1-6:制作单片机电路
图1-7 制作完成的单片机电路
1.2.4 用Keil 软件编写单片机控制程序
单片机是一种软件驱动的芯片,要让它进行某些控制就必须为其编写相应的控制程序。KeilμVision2是一款最常用的51单片机编程软件,在该软件中可以使用汇编语言或C语言编写单片机程序。Keil μVision2的安装和使用在后面章节会详细说明,故下面只对该软件编程进行简略介绍。
1. 编写程序
在电脑屏幕桌面上执行“开始→程序→Keil μVision2”菜单命令,如图1-8所示,Keil μVision2软件打开,如图1-9所示。在该软件中新建一个项目“一个按键控制一只LED亮灭.Uv2”,再在该项目中新建一个“一个按键控制一只LED亮灭.c”文件,如图1-10所示,然后在该文件中用C语言编写单片机控制程序(采用英文半角输入),如图1-11所示。最后点击工具栏上的(编译)按钮,将当前C语言程序转换成单片机能识别的程序,在软件窗口下方出现编译信息,如图1-12所示,如果出现“0 Error(s), 0 Warning(s)”,表示程序编译通过。
1-7:用Keil软件编写单片机控制程序
图1-8 在电脑屏幕桌面上执行“开始→程序→Keil μVision2”菜单命令
图1-9 Keil μVision2软件打开
图1-10 新建一个项目并在该项目中新建一个“一个按键控制一只LED亮灭.c”文件
图1-11 在“一个按键控制一只LED亮灭.c”文件中用C语言编写单片机程序
图1-12 点击编译按钮将C语言程序转换成单片机可识别的程序
C语言程序文件(.c)编译后会得到一个十六进制程序文件(.hex),如图1-13所示,利用专门的下载软件将该十六进制程序文件写入单片机,即可让单片机工作而产生相应的控制。
图1-13 C语言程序文件被编译后就得到一个可写入单片机的十六进制程序文件
2. 程序说明
“一个按键控制一只LED亮灭.c”文件的C语言程序说明,如图1-14所示。在程序中,如果将“LED=KEY”改成“LED=!KEY”,即让LED(P0.3端口)的电平与KEY(P1.2端口)的反电平相同,这样当按键按下时P1.2端口为低电平,P0.3端口则为高电平,LED灯不亮。如果将程序中的“while(1)”改成“while(0)”,while函数大括号内的语句“LED=KEY”不会执行,即未将LED(P0.3端口)的电平与KEY(P1.2端口)对应起来,操作按键无法控制LED的亮灭。
1-8:一个按键控制一只LED亮灭文件的C语言程序说明
图1-14 “一个按键控制一只LED亮灭.c”文件的C语言程序说明
1.2.5 计算机、下载(烧录)器和单片机的连接
1. 计算机与下载(烧录)器的连接与驱动
计算机需要通过下载器(又称烧录器)才能将程序写入单片机。图1-15是一种常用的USB转TTL的下载器,使用它可以将程序写入STC单片机。
1-9:下载器及驱动程序的安装
图1-15 USB转TTL的下载器及连接线
在将下载器连接到计算机前,需要先在计算机中安装下载器的驱动程序,再将下载器插入计算机的USB接口,计算机才能识别并与下载器建立联系。下载器驱动程序的安装如图1-16所示,由于计算机操作系统为Windows XP,故选择与Windows XP对应的驱动程序文件,双击该文件即开始安装。
图1-16 安装USB转TTL的下载器的驱动程序
驱动程序安装完成后,将下载器的USB插头插入计算机的USB接口,计算机即可识别出下载器。在计算机的“设备管理器”中查看下载器与计算机的连接情况,在计算机屏幕桌面上右击“我的电脑”,在弹出的菜单中点击“设备管理器”(图1-17)命令,弹出“设备管理器”窗口,展开其中的“端口(COM和LPT)”选项,可以看出下载器的连接端口为COM3,下载器实际连接的为计算机的USB端口,COM3端口是一个模拟端口,记下该端口序号以便下载程序时选用。
图1-17 查看下载器与计算机的连接端口序号
2. 下载器与单片机的连接
USB转TTL的下载器一般有5个引脚,分别是3.3V电源脚、5.0V电源脚、TXD(发送数据)脚、RXD(接收数据)脚和GND(接地)脚。
下载器与STC89C51单片机的连接如图1-18所示,从图中可以看出,除了两者电源正、负脚要连接起来外,下载器的TXD(发送数据)脚与STC89C51单片机的RXD(接收数据)脚(10脚,与P3.0为同一个引脚),下载器的RXD脚与STC89C51单片机的TXD脚(11脚,与P3.1为同一个引脚)。下载器与其他型号的STC-51单片机连接基本相同,只是对应的单片机引脚序号可能不同。
图1-18 下载器与STC89C51单片机的连接
1.2.6 用烧录软件将程序写入单片机
1. 将计算机、下载器与单片机电路三者连接起来
要将在计算机中编写并编译好的程序下载到单片机中,需先将下载器与计算机及单片机电路连接起来,如图1-19所示,然后在计算机中打开STC-ISP烧录软件,用该软件将程序写入单片机。
1-10:用烧录软件通过下载器将程序写入单片机
图1-19 计算机、下载器与单片机电路三者的连接
2. 打开烧录软件将程序写入单片机
STC-ISP烧录软件只能烧写STC系列单片机,它分为安装版本和非安装版本,非安装版本使用更为方便。图1-20是STC-ISP烧录软件非安装版本,双击“STC_ISP_V483.exe”文件,打开STC-ISP烧录软件。用STC-ISP烧录软件将程序写入单片机的操作如图1-21所示。需要注意的是,在点击软件中的“Download/下载”按钮后,计算机会反复往单片机发送数据,但单片机不会接收该数据,这时需要切断单片机的电源,几秒后再接通电源,单片机重新上电后检测到计算机发送过来的数据,会将该数据接收下来并存到内部的程序存储器中,从而完成程序的写入。
图1-20 打开非安装版本的STC-ISP烧录软件
图1-21 用STC-ISP烧录软件将程序写入单片机的操作
图1-21 用STC-ISP烧录软件将程序写入单片机的操作(续)
1.2.7 单片机电路的供电与测试
程序写入单片机后,再给单片机电路通电,测试其能否实现控制要求,如若不能,需要检查是单片机硬件电路的问题,还是程序的问题,并解决这些问题。
1. 用计算机的USB接口通过下载器为单片机供电
在给单片机供电时,如果单片机电路简单、消耗电流少,可让下载器(需与计算机的USB接口连接)为单片机提供5V或3.3V电源,该电压实际来自计算机的USB接口,单片机通电后再进行测试,如图1-22所示。
1-11:单片机电路通电测试
图1-22 利用下载器(需与计算机的USB接口连接)为单片机提供电源
2. 用USB电源适配器给单片机电路供电
如果单片机电路消耗电流大,需要使用专门的5V电源为其供电。图1-23是一种手机充电常见的5V电源适配器及数据线,该数据线一端为标准USB接口,另一端为Micro USB接口,在Micro USB接口附近将数据线剪断,可看见有4根不同颜色的线,分别是“红-电源线(VCC,5V+)”、“黑-地线(GND,5V-)”、“绿-数据正(DATA+)”和“白-数据负(DATA-)”,将绿、白线剪短不用,红、黑线剥掉绝缘层露出铜芯线,再将红、黑线分别接到单片机电路的电源正、负端,如图1-24所示。USB电源适配器可以将220V交流电压转换成5V直流电压,如果单片机的供电不是5V而是3.3V,可在5V电源线上再串接3只整流二极管,由于每个整流二极管电压降为0.5~0.6V,故可得到3.2~3.5V的电压,如图1-25所示。
图1-23 USB电源适配器与电源线制作
图1-24 将正、负电源线接到单片机电路的电源正、负端
图1-25 利用3只整流二极管可将5V电压降低成3.3V左右的电压
用USB电源适配器给单片机电路供电并进行测试,如图1-26所示。
图1-26 用USB电源适配器给单片机电路供电并进行测试