1.1 任务1 点亮一个LED

工作任务

使用STC89C52单片机,将P1.0引脚接LED(发光二极管)的阴极,用C语言程序控制,从P1.0引脚输出低电平,使LED点亮。

1.1.1 用Proteus设计第一个LED控制电路

1. Proteus仿真软件简介

本书使用Proteus 7.5 SP3 Professional中文版。Proteus是英国Labcenter Electronics公司开发的多功能电子设计自动化(EDA)软件。Proteus不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,也是目前较先进的单片机和嵌入式系统的设计与仿真平台。它可以在计算机上实现从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成印刷电路板(PCB)的完整的电子设计研发过程。

2. “点亮一个LED”电路设计分析

按照任务要求,“点亮一个LED”电路由STC89C52单片机、时钟电路、复位电路和LED电路等构成。STC89C52单片机是宏晶公司推出的新一代高速、低功耗、超强抗干扰、超低价的单片机。

LED加正向电压发光,反之不发光。一般接法是阳极接高电平,阴极接单片机的某一输出口线。当输出口线为低电平时,LED亮;当输出口线为高电平时,LED不亮。这样我们只要编程控制单片机的输出口的电平,就可控制LED亮或灭。

在本任务中,LED阳极通过220Ω限流电阻连接到5V电源上。电阻在这里起到了限流的作用,使通过LED的电流被限制在十几毫安左右。P1.0引脚接LED的阴极,P1.0引脚输出低电平时对应的LED点亮,输出高电平时对应的LED熄灭。“点亮一个LED”电路设计如图1-1所示。

图1-1 电路设计

3. 用Proteus制作“点亮一个LED”电路

这里介绍两种运行Proteus仿真软件的方法。第一种是双击桌面上的ISIS 7 Professional图标;第二种是依次单击屏幕左下方的“开始”→“程序”→“Proteus 7 Professional”→“ISIS 7 Professional”,进入Proteus ISIS集成环境,如图1-2所示。

图1-2 Proteus ISIS集成环境

(1)新建设计文件

单击“文件”→“新建设计”,在弹出的“新建设计”对话框中选择“DEFAULT”模板后单击“确定”按钮,如图1-3所示。

图1-3 “新建设计”对话框

(2)设置图纸尺寸

单击“系统”→“设置图纸大小”,在弹出的“Sheet Size Configuration”对话框中选择“A4”图纸尺寸或自定义尺寸后单击“确定”按钮。

(3)设置网格

单击“查看”→“网格”,显示网格(再次单击,网格隐藏)。单击“查看”→“Snap xxth”(或Snap x.xin)可改变网格单位,默认为“Snap 0.1in”。

(4)保存设计文件

单击“文件”→“保存设计”,在弹出的“保存ISIS设计文件”对话框中指定文件夹,输入文件名“点亮一个LED”,并选择保存类型为“设计文件(*.DSN)”后单击“保存”按钮。

(5)添加元器件

单击模式选择工具栏的“元件”按钮50421-00-013-2,单击“器件选择”按钮50421-00-013-3,弹出“Pick Devices”(选取元器件)对话框,在“关键字”栏中输入元器件名称“AT89C52”,与关键字匹配的元器件“AT89C52”显示在元器件列表中,如图1-4所示。

图1-4 “Pick Devices”对话框

双击选中的元器件“AT89C52”,便可将所选元器件“AT89C52”加入到对象选择器窗口,单击“确定”按钮完成元器件选取。

用同样的方法可以添加其他元器件。在“点亮一个LED”电路中,需要添加AT89C52单片机、CRYSTAL(晶振)、CAP(电容)、CAP-ELEC(电解电容)、RES(电阻)、LED-RED(红色发光二极管)等元器件。

注意

Proteus仿真软件中没有STC89C52、AT89S52等单片机,可以用AT89C52代替(然后修改为STC89C52即可),也可以选择其他51类型,不影响本书中相关电路的学习。

(6)放置元器件

单击对象选择器窗口的元器件“AT89C52”,元器件名“AT89C52”变为蓝底白字,预览窗口显示“AT89C52”元器件;单击方向工具栏的按钮可实现元器件的左旋、右旋、水平和垂直翻转,以调整元器件的摆放方向;将鼠标指针移到编辑区某一位置,单击一次就可放置元器件“AT89C52”。

参考上述放置AT89C52单片机的步骤,依照图1-1放置其他元器件。

(7)编辑元器件

单击模式选择工具栏的“编辑”按钮50421-00-014-1,进入编辑状态。右击(或单击)元器件,元器件若变为红色,表明被选中,将鼠标指针放到被选中的元器件上,按住左键拖动到编辑区某一位置松开,即完成元器件的移动。将鼠标指针放到被选中的元器件上右击,利用弹出的快捷菜单中的方向工具栏按钮可实现元器件的旋转和翻转。右击被选中的元器件,可删除该元器件。在被选中的元器件外单击,可撤销选中。

按照上述编辑方法,依照图1-1所示的元器件位置,对已放置的元器件进行位置调整。

