项目原理与内容

1.流水灯的电路原理图

流水灯的电路原理如图2-1所示。该模块通过锁存器U7与P0口的八条口线相连。改变P0口的值即可实现流水灯的点亮或熄灭。U7的控制端为P12,通过控制P12可以打开或关闭流水灯模块。八个发光二极管连接了两个排阻,这是为发光二极管做限流保护的。

图2-1 流水灯模块的电路原理图

2.发光二极管点亮的基本原理

本模块中发光二极管点亮的条件是对应的P0口线为低电平,电流通过排阻以及发光二极管灌入单片机中,构成回路,点亮发光二极管。

发光二极管属于电流型器件,随着电流的增加,亮度也会增加,但电流不能过大,否则会烧毁。一般导通的电流应控制在10~20mA为宜。

3.C51程序的设计与调试方法

使用C51语言操控单片机,非常简单,通过改变特殊功能寄存器的值,就可以改变对应的I/O口的状态。对照图2-1可以看到,当对应的口线为低电平时,即可点亮发光二极管。如果要实现流水灯效果,就需要依次点亮每一个发光二极管,即依次改变P0口的各个状态就可以实现。

C51程序的编写需要使用Keil软件。使用Keil编写C51程序的步骤也很简单。首先双击桌面上的图标,即可进入Keil软件的集成开发环境中,如图2-2所示。

图2-2 Keil软件的工作界面

在Keil中进行C51程序开发是以项目管理的形式进行的,首先需要创建项目。其操作步骤如下:

(1)建立项目文件

使用Keil要先建立一个项目文件,在工程文件内需要选择所使用的单片机型号等内容。具体操作步骤:首先选择Project→New Project命令,出现一个建立项目文件的对话框,导航到指定位置后,输入项目文件名,如图2-3所示。

需要注意的是,为了便于对项目文件的统一管理,一般在建立项目文件前,应先建立一个新的文件夹,并以项目名来命名此文件夹,随后建立的项目文件就放在这个文件夹中。

图2-3 建立项目文件

(2)选择单片机

Keil支持400多种以8051为内核的单片机系列,用户根据自己的需要来选择适合的CPU。因为Keil中并没有STC单片机,且STC单片机完全兼容标准的51单片机,所以这里以Atmel公司的AT89C51为例,在图2-4图左侧找到Atmel并单击,拖动滚动条找到AT89C51后单击,此时右侧窗口中出现的是对该单片机构成特性的一些概要描述。单击下方的OK按钮后会弹出图2-5所示的提示框,询问是否将标准的80C51启动代码复制到工程所在的文件夹内,并将这一源程序加入到工程当前中。一般情况下这里要选择“是”。返回主界面,此时已经建立起了项目文件。

(3)编写C51程序

单击工具栏上的按钮,在主界面的右侧窗口中出现一个名为Text1的文本文件,此时不必进行任何输入,直接按工具栏上的按钮,弹出Save As对话框,在对话框“文件名”文本框中输入该文件的名称,一定要注意,这里一定要写上文件的扩展名,即“.c”,如图2-6所示。单击“保存”按钮后,回到主界面,看到原来的Text1已经变成刚刚命名的C51文件了。光标在第一行位置闪烁,等待输入程序信息。此时本编辑窗口可以识别C51的语法,并进行着色显示,接着就可以输入程序内容,输入完成后再次单击按钮,完成文件保存。

因为前面已经为项目建立了专门的文件夹,所以这里保存的C51文件会默认保存到刚刚建立的项目文件夹中。

图2-4 为项目选择单片机

图2-5 询问是否加入80C51标准启动代码

图2-6 SaveAs对话框

(4)编译C51程序

保存好的C51程序要加入工程中才可以进行编译。选择工作界面左侧窗格中Target1包含的Source Group 1,右击,在弹出的快捷菜单中选择Add Files to Group 'Source Group 1'命令,如图2-7所示。出现Add Files to Group 'Source group 1'对话框,软件会自动导航到刚刚保存过的led.c文件,单击Add按钮后,完成文件添加。单击Close按钮退出,如图2-8所示。

图2-7 将程序文件加入到工程中

图2-8 选择文件

添加程序文件后,回到主工作界面,此时单击工具栏上的按钮。会弹出Options for Target 'Targe 1'对话框,如图2-9所示。选择Output选项卡,勾选Create HEX File复选框后单击OK按钮。这项操作用于生成可执行代码文件。生成的文件扩展名为“.HEX”,将生成的文件上传到单片机中,可以进行单片机的控制。

图2-9 Options for Target 'Target1'对话框

返回工作界面后,再次单击工具栏上的按钮,进行工程的编译,编译成功后,在工作界面下方的窗口中会出现0 Error(s),0 Warning(s)字样,表示程序编写正常,工程编译通过,如图2-10所示。

图2-10 编译工程

至此一个C51程序的建立操作即完成了。

前面已经分析过要实现流水灯效果必须依次改变P0口的各个口线状态,比较简单的方法是使用数组,先将流水灯依次点亮时P0口中各口线的状态值记录下来,然后通过循环,就可以实现依次改变了。本实验中可定义数组为:

unsigned char code disp[8]={0xfe,0xfd,…,0x7f};

然后通过循环来使用P0口依次等于数组中的每个元素。为了能够清楚地看到发光二极管的闪烁,在P0每次改变状态时,要适当地暂停一下,这可以通过延时函数实现。思路如下:

程序编写完成后,一定要进行编译。即使编译完全通过,在实验板中也未必能实现预期目的。所以任何程序都需要反复调试,只能充分调试,在各种情况下才能实现预期目的。

在Keil中调试程序,非常方便。当程序编写完成后,单击工具栏上的图标,会出现程序调试窗口,如图2-11所示。

图2-11 程序调试窗口

工具栏上的就分别表示单步执行和跳过函数继续执行。配合这两个工具按钮以及菜单上的peripherals项,并选择需要观察的端口,就能轻松实现程序的调试。

4.下载程序,并观察实验结果

使用STC-ISP将编写的程序下载到实验板中,观察实验效果。如果未能实现预期效果,需要重新调试程序,再次下载,观察实验效果。这个过程在项目开发中是多次重复进行的。