2.1 任务1:点亮一个灯
1.任务要求
用单片机的一个引脚控制一个LED亮起来,要求用位变量改变引脚高/低电平状态,从而使LED亮或灭。
2.任务目标
(1)掌握单片机与LED的接口电路原理,会计算限流电阻的阻值;
(2)理解并会定义引脚的位变量,会根据需要对位变量正确赋值。
3.任务分析
要点亮LED,必须要加合适的正向压降和电流。鉴于单片机的驱动能力,且输出低电平时的电流约是输出高电平时电流的20倍,故LED的阳极接固定5V电平,阴极由单片机控制,如图2-1(a)所示。分析出引脚高/低电平与LED亮/灭的逻辑关系,再由软件设置引脚高/低电平(见图2-1(b))即可控制LED的亮/灭。
图2-1 LED控制电路原理图
2.1.1 一个引脚定义和应用
1.单片机引脚与二进制位
单片机与所能接收、发送的信息只能是数字信息。单片机的信息都是通过4组I/O口——P0、P1、P2、P3来传送的。每组I/O口都有8个引脚。
单片机的一个引脚只能传送一位二制数,为操作方便,就以引脚名代表引脚的位地址,对引脚赋值就是对引脚地址写数据,如“P1.0=0;”直接表现为引脚电平为0,即实现由软件命令控制硬件引脚的电平。一组I/O口的8个引脚就代表8位二进制数,即1字节数据,如图2-2所示。
图2-2 单片机P1口引脚以及引脚与二进制数、十六进制数的关联关系
十六进制数、二进制数及十进制数的对应关系见表2-1。
表2-1 十六进制数、二进制数及十进制数的对应关系
续表
4位二进制数的简便识别方法是使用4位二进制数的权码(23 22 21 20),即8421码。
2.引脚的位定义:sbit
引脚位定义的目的:读取或设置单片机引脚的高/低电平。
位:一个二进制位,内存中最小存储单位,其值可以是“1”或“0”。
定义格式:sbit位名=特殊功能寄存器名^整型常数位编号;
sbit也用来定义其他可寻址的特殊功能寄存器(其地址能被8整除)的位。对存储在bdata的普通变量的位也可用sbit操作。位编号的范围取决于该变量的类型。例如:
sbit定义要求基址对象的存储类型为bdata,否则只有绝对的特殊位定义(sbit)是合法的。位置“^”操作符后的最大值依赖于指定的访问对象类型,对于char、uchar而言是0~7,对于int、uint而言是0~15。
3.用户设置的位定义:bit位名
位类型可以用于变量声明、参数列表和函数返回值。位变量像其他C数据类型一样声明。例如:
2.1.2 定义一组引脚,输入/输出1字节数据
sfr和sfr16是C51扩充的数据类型,用于访问MCS-51单片机中的特殊功能寄存器的数据。
sfr:字节型(8位二进制数)特殊功能寄存器类型,占1个内存单元,利用它可以访问MCS-51内部的所有特殊功能寄存器,如单片机的4组I/O口,即P0、P1、P2、P3。
sfr16:双字节型(16位二进制数)特殊功能寄存器类型,占用两个内存单元,利用它可以访问MCS-51内部的所有两个字节的特殊功能寄存器,如数据指针DPTR。
2.1.3 亮灯逻辑
发光二极管(LED)采用砷化镓、镓铝砷和磷化镓等材料制成。其内部结构为一个PN结,具有单向导电性。LED在制作时,由于使用材料不同,因此可以发出不同颜色的光。LED的发光颜色有红、黄、绿、蓝等。
加在LED两端的电压差超出导通压降时,LED开始工作,导通压降一般为1.7~1.9V。此外,还须保证LED的工作电流。当满足电流和电压的要求时,LED就可以发光了。
电压条件:必须给LED加载正向电压,正向电压为2~5V。
电流条件:达到LED的额定电流为10mA。
如图2-1(a)所示,如果用“1”表示高电平,“0”表示低电平,则当开关SW1接上高电平,即SW1=1时,D1不亮;当开关SW1接上低电平,即SW1=0时,D1亮。D1的亮与灭完全受开关SW1的控制。
如图2-1(b)所示,如果把开关SW1换成单片机的P1.0引脚,单片机引脚输出高、低电平(高电平一般为5V,低电平为0V)就可控制LED的亮/灭。单片机引脚输出高、低电平可通过编程实现。
2.1.4 Proteus界面与元器件操作
在计算机中安装好Proteus后,单击“开始”→→,启动ISIS,进入ISIS界面,如图2-3所示,主要有菜单栏、工具栏、对象选择器、预览窗口、编辑窗口、仿真运行按钮栏等。
图2-3 Proteus的ISIS界面
1.新建电路文件并保存为LED1.DSN
单击菜单“File”→“New Design”,弹出如图2-4所示的新建设计(Create New Design)对话框。单击“OK”按钮,以默认的DEFAULT模板建立一个新的图纸尺寸为A4的空白文件。若单击其他模板,再单击“OK”按钮,则会建立相应尺寸的空白文件。
单击工具按钮,选择路径,输入文件名后,再单击“保存”按钮,完成新建文件操作,文件格式为*.DSN,后缀DSN是系统自动加上的。
若文件已存在,则可单击工具栏中的打开按钮,在弹出的对话框中选择要打开的设计文件(如LED1.DSN)。
2.设置图纸大小
系统默认图纸大小为A4(长×宽为10in×7in)(in为英寸)。在电路设计过程中,若要改变图纸大小,则单击菜单“System”→“Set Sheet Size”,出现如图2-5所示的窗口。可以选择A0~A4其中之一,也可以选中底部“User(自定义)”复选框,再按需要更改右边的长和宽数据。
图2-4 创建新设计文件
图2-5 图纸大小设置窗口
3.ISIS电路设计与仿真界面简介
(1)菜单栏
菜单栏中,File、View、Edit、Tools、Design、Graph、Source、Debug、Library、Template、System、Help分别对应文件、视图、编辑、工具、设计、绘图、源程序、调试、库、模板、系统、帮助。当将鼠标移至它们时,都会弹出下级菜单。
本节重点介绍“File”(文件)、“View”(视图)菜单。
(2)编辑窗口
编辑窗口中的蓝色方框为图纸边界,可在编辑窗口中编辑设计电路(包括单片机系统电路),并能进行Proteus仿真与调试。
(3)对象选择器
对象选择器用来选择放置操作对象。在不同操作模式下,“对象”类型不同。
在元器件模式下,“对象”类型为从库中选取的元器件。
在终端模式下,“对象”类型为电源、地等。
在虚拟仪器模式下,“对象”类型为示波器、逻辑分析仪等。
对象选择器的上方带有一个条形标签,表明当前所处的模式及其下所列的对象类型。如图2-6(a)所示,因当前为元器件模式,所以对象选择器上方的标签为DEVICES。该条形标签的左角有,其中“P”为对象选择按钮,“L”为库管理按钮。
图2-6 对象选择器预览窗口
(4)预览窗口
预览窗口配合对象选择器,可用来预览对象(例如元器件),也可查看编辑窗口的局部或全局。
① 预览元器件等对象。
当单击对象选择器框中的某个对象时,对象预览窗口就会显示该对象的符号,如图2-6(a)所示,预览窗口中显示出晶振的图符。
② 预览窗口跟随编辑窗口同步显示。
单击编辑窗口,预览窗口实时显示编辑窗口内容,会出现蓝色方框和绿色方框。蓝色方框内是编辑窗口的全貌。绿色方框内是当前编辑窗口中在屏幕上的可见部分。
③ 在预览窗口中调整编辑窗口可视内容。
在预览窗口单击后再移动鼠标,绿色方框会改变位置,编辑窗口中的可视区域也相应改变。如图2-6(b)所示,编辑窗口中的可视区域处于整个可编辑窗口的右半部分,即预览窗口中绿色方框的包围部分。若要中断移动,则单击鼠标即可。
(5)仿真运行按钮
仿真运行按钮一般在ISIS窗口左下方,从左至右依次是运行、单步、暂停、停止。
4.元器件的选取与编辑
(1)元器件的选取
元器件的选取如图2-7所示。
图2-7 选取元器件
(2)元器件的编辑
① 放置。单击对象选择器中的元器件(出现蓝色背景条),将光标移至ISIS编辑窗口,单击则出现元器件桃红色高亮轮廓,将该轮廓移至期望位置再单击则完成放置。
② 选中与取消选中。单击编辑窗口中某元器件,则该元器件红色高亮显示,表示选中。若要取消选中,移动光标到编辑窗口中的空白处单击。
③ 移动。
● 单击选中元器件,再按住鼠标左键拖动至期望位置释放鼠标。
● 右击选中元器件,在弹出的对象快捷菜单(见图2-8)中单击“Drag Object”(移动对象),出现桃红色高亮元器件轮廓,移动至期望位置单击放置。
图2-8 对象快捷菜单
● 单击选中元器件,再单击工具栏中工具,出现桃红色高亮元器件轮廓,移动至期望位置单击放置。
④ 转向。
● 对象选择器中的元器件转向:单击对象选择器中元器件,再单击工具栏中转向工具按钮中相应按钮,对象预览窗口显示的元器件相应转向。
● 编辑窗口中的元器件转向:右击元器件,从弹出的快捷菜单(见图2-8)中单击相应的转向按钮。
● 快捷方法:单击选中元器件,再按键盘上的“+”“-”键实现逆时钟转、顺时针旋转。
⑤ 复制。单击选中元器件,再单击工具栏中,出现桃红色高亮元器件轮廓,移至期望位置单击放置。
注意:对元器件进行块复制时会自动编号。用普通的COPY、PAST命令适合对非电气对象进行复制操作,用它们操作元器件,会导致元器件编号重复。
⑥ 删除。
右双击元器件或右击元器件再选择弹出快捷菜单(见图2-8)中的单击命令。
⑦ 块操作(多个元器件同时操作)。
通过按住鼠标左(或右)键拖出包围多个元器件的虚框后再释放,被完全包围的元器件红色高亮显示,表示被选中,再单击工具栏中相应工具按钮,依次实现块复制、块移动、块转向和块删除。
2.1.5 亮一个LED的电路、程序设计
1.电路设计
(1)选择元器件
① 在元器件模式下,选取AT89C51、LED-GREEN、RES、CAP、CAP-ELE、CRYSTAL。复位电阻用PULLDOWN,是为了较好地实现复位按钮的复位仿真效果。
② 在终端模式下,选取电源POWER(默认为5V)、地GROUND。
(2)线路连接
在两个点间进行连线,任一点可为起点或终点,在起点左击鼠标,移动到终点再单击。在移动途中无须按住鼠标左键。
用连线方式将POWER、地GROUND接入合适的地方。
LED的限流电阻值约为300Ω。单片机控制LED电路所用元器件列表及原理图如图2-9所示,保存为LED8.DSN。
图2-9 单片机控制LED电路所用元器件列表及原理图
2.程序设计
根据图2-9(b),LED呈共阳极的接法,阳极固定接高电平,阴极受单片机的引脚控制,故只要单片机引脚输出低电平,LED就能亮。
2.1.6 编译、代码下载、仿真、测判
按1.4.1节所述方法,先在Keil中新建工程led11.uv2,然后添加源程序、设置工程选项并编译。
1.加载目标代码文件*.hex,设置时钟频率
在ISIS编辑窗口中双击AT89C51单片机,弹出如图2-10所示的加载目标代码文件和设置时钟频率的对话框。单击在“Program File”栏右侧按钮,弹出文件列表,从中选择期望的目标代码文件(格式为*.hex),再单击“OK”按钮,完成加载。
图2-10 加载目标代码文件和设置时钟频率
系统默认时钟频率为12MHz,若要改变时钟频率,则在图2-10所示对话框中的“Clock Frequency”(时钟频率)栏中填上时钟频率,再单击“OK”按钮,完成设置时钟频率的操作。
2.仿真调试
单击仿真工具按钮中的进行全速仿真,可看到与P1.0相连的LED亮了。
如要观察各引脚的电平状态,可在Proteus ISIS中,执行菜单命令“System”→“Set Animation Options”,再在弹出窗口中选中“Show Logic State of Pins”(显示引脚逻辑状态)。仿真时,在引脚上将出现红色或蓝色小方块:红色代表高电平,蓝色代表低电平。
实践记录:是否成功?__________。自评分:__________。
2.1.7 STC单片机代码下载
1.下载STC单片机的代码下载软件
从STC官网www.stcmcudata.com下载STC单片机的代码下载软件stc-isp-15xx-v6.86R-zip。
在压缩包中可看到4个文件,如图2-11所示。查看PDF格式的STC-USB驱动安装说明,根据实际的操作系统阅读相应的驱动说明。
图2-11 STC单片机的代码下载软件压缩包
2.连接硬件
对于有串口的PC,可参考图2-12通过RS-232芯片进行电平转换匹配。大多数笔记本电脑未配置9针的串口,取而代之的是USB接口,故从PC下载程序代码时须将USB接口转为可与单片机电平兼容的串口。这类接口转换芯片有CH340G、CH341G或PL2003等,应用时须对接口转换芯片安装驱动程序。单片机通过USB接口转串口芯片与PC连接的下载电路原理图如图2-13所示。另外,也可购买成熟的下载模块。
注意,电源、地、两根串行线(RXD、TXD)的连接,通信的一方TXD连接另一方的RXD,RXD与另一方的TXD相连。
图2-12 单片机与有串口PC连接的下载电路原理图
图2-13 单片机通过USB接口转串口芯片与PC连接的下载电路原理图
3.确认串口
连接硬件后,右击“我的电脑”,选择“管理”→“设备管理器”→“端口(COM和LPT)”→“通信端口”,应该可看到由USB接口转换而虚拟出的串口(COMx)。
4.运行下载软件
安装好驱动后,接入硬件,再运行下载软件,会自动识别串口。代码下载的一般步骤:选择单片机的型号→选择确认串口→打开格式为Bin或Hex的代码文件→下载→上电→等待下载完毕,如图2-14所示。
图2-14 STC单片机代码下载软件操作示意图
5.下载软件的其他功能
STC代码下载软件的右上侧有许多选项卡,提供了丰富的功能。如图2-15所示,下载代码或EEPROM文件时在相应的选项卡可见代码数据,还有些工具软件,如串口助手、波特率计算器、软件延时计算器等。例如,在“官方网站资源”选项卡下还链接了STC官网及常用资源(见图2-16(a)),在“封装脚位”选项卡下可查看芯片脚位(见图2-16(b))。可见,在这个代码下载软件中可找到有关芯片的所有资源。
图2-15 下载软件右上侧菜单中提供的工具及资源
图2-16 代码下载软件“官方网站资源”和“封装脚位”选项卡下的内容
2.1.8 实物制作与上电测试
参考电路原理图制作实物作品,将已编程的单片机安装好,给系统接入5V的电源,应该看到与P1.0引脚相接的LED亮起来了。若不成功,则检查硬件电路排除故障,再上电测试,直到成功。
2.1.9 进阶设计与思路点拨1:亮多个灯
(1)控制P1.1上的LED亮,程序如何修改?
思路点拨:P1.1引脚按位操作时,先用sbit定义后再使用。
(2)控制P1.2上的LED亮,程序如何修改?
(3)控制P1.3上的LED亮,程序如何修改?
(4)控制P1.4上的LED亮,程序如何修改?
(5)控制P1.0、P1.1、P1.7上的LED亮,程序如何修改?
思路点拨:多个引脚按位操作时,均要先用sbit定义。相应的LED要亮,对它们依次赋值为0即可,流程图如图2-17所示。
图2-17 亮多个灯的程序流程图
(6)控制P1.1~P1.6上的LED亮,程序如何修改?
(7)控制P1.7~P1.0上的LED亮,使其表示自己的学号,LED亮表示1,LED灭表示0,程序如何修改?
思路点拨:两位十进制数学号用8位二进制数表示,其十位占高4位,个位占低4位,具体数据分析见表2-2,对这8个控制位依次赋相应的值即可。
表2-2 用LED指示学号的分析表
进一步思考:本设计程序实现的思路如(5)、(6),流程参考图2-17,但这样对8个位依次去赋值,程序较长,书写有点麻烦,简捷的办法是,对8个位同时赋不同的值,即对P1口直接赋值:
2.1.10 进阶设计与思路点拨2:用BCD数码管显示自己的学号
任务要求:用单片机的两组I/O口控制BCD数码管显示自己的两位学号,如P0控制数码管显示学号的十位,P2控制数码管显示学号的个位。
1.认识BCD数码管
本节使用的BCD数码管是带译码器的只有4个引脚的七段数码管,是个简便的显示器,名称为。如图2-18所示,给数码管送4位二进制数,便显示出对应的数字。
图2-18 单片机控制数码管电路原理图
根据图2-18将0~9这10个数对应的二进制数填写在表2-3中。此BCD数码管仿真模型是共阴极的。
表2-3 BCD数码管显示内容与二进制数对应关系
2.参考电路设计
用BCD数码管显示学号电路所用元器件列表及原理图如图2-19所示。
注意:数码管的引脚从左到右依次对应4位二进制数的高到低位,以及数码管引脚高/低位与单片机引脚高/低位对应连接。
图2-19 用BCD数码管显示学号电路所用元器件列表及原理图
3.完成实践报告
参考附录A完成实践报告。