(8)放置终端

单击模式选择工具栏的“终端”按钮50421-00-014-2,单击对象选择器窗口的电源终端“POWER”,该终端名的背景变为蓝色,预览窗口中也将显示该终端;单击方向工具栏的“左旋转”按钮50421-00-014-3,电源终端逆时针旋转90°;将鼠标指针移到编辑区某一位置,单击一次可放置一个终端。用同样的方法放置接地终端“GROUND”。

(9)连线

单击命令工具栏的“实时Snap(捕捉)”按钮50421-00-014-4,使实时捕捉有效(再次单击,实时捕捉无效)。当鼠标指针接近引脚末端时,该处会自动出现一个小方框“□”,表明可以自动连接到该点。依照图1-1所示,单击要连线的元器件起点和终点,完成连线。

(10)属性设置

右击元器件电容C1,弹出快捷菜单,单击“编辑属性”选项,弹出“编辑元件”对话框,如图1-5所示。将电容量改为30pF,单击“确定”按钮完成元器件电容C1属性的编辑设置。用同样方法设置其他元器件的属性。

(11)电气规则检测

单击Proteus ISIS集成环境中的“工具”→“电气规则检查”,弹出检查结果窗口,完成电气检测。若检测出错,根据提示修改电路图并保存,直至检测成功。电气规则检查窗口如图1-6所示。

图1-5 “编辑元件”对话框

图1-6 电气规则检查窗口

1.1.2 用Keil C51设计第一个C语言LED控制程序

1. Keil C51简介

Keil C51是众多单片机应用开发软件中最优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,集编辑、编译、仿真等功能于一体,和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序、软件仿真方面都有很强大的功能。

Keil C51提供丰富的库函数和功能强大的集成开发调试工具。本书中使用Keil μVision4。Keil μVision4集成开发环境可以完成工程建立和管理、编译、连接、目标代码生成、软件仿真和硬件仿真等一系列完整的开发流程,是一款公认的功能强大的单片机开发平台。

2. 编写“点亮一个LED”的程序

由于P1.0引脚接LED的阴极,LED的阳极通过220Ω限流电阻后连接到5V电源上,所以从P1.0引脚输出低电平就可以点亮LED。“点亮一个LED”的C语言程序如下:

#include <reg52.h>        //包含reg52.h头文件 
sbit LED=P1^0;            //定义LED 为P1.0 引脚 
void main (void) 
{ 
   LED=0;                 //P1.0 引脚输出低电平点亮LED 
   while(1); 
} 

程序编程说明:

(1)“#include<reg52.h>”语句是一个“文件包含”处理语句,是将reg52.h头文件的内容全部包含进来。该程序中包含reg52.h头文件的目的是使用“P1^0”这个符号,即通知C编译器,程序中所写的P1^0是指STC89C52单片机的P1.0引脚。

(2)P1.0不能直接使用,“sbit LED=P1^0;”就是定义用符号LED来表示P1.0引脚,当然也可以用P1_0或P10之类的名字。

(3)“LED=0;”语句是使P1.0引脚输出低电平,点亮发光二极管LED。

(4)“while(1);”语句的表达式是1,也就是说,while语句的表达式始终为真,进入死循环,LED始终点亮。

(5)Keil C支持C++风格的注释,可以用“//”进行注释,也可以用/ *……* /进行注释。

3. 建立第一个Keil C51工程项目

首先我们要养成一个习惯,先建立一个空文件夹,把工程文件放到里面,避免和其他文件混合。在这里我们创建了一个名为“Mytest”的文件夹。

接下来运行Keil μVision4,第一种方法是双击桌面上的Keil μVision4图标;第二种方法是依次单击桌面左下方的“开始”→“程序”→“Keil μVision4”,进入Keil μVision4集成开发环境,如图1-7所示。

图1-7 Keil μVision4集成开发环境

(1)建立工程文件,选择单片机

单击“工程”→“新建工程”,在弹出的“新建工程”对话框中选择刚才建立的“Mytest”文件夹,并输入文件名“点亮一个LED”,不需要加扩展名,单击“保存”按钮,弹出“Select Device for Target‘Target 1’”对话框,如图1-8所示。

在CPU选项卡中,单击左侧列表框中“STC-STC89”项前面的“+”号,展开该层,单击选中列表中的“STC89C52RC”。

注意

由于Keil μVision4中没有STC单片机,可以在安装Keil μVision4时添加STC单片机。在这里可以选择STC89C52RC单片机,也可以选择52和51等其他类型的单片机,不影响本书中用到的程序运行。

图1-8 选择单片机窗口

(2)添加启动文件

单击“OK”按钮,弹出“Copy‘STARTUP.A51’ to Project Folder and Add File to Project?”对话框,询问是否复制、添加单片机启动文件到我们的工程项目中去。对于初学者来说,这里先单击“否”按钮,如图1-9所示。

图1-9 是否添加启动文件界面

STARTUP.A51启动文件是一段和硬件相关的汇编代码,其作用是对单片机内外部的数据存储器RAM初始化清零、对堆栈进行初始化设置等。执行完启动文件后,就跳转到.c文件的main函数。单击“否”按钮,对RAM初始化清零将采用默认方式。

(3)建立源文件

单击“文件”→“新建”,在文件编辑窗口中输入“点亮一个LED”C语言源程序,如图1-10所示。

图1-10 文件编辑窗口

单击“文件”→“保存”,在弹出的“另存”对话框中指定文件夹(一般与工程文件放在同一文件夹中),输入文件名“点亮一个LED.c”(C语言源程序的后缀名是“.c”),单击“保存”按钮,完成源文件的建立。

此时就可以看到,程序文本字体颜色已经发生了变化。

(4)添加源文件到工程项目文件中

在工程窗口中右击“Target 1”文件夹下的“Source Group 1”文件夹后,单击快捷菜单的“添加(加载)文件到组'Source Group 1'”,在弹出的“添加(加载)文件到组'Source Group 1'”对话框中将文件类型设为“C源文件”,单击刚才保存的源文件名“点亮一个LED.c”→单击“加载”→单击“关闭”,完成源文件加载。源文件加载窗口如图1-11所示。

当我们单击“Add”按钮时会感到奇怪,怎么对话框不消失呢?不要管它,直接单击“Close”按钮关闭就可以了。

(5)设置工程的配置参数

在工程窗口中右击“Target 1”文件夹,单击快捷菜单中的目标'Target 1'属性”,参数设置窗口如图1-12所示。

图1-11 源文件加载窗口

图1-12 参数设置窗口

在弹出的“目标'Target 1'属性”对话框中进行以下设置。

①在“目标”选项卡的晶振频率栏中,建议初学者修改成12MHz,因为12MHz方便计算指令时间。

②在“输出”选项卡中,选中“生成HEX文件”复选框,使编译器输出单片机需要的HEX文件。

③其余采用默认设置,单击“确定”按钮,完成配置参数设置。

4. 编译连接与调试

建立好第一个Keil C51工程项目“点亮一个LED”后,需要对“点亮一个LED”工程项目进行编译连接和调试。

(1)进行编译和连接

单击“工程”→“构造目标”,完成编译,生成“点亮一个LED.hex”文件。通过输出窗口查看编译信息,若提示出错,双击输出窗口中出错信息行,文件编辑窗口出错指令所在行左侧会有箭头提示,逐个排除错误后重新编译。输出窗口如图1-13所示。

(2)打开P1口对话框

单击快捷工具栏中的50421-00-019-1调试按钮,进入调试模式。单击菜单栏“Peripherals”→“I/O-Ports”→“Port 1”,打开P1口对话框,如图1-14所示。

在Peripherals菜单下面有中断、I/O口、串口、定时器等几类,用到哪个功能就选择哪个选项。

图1-13 输出窗口

图1-14 P1口对话框

(3)程序调试

在调试模式中,单击调试工具栏的50421-00-019-4运行按钮,通过P1口对话框观察P1.0引脚是否输出低电平。调试窗口显示了P1口的电平状态,如图1-15所示。Pins为引脚的状态,勾选为高电平,不勾选则为低电平。

图1-15 程序调试窗口

1.1.3 用Proteus仿真运行调试

1. 加载“点亮一个LED.hex”目标代码文件

首先打开Proteus“点亮一个LED”电路。然后双击单片机“STC89C52”,在弹出的“编辑元件”对话框中单击“Program File”后的打开按钮50421-00-019-6,在弹出的“选择文件名”对话框中选中前面编译生成的“点亮一个LED.hex”文件,然后单击“打开”按钮,完成“点亮一个LED.hex”加载HEX文件的选择,如图1-16所示。

最后将“Clock Frequency”框中的频率设为12MHz,单击“确定”按钮,即可完成加载目标代码文件。

2. 仿真运行调试

单击仿真工具栏的“运行”按钮50421-00-019-7,单片机全速运行程序,观察LED是否点亮。LED若点亮,则说明完成了“点亮一个LED”的设计。

那么如何观察单片机内部状态呢?

在单片机全速运行程序时,先单击“暂停”按钮50421-00-020-1(或直接点击50421-00-020-2按钮),然后单击“调试”→选择“8051 CPU Registers”,再单击“调试”→选择“8051 CPU SFR Memory”,如图1-17所示。

图1-16 加载目标代码文件

图1-17 单片机内部状态选择

这样就可以分别打开工作寄存器窗口和特殊功能寄存器窗口,随后每单击“单步执行”按钮50421-00-020-5一次(或按F10键),就执行一条指令。我们就可以通过各调试窗口观察每条指令执行后数据处理的结果,以加深对硬件结构和指令的理解,如图1-18所示。

在编辑区“点亮一个LED”电路中,可以看到接在P1.0引脚上的LED被点亮,同时在打开的工作寄存器窗口和特殊功能寄存器窗口中也能看到P1口为FEH,即P1.0引脚为低电平,其他引脚为高电平。

图1-18 “点亮一个LED”Proteus仿真运行