资源简介 项目一 闪烁报警灯一、教学目标1.了解AT89S51系列单片机基本知识。2.掌握单片机最小化系统的构成条件及电路。3.掌握LED基本知识,与单片机I/O口的连接,会画电路图。4.掌握基本程序结构,读懂基本程序。5.初步认识KEIL C与PROTEUS等软件,实现基本调试步骤。6.掌握按功能模块设计子程序并按控制要求调用的结构化程序设计。7.掌握单片机控制延时及延时子程序的编写方法。8.学会KEIL C与PROTEUS仿真联调。二、课时分配本项目共5个任务,安排10课时。三、教学重点通过本项目的学习,让学生学习51系列单片机及最小化系统、点亮LED灯、KEIL C与PROTEUS基本使用、LED报警灯闪烁、LED报警灯制作与调试等概念;通过制作一个闪烁报警灯,来掌握单片机的基本知识,会用C语言编写程序并能读懂基本控制程序,并学会使用KEIL C等相关软件导入、编译并调试源程序,学会用PROTEUS等软件仿真等。四、教学难点1.掌握单片机控制延时及延时子程序的编写方法。2.按功能模块设计子程序并按控制要求调用的结构化程序设计。3.掌握KEIL C与PROTEUS仿真联调。五、教学内容任务一 51系列单片机及最小化系统知识准备一、单片机的基本概念单片微型计算机简称单片机,在有的书中也称单片微型控制器。它是把组成微型计算机的各种功能部件,包括CPU、随机存储器(RAM)、只读存储器(ROM)、基本输入/输出(Input/Output,I/O)接口电路、定时器/计数器等部分都制作在一块集成芯片上,构成一个完整的微型计算机,从而实现微型计算机的基本功能。二、 单片机发展史三、 单片机的应用领域单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。1.在智能仪器仪表上的应用2. 在家用电器中的应用3. 单片机在医用设备领域中的应用四、 MCS51系列单片机MCS51是原先由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了许多品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其他单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。五、 AT89S51单片机AT89S51是一个低功耗、高性能CMOS 8位单片机,片内含4k Bytes ISP(In-System Programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用Atmel公司的高密度、非易失性存储技术制造,兼容标准MCS51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。六、 单片机最小系统构成条件及电路单片机最小系统是由单片机芯片外接时钟电路、复位电路、电源和接地构成的。 1.复位电路2. 时钟信号引脚XTAL1和XTAL2七、 单片机学习方法1. 实验板2. 仿真器3. 编程器任务实施观察单片机最小系统是否工作,将单片机的18脚接入示波器,调整示波器的量程,观察示波器输出。单片机有两个信号输入脚,一个是19脚(XTAL1),一个是18脚(XTAL2),对应单片机内部的电路是高增益放大器。当外面接晶振的时候,19脚对应高增益放大器的输入端,18脚对应高增益放大器的输出端,会输出一个近似正弦波,这里需要注意的是晶振和电容在焊接的时候,要靠近18和19脚。知识拓展将示波器接在单片机的ALE引脚上,观察示波器的输出。目标检测任务二 点亮LED灯知识准备本次任务我们将在KEIL 软件中编写源程序,并在Proteus软件中仿真。具体要求为AT89S52单片机的P0.7引脚接发光二极管(LED)的阴极,点亮发光二极管。一、LED知识发光二极管,也叫做LED,是一种常用的指示器件,例如电源指示、工作指示等。二、 拉电流和灌电流单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”;单片机输出高电平时,则允许外部器件从单片机的引脚拉出电流,这个电流称为“拉电流”,外部电路称为“拉电流负载”。三、 LED限流电阻51单片机点亮LED方式,主要还是采用灌电流形式。四、 KEIL C软件KEIL C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编语言相比,C语言在功能、结构性、可读性、可维护性上有明显的优势,因而易学易用。五、 PROTEUS 软件PROTEUS是英国Labcenter Electro-nics公司开发的一款电路仿真软件,软件由两部分组成: 一部分是智能原理图输入系统ISIS(Intelligent Schematic Input System)和虚拟系统模型VSM(Virtual Model System);另一部分是高级布线及编辑软件ARES(AdvAncd Routing and Editing Software),也就是PCB。任务实施一、 在KEIL软件中编写源程序1. 打开程序在桌面上点击KEIL图标,出现KEIL软件工作界面。2. 新建工程点击Project 菜单,选择弹出的下拉式菜单中的New Project,如图所示。接着弹出一个标准Windows 文件对话窗口。在“文件名”中输入您的第一个C 程序项目名称,这里我们用“test”。“保存”后的文件扩展名为?uv2,这是KEIL uVision2 项目文件扩展名,以后可以直接点击此文件以打开先前做的项目。在图中选择AT89S51单片机,在图中选择“否”。3. 新建源程序点击图中的“File”菜单中的“NEW”命令,会出现一个文本编辑区域,在这个文本里输入下面的程序,如图所示,点击file中的“另存为”,如图所示。这里我们保存的时候要保存为××.c的格式。这里我们保存为yz.c。4. 添加文件到当前工程中右键单击图中“Source Group 1”,选择“add files to group ‘Source Group’”命令,选择目标文件并确定。当出现图时,表示目标文件已经添加进工程。5. 设置右键单击“target1”,选择“options for target ‘target 1’”,出现如图所示对话框,单击选项卡“target”,出现图,将“Xtal (MHz)”后的值改为12。单击选项卡“output”,单击选中“create hex”项。6. 编译设置好工程后,即可进行编译、连接。二、 在PROTEUS软件中绘制电路图1. 操作过程运行PROTEUS的ISIS,进入仿真软件的主界面,如图所示。主界面分为菜单栏、工具栏、模型显示窗口、模型选择区、元件列表区等。2. 元器件之间的连线PROTEUS的智能化可以在你想要画线的时候进行自动检测。三、 KEIL与PROTEUS的对接(1) 电路连接完成后,选中AT89S51单击鼠标左键,打开“Edit Component”对话窗口(2) 在仿真过程中每个管脚旁边会出现一个小方块,红色的方块表示高电平,蓝色的方块表示低电平。通过方块颜色的变化可以很方便地知道每个管脚电平的变化,从而能对系统的运行有更直观的了解,这对程序的调试有很大的帮助。四、 程序分析1. “文件包含”处理程序的第一行是一个“文件包含”处理。所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有5行,但C 编译器在处理的时候却要处理几十或几百行。源程序中头文件包含“reg51.h”。2. 符号P0_7 表示P0.7 引脚3. 主函数“main”每一个C 语言程序有且只有一个主函数,函数后面一定有一对大括号“{}”,在大括号里面书写其他程序。4. while(1)语句While(1)语句连同其后的一对大括号“{}”构成了一个无限循环语句,该大括号内的语句将会被反复执行。5. P0_7=0语句让单片机的P0_7管脚输出0,低电平,点亮一个灯。知识拓展修改电路,编写程序让P2.0控制灯亮。目标检测任务三 KEIL C与PROTEUS基本使用知识准备上一次任务,我们基本掌握KEIL C和PROTEUS软件的使用,本次任务我们将深入的了解这两款软件,并通过点亮一个灯程序,来学会KEIL C和PROTEUS的仿真联调。一、 KEIL C软件51单片机的开发除了需要硬件的支持以外,同样离不开软件。(一) KEIL 编译器简介随着单片机开发技术的不断地发展,从普通使用汇编变速语言到逐渐使用高级语言开发,单片机的开发软件也在不断地发展。KEIL是目前最流行的51单片机开发软件,各仿真机厂商都宣称全面KEIL的使用,对于使用C语言进行单片机开发的用户,KEIL已经成为必备的开发工具。(二) 如何使用KEIL开发对KEIL软件及其集成开发环境有了整体认识后,本任务详细介绍如何使用KEIL来进行应用软件的开发。1. 建立工程首先启动KEIL软件的集成开发环境μVision,μVision启动以后,程序窗口的左边会出现一个工程管理窗口。选择“Project/New Project ...”菜单,出现一个对话框。要求给将要建立的工程取一个名字,不需要扩展名,单击“保存”按钮,出现第二个对话框。2. 工程设置工程建立好之后,还要对工程进行进一步的设置,以满足要求。设置对话框中的“Target”页面,如图所示。3. 编译与连接在工程建立并设置好以后,接下来的工作就是对工作进行编译。4. dScope for Windows的使用在开发产品时,有时软件,也就是应用程序,先行于硬件设计,可以用软件模拟仿真器(Simulator)对应用程序进行软件模拟调试。(1) 启动如果源程序代码编译成功,那么运行dScope可以对8051应用程序进行软件仿真调试——使用Simulator。为了运行dScope,在如图所示的“Option for Targe”选项的“Debug”选项中要选中“Use Simular”单选项。(2) 调试调试是检查程序中看不见的错误,所以要认真对待。其实比起开发来,排除错误的调试更应该认真去做,因此,必须熟练掌握其使用要领,并且在做开发计划时,通常就把开发周期和调试周期同等对待。(3) 调试窗口KEIL软件在调试程序时提供了多个窗口,主要包括输出窗口(Output Window)、观察窗口(Watch & Call Stack Window)、存储器窗口(Memory Window)、反汇编窗口(Dissaembly Window)和串行窗口(Serial Window)等。进入调试模式后,可以通过菜单“View”下的相应命令打开或关闭这些窗口。二、 PROTEUS软件PROTEUS ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。(一) PROTEUS中绘制点亮LED电路图1. 建立文件单击工具栏上的“新建”按钮,新建一个设计文档。2. 选取元器件此简单实例需要如下元器件:单片机: AT89C51发光二极管: LEDRED瓷片电容: CAP*电阻: RES*选取元器件晶振: CRYSTAL按钮: BUTTON3. 放置元器件至图形编辑窗口在对象选择器窗口中,选中AT89C51,将鼠标置于图形编辑窗口该对象的欲放置的位置,单击鼠标左键,该对象被完成放置。4. 放置终端(电源、地)单击工具栏中的终端按钮,在对象选择器窗口中选择“POWER”。5. 元器件之间的连线PROTEUS的智能化可以在你想要画线的时候进行自动检测。6. 修改、设置元器件的属性PROTEUS库中的元器件都有相应的属性,要设置修改元器件的属性,只需要双击ISIS编辑区中的该元器件(二) PROTEUS电路图的绘制效果图如图所示。1. 将所需元器件加入到对象选择器窗口单击对象选择器按钮“p”。2. 放置元器件至图形编辑窗口将“74LS373”“80C51.BUS”和“MEMORY_13_8”放置到图形编辑窗口。3. 放置总线至图形编辑窗口单击绘图工具栏中的总线按钮“”,使之处于选中状态。将鼠标置于图形编辑窗口。4. 添加时钟信号发生器和接地引脚单击绘图工具栏中的信号发生器按钮。5. 元器件之间的连线在图形编辑窗口,完成各对象的连线。6. 给导线或总线加标签7. 添加电压探针单击绘图工具栏中的电压探针按钮“”,在图形编辑窗口,完成电压探针的添加。8. 设置元器件的属性在图形编辑窗口内,将鼠标置于时钟信号发生器上,单击鼠标右键,选中该对象,单击鼠标左键,进入对象属性编辑页面,如图所示。在“Frequency[Hz]”栏中输入12M,单击“OK”按钮,结束设置。此番操作意味着时钟信号发生器给单片机提供频率为12MHz的时钟信号。9. 添加虚拟逻辑分析仪在我们绘制图形的过程中,遇到复杂的图形,通常一幅图很难准确地表达设计者的意图,往往需要多幅图来共同表达一个设计。10. 给逻辑分析仪添加信号终端单击绘图工具栏中的Inter-sheet Terminal按钮“”,在对象选择器窗口,选中对象DEFAULT,如图所示,将其放置到图形编辑窗口;在对象选择器窗口,选中对象BUS,将其放置到图形编辑窗口,如图所示。11. 将信号终端与虚拟逻辑分析仪连线并加标签在图形编辑窗口,完成信号终端与虚拟逻辑分析仪连线。12. 调试运行使用快捷键“Page Down”,将图幅切换到“Root sheet 1”。三、 PROTEUS和KEIL联调① 首先,安装PROTEUS和KEIL软件。② 把PROTEUS\\MODEL目录下的VDM51.DLL文件复制到KEIL安装目录的\\c51\\bin目录中。③ 修改KEIL安装目录下的TOOLS.INI文件,在c51字段中加入TDRV5=BIN\\VDM51.DLL(“PROTEUS VSM MONITOR51 DRIVER”),并保存。注: 不一定要用TDRV5,根据原来字段选用一个不重复的数值就可以了,引号中的名字可随意写。④ 运行PROTEUS,画出要设计的电路图,在Debug菜单中选择Use Remote Debug Monitor选项。⑤ 在KEIL中编写相应的程序代码。⑥ 在KEIL中Project菜单中选择Options for target “target 1”选项。任务实施根据任务实施里面的第三项,我们先对KEIL和PROTEUS进行设定。在KEIL软件中输入源代码并编译,如图所示。在PROTEUS软件中绘制电路,如图所示。KEIL和PROTEUS联调:点击KEIL软件“”图标,在点击“”后,大家会发现PROTEUS图中的灯在闪烁。我们可以利用KEIL中的工具栏,对PROTEUS进行详细的调试,如图所示,我们设置了一个断点,点击“”,程序运行到断点处,同时PROTEUS的灯不亮。知识拓展利用KEIL软件中的F10、F11快捷键调试观察灯的变化。目标检测任务四 LED报警灯闪烁知识准备通过任务二我们已经知道,要让图141中的LED发光,只要将P0_7置成低电平就可以了,反之把P0_7置成高电平就可以使LED灭掉。本次任务是要让LED闪动起来,即让亮和灭在一段时间内交替出现。一、 函数C程序是由函数组成的,对于规模较大、比较复杂的问题,人们常采用模块化设计方法,即将一个较大的程序按功能划分成若干个程序模块,每个模块用来实现一个特定的功能。在C语言中,函数就是实现模块化程序设计的工具,C语言中的函数相当于其他高级语言中的子程序和过程,由于采用函数结构的写法,使C语言的程序代码结构清晰,同时有利于程序的编写、阅读和维护。本次任务中的延时功能,便是使用函数来实现的。二、 函数定义的一般形式(一) 无参函数的定义形式类型标识符 函数名(){声明部分语句}(二) 有参函数定义的一般形式类型标识符 函数名(形式参数表列){声明部分语句}任务实施一、 源程序二、 程序分析(一) delay_ms(1000)因为单片机的程序执行速度很快,如果在很短的时间内改变P0.7的状态,人眼是看不出来的,必须有个合适的延时时间。(二) 函数分析void delay_ms(unsigned int time){unsigned int i,j;for(i=0;ifor(j=0;j<121;j++);}程序中定义了一个函数delay_ms,函数在执行的时候,使用了FOR循环嵌套,程序在这个循环里面反复执行。如果单片机的晶振为12MHz,因此,1个机器周期为1μs,那么执行这样一次循环大约需要1ms。主函数中delay_ms(1000),将1000这个变量传递给time,即time=1000,嵌套的FOR循环一直执行了121*time次.,那么delay_ms(1000)延时大约为1ms*1000=1s。如果发现时间有偏差,可以适当修正这里的121,可以得到一个更精确的1ms。三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTEUS中作原理图仿真。最后的仿真运行结果知识拓展请修改延时时间,让灯闪烁的时间变长。目标检测任务五 LED报警灯制作与调试知识准备本次任务是在任务四的基础上,制作一个闪烁报警灯。通过本次任务的学习,学会制作单片机最小化系统,并学会使用编程器。一、 原理图原理见图。注意: 这里省去了单片机40脚接、5V电源和20脚接地。二、 元器件准备本次任务所需元器件见表。三、 西尔特280U编程器的使用① 西尔特软件安装完毕后,使用USB连接线将SUPERPRO/280U连接到PC的USB口。② 双击运行桌面西尔特软件图标。③ 首次使用前应先设置自动烧录选项。,选择“编辑自动烧录方式”,出现对话框。按图所示,顺序增加自动烧录功能项(Erase—Program—Verify),并单击“确定”按钮,出现下图。任务实施一、 源程序二、 编译与仿真① 编译结果如图所示。② 仿真结果如图所示。③焊接电路,实物如图所示。④下载程序进单片机,实物运行效果如图所示。三、 程序分析本次任务的源程序和任务四的源程序变化的地方就在于将任务四的“#include"reg51.h";sbit led=P0^7;”这两句换成“#include"at89x51.h";#defineledP0_7”。下面分别解释任务五这两行语句的含义。1. #include"at89x51.h"2. #defineledP0_7这句的意思是给P0_7端口重新起一个名字,下面程序在提到led的地方,就表示用的是P0_7这个端口。这样写的好处在于,如果将来硬件电路需要将灯接到P1_7上时,我们就不用在程序中修改,只需把语句修改成#defineledP1_7就可以了。目标检测六、课后习题完成每个任务的目标检测。项目二 按键计数器一、教学目标1.了解键盘检测的电路结构和原理、键盘作用、如何实现键盘检测、消抖、键盘编码等内容。2.掌握独立按键控制、消抖动等基本原理与程序设计方法。3.了解4×4按键矩阵构成及按键扫描程序。4.认识各种数码管,包括数码管的种类、显示原理、段码。5.掌握多位数码管静态显示数字或字母的程序设计。二、课时分配本项目共4个任务,安排8课时。三、教学重点通过本项目的学习,让学生学习按键输入检测、单只数码管显示、多位数码管显示、按键计数器制作与调试等概念;本项目的学习和实践,我们掌握按键检测、消抖的程序设计方法;数码管结构类型、段码、静态与动态显示程序设计方法。四、教学难点1.掌握单只数码管静态显示数字或字母的程序设计。2.掌握多位数码管静态显示数字或字母的程序设计。3.了解多位数码管动态扫描显示原理,能读懂动态扫描显示程序。五、教学内容任务一 按键输入检测知识准备在很多项目中都会用到按键,如图所示的电子秤。一、 键盘的分类键盘分编码键盘和非编码键盘两种。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,用得最多的是非编码键盘。非编码键盘分为行列式(又称为矩阵式)键盘和独立按键。本次任务,我们选择的是独立按键。二、 独立按键连接图独立按键连接电路有两种,一种是按键的公共端接地,当按键按下时,单片机的控制引脚输入低电平“0”,如图所示。另一种是按键的公共端接电源,这样当按键按下时,单片机的控制引脚接高电平“1”,如图所示。三、 按键抖动通常的按键所用开关多为机械弹性开关,当机械触点断开、闭合时,电压信号波形如图所示。四、 按键程序编写由于按键按下后,会出现抖动,单片机应该避开这段时间,待键盘稳定后,再对键盘的信息进行识别。任务实施一、 绘制原理图在PROTEUS软件中绘制的原理图,如图所示。二、 编写源程序三、 程序分析① 按键识别的步骤: 先判断按键是否按下,如果没按,直接退出。如果按下,此时还不能确定是否为有效按下,有可能是抖动,此时应去抖动,调用延时函数。② 本程序将灯亮还是灭分成两个状态。在亮的时候,如果按键按下,灯灭。在灭的时候,如果按键按下,灯亮。这里的led_flag就是作灯状态的一个标记。四、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTEUS中作原理图仿真。知识拓展试编写程序: 按键按下灯亮,松开灯灭。目标检测任务二 单只数码管显示知识准备数码管作为一种应用十分普遍的显示器件可以在各种各样的设备上见到,图就是电子钟显示的效果图。一、 数码管数码管也叫LED数码显示器,其实是由多个LED排列封装而成,图给出了一些常见数码管的实物图,其引脚如图所示。二、 LED七段数码管结构原理LED七段数码管通常由8个LED发光二极管组成,其中7个发光LED二极管构成7笔字形,一个构成小数点,通称七段LED数码管。三、 LED七段数码管显示字符和字母的方法如果我们要显示“6”,并不是给数码管写个“6”就行了,而是点亮这个数码管的相应的一些LED发光二极管,即点亮a,c,d,e,f,g段,其余段灭。任务实施一、 绘制原理图在PROTEUS中画好的原理图,如图所示。本图中我们省去单片机的复位电路和晶振电路。但是在制作电路板的时候,还是要加进去,不能省去。二、 编写源程序共阳数码管显示09数码管的输入端接在P0端口上三、 程序分析① port_0=table[count]: 当count=0时,port_0=table[0],相当于把“0”的段码通过单片机的P0端口送到数码管上,数码管显示“0”。② delay_time()是个延时函数: 控制前后两次显示的切换的快慢。③ 在任务一和任务二中,我们都调用到了一个delay_time()的延时函数,程序中,delay_time()函数的定义如果出现在main()函数前,就不需要对delay_time()做说明而直接使用。四、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTEUS中作原理图仿真。PROTEUS对单片机的仿真结果见图。知识拓展① 推导共阴和共阳数码管显示“H”的时候的段码。② 通过修改延时函数,观察数码管显示。③ 本次任务选择的是共阳数码管,如选择共阴数码管,如何编写程序?目标检测任务三 多位数码管显示知识准备由于很多项目中都会用到多位数码管,多位数码管的显示一般有两种方法: 静态显示和动态显示。一、 静态显示所谓静态显示,是指当显示器显示某个字符时,相应位的发光二极管处于恒定的导通或截止状态,直到需要显示另一个字符为止。二、 动态显示原理LED数码管显示的基本原理是利用人眼的“视觉暂留”效应和发光二极管的余晖现象来工作的。接口电路把所有数码管的8个笔画段a~dp的各同名端相互连接在一起,并把它们接到输出口上,每个数码管的公共端COM各自独立地受控制。三、 数码管静态显示驱动电路将单片机的管脚直接和数码管相连,当然中间需要增加限流电阻,如图所示。对于共阳数码管,公共端需要接上高电平,要想显示什么字符,只需单片机输出该字符的显示段码就可以了。四、 数码管动态显示驱动电路单片机的管脚和动态数码管相连,中间加上限流电阻,这个和静态显示电路一样。任务实施一、 静态显示00~59s循环计时1. 绘制原理图在PROTEUS软件中绘制的原理图2. 编写源程序3. 程序分析(1) 程序运行的时候,数码管要求显示00,接着1s到后,数码管显示01。所以初始化需要加上这几句 second=0; port_2=table[second%10]; port_0=table[second/10]。(2) 当second=29的时候,second%10=9,那么table[second%10]=table[9],而table[9]=0X90,正好对应了9的段码,通过执行port_2=table[second%10]语句,数码管个位显示9。4. 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTEUS中作原理图仿真。正确的编译结果如图所示。PROTEUS对单片机的仿真结果二、 动态显示电路图1. 绘制原理图在PROTEUS软件中绘制的原理图,如图所示。2. 编写源程序3. 编译与仿真知识拓展试修改程序并仿真,看能否动态显示59到00倒计数。目标检测任务四 按键计数器制作与调试知识准备本次任务是在前面几个任务的基础上,制作一个按键计数器电路,并能够根据控制要求编写单片机程序。具体的功能要求为: 系统刚上电时,数码管显示“00”,每次按动加法键,数码管显示数据增加1,每次按动减法按钮,显示数据减1,通过按键设置,让数码管显示范围在“00~20”之间变化。一、 绘制原理图在Proteus软件中绘制的原理图,如图所示。二、 编写源程序三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTEUS中作原理图仿真。PROTEUS对单片机的仿真结果四、 实物展示知识拓展尝试修改程序,等按键松开后,让显示的数值发生改变。目标检测六、课后习题完成每个任务的目标检测。项目三 倒计时交通灯一、教学目标1. 了解中断的概念和作用等概念。2. 熟悉会运用51系列单片机的中断系统进行简单的功能控制。3. 掌握编写中断服务程序。4. 掌握设计简单的单片机系统软件。二、课时分配本项目共4个任务,安排8课时。三、教学重点通过本项目的学习,让学生学习按钮控制外部中断应用、定时器控制数码管计时、定时器中断实现倒计时交通灯控制、倒计时交通灯制作与调试的识读及简单分析;电阻器的参数、作用及测量;通过本项目的学习与实践,我们要掌握单片机中断系统的基本概念、工作原理和工作方式,并掌握中断服务程序的写法和实际应用;了解定时器的工作方式及应用。本项目中,我们将先用两个任务来学习单片机的中断系统和定时器系统,最后以这两个项目为基础实现交通灯的总体控制。四、教学难点1.掌握中断服务程序的工作过程。2.掌握会使用51系列定时器。五、教学内容任务一 按钮控制外部中断应用知识准备51单片机四组I/O口中的P3口其实是多功能复用口,其中P3.2和P3.3(第12、13脚)就是单片机的外部中断输入端,如图所示。一、 任务及其优先级一个完整的单片机系统其实就是由多个不同功能的子模块叠加在一起所组成的。二、 中断的概念中断是为使CPU具有对单片机外部或内部产生的重要事件进行实时处理的能力而设置的。51系列单片机的中断系统能大大提高单片机对内部和外部事件的处理能力。三、 51系列单片机的中断源51系列单片机的中断系统如图所示。1. IT1——INT1中断触发方式控制位(1) “1”INT1使用跳沿触发方式;(2) “0”INT1使用电平触发方式。2. IE1——INT1中断请求标志位若IT1为1,则当INT1输入引脚产生一个下降沿时,该位会被硬件置“1”,以向CPU发出中断申请。该位会在CPU响应INT1中断服务程序后由硬件清“0”,该位可以软件清“0”。四、 中断使能控制寄存器中断使能控制寄存器IE是控制51单片机中断开关的寄存器。其各位的含义如表所示。该特殊功能寄存器是可位寻址的。通过对该寄存器的设置,能够实现中断的2级开关控制,即一个所有中断的总开关和每个中断的子开关。1. EA——中断使能总控制位(1) “1”开放所有中断(俗称开中断);(2) “0”屏蔽所有中断(俗称关中断)。2. ES——串口中断使能控制位(1) “1”打开串口中断;(2) “0”关闭串口中断。3. ET1——T1溢出中断使能控制位(1) “1”打开T1溢出中断;(2) “0”关闭T1溢出中断。4. EX1——INT1中断使能控制位(1) “1”打开INT1中断;(2) “0”关闭INT1中断。5. ET0——T0溢出中断使能控制位(1) “1”打开T0溢出中断;(2) “0”关闭T0溢出中断。6. EX0——INT0中断使能控制位(1) “1”打开INT0中断;(2) “0”关闭INT0中断。五、 中断优先级控制寄存器中断优先级控制寄存器IP,用于控制单片机中断源的优先级。该寄存器是可位寻址的。并且该寄存器设定的中断优先级高于自然优先级。其各位的含义如表所示。1. PS——串口中断优先级控制位(1) “1”串口中断优先级设为高;(2) “0”串口中断优先级设为低。2. PT1——T1溢出中断优先级控制位(1) “1”T1溢出中断优先级设为高;(2) “0”T1溢出中断优先级设为低。3. PX1——INT1中断优先级控制位(1) “1”INT1中断优先级设为高;(2) “0”INT1中断优先级设为低。4. PT0——T0溢出中断优先级控制位(1) “1”T0溢出中断优先级设为高;(2) “0”T0溢出中断优先级设为低。5. PX0——INT0中断优先级控制位(1) “1”INT0中断优先级设为高;(2) “0”INT0中断优先级设为低。六、 中断处理过程当某一个中断发生时,单片机的中断系统将该中断的中断请求标志位置“1”,CPU查询到该标志位是“1”后,如果该中断被打开,那么,CPU会停止当前程序的运行,转而执行中断服务程序,并将中断请求标志位清“0”(串口中断标志位必须软件清“0”)。七、 外部中断的触发方式外部中断是当单片机外部发生紧急事件,需要单片机立即处理时,事件能够向CPU发出处理请求的途径。外部事件触发外部中断的方式有两种:1. 电平触发方式(低电平)2. 边沿触发方式(下降沿)八、 外部中断服务程序的编写中断服务程序的编写和其他函数程序的编写略有不同。这是因为当中断发生时,每个中断所对应的中断服务程序所存放的位置在ROM中是固定的,因此,中断服务程序必须通过中断号指定中断的类型。任务实施一、 原理图的绘制在PROTUES中画好原理图,完整的原理图如图所示。二、 编写外部中断试验程序三、 程序分析typedef 原数据类型 新数据类型;typedef unsigned int U16;四、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTUES中作原理图仿真。正确的编译结果如图所示。目标检测任务二 定时器控制数码管计时知识准备数字钟是日常生活很常用的数码产品,在本任务中,我们将模拟实现数字钟读秒部分的功能,并且使用两个按键控制外部中断来使秒表能够根据需要正计时和倒计时。一、 定时/计数器的基本知识51系列单片机内部具有两个16位的定时/计数器,分别是T0和T1(52系列还有定时器T2)。1.计数器模式2. 定时器模式二、 定时器控制寄存器TCONTCON中各位的含义如表312所示,这里我们主要讲解高四位的功能。1. TF1——T1溢出中断请求位(1) “1”T1溢出,向CPU申请中断。(2) “0”T1未溢出。2. TR1——T1启动位,该位须由软件置位或清零(1) “1”T1计数开始。(2) “0”T1计数停止。三、 定时方式寄存器TMOD表321所示是TMOD中各位的含义。该寄存器不能位寻址。1. M1,M0——T0方式控制位(1) “00”方式0——13位定时计数方式。(2) “01”方式1——16位定时计数方式。(3) “10”方式2——8位常数自动重载方式。(4) “11”方式3——双8位定时计数方式(仅适用于T0)。2. C/T——定时器计数器模式选择位(1) “1”T0处于计数模式。(2) “0”T0处于定时模式。3. GATE——门控位(1) “1”定时计数器的启动由TR0=1和INT0接收到的高电平来共同控制。(2) “0”定时计数器的启动仅由TR0=1来控制。四、 定时计数器的四种工作方式1. 方式0当M1M0是00时,定时计数器工作于方式0,该方式是13位定时或计数方式。该方式下,定时计数器的逻辑结构如图所示。2. 方式1当M1M0是01时,定时计数器工作于方式1,该方式是16位定时或计数方式。该方式下,定时计数器的逻辑结构如图所示。3. 方式2方式0和方式1的最大特点是,当计数发生溢出后,计数器会全部清0。因此在循环定时或循环计数应用时,就会需要软件反复设置计数器的初值,这不但增加了程序的复杂度,而且在定时时间很短的场合,也会影响到定时的精度。此时,可以使用方式2来解决这个问题。4. 方式3方式3是为了增加一个附加的8位定时计数器而提供的,这样51单片机就具有三个定时计数器(52系列单片机本身就有第三个定时计数器T2)。只有T0能工作于方式3,T1不能工作在方式3,一般只有在T1做波特率发生器,系统却还需要两个定时器的情况下才使T0工作于方式3。如图所示是T0工作在方式3时的逻辑结构图。五、 定时器初值的计算当使用定时器时,根据所需的定时值,需要设置定时器的初值。下面以最常用的方式1为例,详细讲解定时器初值的计算过程。任务实施一、 原理图的绘制在PROTUES中绘制原理图,绘制好原理图。二、 编写定时器计数试验程序三、 程序分析主函数首先初始化定时器T1和T0,并打开两个定时器中断和外部中断。然后打开两个定时器使两个定时器开始运行。四、 编译仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTUES中作原理图仿真。正确的编译结果如图所示。目标检测任务三 定时器中断实现倒计时交通灯控制知识准备本任务是以上两个任务的综合。系统主要要求如下:① 红绿灯控制只使用一路双向。② 两个数码管用于对红黄绿灯的时间进行倒计时计数。③ 绿灯40s,红灯20s,黄灯4s。④ 行人优先系统能强行减少机动车的绿灯时间。⑤ 计时精度达到实用要求,误差控制要好。⑥ 程序结构清晰,变量命名含义明确,采用结构化的编程方法。⑦ 系统整个运行过程中没有明显漏洞。任务实施一、 编写源程序二、 程序分析主函数中,程序先完成对各个中断和定时器的初始化,并确定系统运行时的初始状态(本任务是绿灯状态)。然后后台部分启动[即主函数中的while三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTUES中作原理图仿真。正确的编译结果如图所示。目标检测1. 修改本任务的设计,实现:主道红灯状态下,10s内如无行人按下按键,则主道方向自动切换成绿灯;如10s内有行人按下按键,则主道方向的红灯再延时10秒。其余条件不变。任务四 倒计时交通灯制作与调试知识准备倒计时交通灯的硬件连接原理图如图331所示。按照图中的硬件在万能板上搭建实物。任务实施搭建好的实物板如图所示。目标检测六、课后练习完成每个任务的目标检测。项目四 直流电机调速一、教学目标1.了解直流电机控制的接口电路设计,单片机与外设接口的驱动、电气隔离、抗干扰的典型应用电路。2.掌握直流电机正反转控制的程序设计方法。3.掌握直流电机调速的基本原理。4.熟悉搭建单片机控制直流电机驱动电路。二、课时分配本项目共3个任务,安排6课时。三、教学重点通过本项目的学习,让学生学习直流电机驱动及正反转控制、采用PWM技术实现直流电机调速、直流电机调速控制实训等概念。通过本项目的学习与实践,我们要掌握单片机直流电机的基本概念、工作原理和工作方式,并掌握直流电机技术的调控和实际应用;了解直流电机驱动的工作方式及应用。让学生由理论联系实践,在教学过程中培养学生自主性、研究性学习方法和思想。四、教学难点1.掌握单片机PWM波形产生的程序设计方法。2.能正确修改程序改变PWM的占空比以满足直流电机不同的速度控制要求。五、教学内容任务一 直流电机驱动及正反转控制知识准备本次任务的目标就是设计一个基于单片机的直流电机正反转控制电路,通过3个按钮实现小型直流电机(额定电压为12V)的正反转及停止控制。一、 直流电机简介电动机简称电机,是把电能转换成机械能的机械,直流电机把直流电能转变为机械能。直流电机有以下4方面的优点:① 调速范围广,且易于平滑调节。② 过载、启动、制动转矩大。③ 易于控制,可靠性高。④ 调速时的能量损耗较小。二、 直流电机工作原理直流电动机的工作原理是基于载流导体在磁场中受力产生电磁力形成电磁转矩的基本原理。但要获得恒定方向的转矩,需将其外电路的直流电流变为绕组中的交流电流,即同样需要机械整流装置。任务实施一、 绘制原理图在PROTUES软件中绘制原理图,如图所示。二、 编写源程序三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTUES中作原理图仿真。正确的编译结果如图所示。知识拓展① 不改变电路,编程实现如下要求: 系统上电后,电机正转2s,然后反转3s,不断重复,当停止按钮按下时,电机停止运行。② 搜集直流电机驱动电路,在PROTUES软件中搭建电路,进行仿真,并分析各驱动电路的特点。目标检测任务二 采用PWM技术实现直流电机调速知识准备本次任务以AT89C51单片机为核心,通过3个按键(快速、慢速、停止)控制直流电机的速度。当快速按钮按下时,电动机快速运转;当慢速按钮按下时,电动机慢速运转;当停止按钮按下时,电动机停止运行。此任务运用PWM技术(在下面进行具体的阐述)对直流电机进行控制。一、 PWM调速基本原理PWM是英文Pulse Width Modulation(脉冲宽度调制)的缩写,简称脉宽调制。它通过对一系列脉冲的宽度进行调制,来等效地获得所需要的波形(含形状和幅值)。脉宽调制是一种对模拟信号电平进行数字编码的方法,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、功率控制与变换等领域中。二、冲量等效理论在采样控制理论中,有一个重要的结论: 冲量(指窄脉冲的面积)相等而形状不同的窄脉冲加在具有惯性的负载上时,其效果基本相同。三、 PWM控制技术控制直流电机PWM信号只有两种状态,高电平和低电平。对于一个给定的周期来说,高电平所占的时间和周期之比叫做占空比,电机的速度与施加的平均电压成正比,输出转矩则与电流成正比。直流电机高效运行的最常见方法是施加一个 PWM(脉宽调制)方波,其通断比率对应于所需速度。即直流电机的转速正比于在一个周期内PWM的电压有效值。电机起到一个低通滤波器作用,将 PWM 信号转换为有效直流电平,PWM 控制信号很容易由单片机产生。任务实施一、 绘制原理图在PROTUES软件中绘制原理图,如图所示。二、 编写源程序三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTUES中作原理图仿真。正确的编译结果如图所示。目标检测任务三 直流电机调速控制实训知识准备本次任务是制作一个直流电机调速控制电路,并能够根据控制要求编写单片机程序。任务实施一、 绘制原理图在PROTUES软件中绘制原理图,如图所示。二、 编写源程序三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTUES中作原理图仿真。正确的编译结果如图所示。四、 电路制作与调试① 对照下面的元件清单准备元器件。② 根据实训条件,可以采用万能板焊接或在制作好的PCB上焊接。图为制作好的电路,是用万能板制作的,单片机的4组I/O口全部用插针引出,便于做其他的实验。③ 利用SPI下载线或编程器将编译好的HEX文件固化到单片机AT89S51或AT89S52中,加电调试。实验效果如图所示。知识拓展在原有硬件电路上,编程实现对直流电动机0~9挡的速度控制,并在数码管上显示相应的挡位。目标检测六、课后作业完成每个任务的目标检测。16项目五 通信口应用与控制一、教学目标1.了解单片机串口通信相关知识及单片机串口控制寄存器位含义。2.掌握单片机串口通信的波特率、传送方式、传送控制的设置并运用在程序设计中。3.了解RS232协议基本知识,认识RS232接口及MAX232芯片功能。4.熟悉基本的单片机与上位机通信程序。二、课时分配本项目共2个任务,安排6课时。三、教学重点通过本项目的学习,让学生学习单片机双向控制系统设计、无线抄表系统的控制设计的识读及简单分析;从本项目开始,我们将利用51系列单片机串口进行单片机双向通信控制系统设计与无线抄表系统的控制设计两个任务的学习与实训,从而掌握单片机串行口的设计应用与通信协议程序的设计方法。让学生由理论联系实践,在教学过程中培养学生自主性、研究性学习方法和思想。四、教学难点1.掌握串口通信助手等适用软件的运用。2.掌握PROTEUS内置虚拟终端的使用。五、教学内容任务一 单片机双向控制系统设计知识准备51系列单片机上有一个通用异步接收/发送器UART,通过引脚RXD(P3.0)和TXD(P3.1)可与外部电路进行全双工的串行异步通信,发送数据时由TXD端送出,接收时数据由RXD端输入。这样就可以实现双机通信,即不仅能实现单片机与单片机之间,而且可以通过电平转换电路实现单片机与工控机或计算机的通信。一、 串行通信概述1. 数据的通信方式数据通信方式有并行通信与串行通信两种,示意图如图所示。(1) 并行通信(2) 串行通信2. 串行通信的分类(1) 同步通信(2) 异步通信3. 串行通信的方向串行通信的方向分为单工传送与双工传送。双工传送又分为半双工传送与全双工传送。(1)在串行通信中,把通信接口只能发送或接收的单向传送方法叫做单工传送。比如发射台、收音机或电视机等设备。(2)把数据在甲乙两机之间的双向传递,称之为双工传送二、 串行接口的组成1. 串行接口的结构串行接口主要由发送数据缓冲器、发送控制器、输出控制门、接收数据缓冲器、接收控制器、输入移位寄存器、波特率发生器T1等组成。2. 串行数据缓冲器SBUFSBUF对应着两个寄存器,一个是串行发送寄存器,另一个是串行接收寄存器,但它们都用SBUF这一个名称,且统一编址为99H,故初学者往往搞不清楚。3. 串行口的特殊功能寄存器(1) 串行口控制寄存器SCON串行口控制寄存器SCON用于定义串行口的工作方式及实施接收和发送控制,该寄存器地址为98H,其各位定义如表511所示。SM0、SM1——串行口工作方式选择位,其定义如表所示。② SM2——多机通信控制位:③ REN——接收允许控制位:④ TB8——要发送数据的第9位:⑤ RB8——接收到的数据的第9位:⑥ TI——发送中断标志:⑦ RI——接收中断标志位:(2) 电源控制寄存器PCON① SMOD——波特率加倍位:② GF1、GF0——普通标志位:③ PD——掉电工作模式:④ IDL——空闲工作模式:4. 串行口工作方式(1) 方式0方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。8位串行数据是从RXD输入或输出,TXD用来输出同步脉冲。(2) 方式1方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。(3) 方式2 方式2为固定波特率的11位UART方式。它比方式1增加了一位可程控的为1或0的第9位数据。(4) 方式3方式3也为波特率可变的11位UART方式。除波特率外,其余与方式2相同。5. 波特率的概念与选择在前面的学习中,我们发现有一个名称频繁出现,那就是波特率。所谓波特率,就是每秒钟传送的二进制的位数,单位是bps(bits per second)。它是衡量串行数据传输速度快慢的一项重要指标。(1) 方式0的波特率方式0波特率=fosc/12(2) 方式2的波特率串行口方式2波特率的产生与方式0不同,即输入的时钟源不同,其时钟输入部分如图所示。(3) 方式1和方式3的波特率方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定,因此,8051串行口方式1和方式3的波特率由定时器T1的溢出率与SMOD值同时决定。如图所示。任务实施一、原理图的绘制A机的P3.0即串行口接收端(RXD)与P3.1即串行口发送端(TXD)分别接B机的P3.1(TXD)与P3.0(RXD),见图。二、 编写源程序三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTEUS中作原理图仿真。A机程序与B机程序分开编译,在PROTEUS中模拟烧录时也应分别烧录。PROTEUS仿真结果如图所示。读者要注意的是,PROTEUS对单片机的仿真,在画原理图时可以省略最小化系统部分,但在实际做套件时,是不能省略的。目标检测任务二 无线抄表系统的控制设计知识准备无线抄表是利用先进的计算机技术和通信技术自动获取和处理用户表数据的一种手段,是提高供电企业自动化管理水平的需要,也是计算机技术和通信技术迅速发展的必然。一、 RS232串行接口基本知识RS232接口(又称 EIA RS232C)是目前最常用的一种串行通信接口。RS232接口一般有两种,一种是25针(或25孔)座,称为DB25;一种是9针(或9孔)座,称为DB9。如图所示。在单片机与上位机串行通信中经常采用的是DB9。这是一种9针(或9孔)标准座,图所示为这种接口的原理图。每个插针或插座的使用意义。二、 TTL电平与RS232电平的转换TTL电平与RS232电平转换在早期是用MC1488或75188等芯片实现TTL电平转RS232电平;用MC1489或75189等芯片实现RS232电平转TTL电平。现在用得最多的转换芯片是MAX232、HIN232或MAX202等,这些芯片的最大优点在于实现了TTL电平与RS232电平之间的相互转换。1. 串口调试工具的使用通过上面的学习已经知道,单片机与上位机之间的通信主要考虑的是逻辑电平的匹配问题,而这个问题已经通过MAX232芯片转换至RS232解决。2. KYL610无线传输模块介绍外形尺寸为40mm×24mm×6mm(不包括天线接头),见图。(1) 主要特点① 载波频率: 433MHz。也可定制其他频段。如300~350 MHz, 390~460MHz及780~925 MHz。② 多种可选的通信接口: RS232、TTL 或RS485 接口。③ 数据格式: 8N1/8E1/8O1(也可提供其他格式,如 9 位数据位)。④ 传输效率: 1200、2400、4800、9600、19200、38400、100kbps,250bps。⑤ 16个通信信道,也可根据客户要求扩展。⑥ 透明的数据传输: 提供透明的数据接口,能适应任何标准的用户协议。(2) 应用领域① 水、电、气等无线抄表系统及工业遥控、遥测及楼宇自动化、安防、机房设备无线监控、门禁系统。② 无线呼叫系统、无线排队机、医疗器。③ 无线 POS、PDA。④ 无线数据传输,自动化数据采集系统 。⑤ 无线 LED 显示屏、抢答器等,智能交通。(3) 详细规格① 供电电源: DC3.1~5.5V;② 输出功率: ≤50mW;③ 发射电流: <40mA;④ 接收电流: <20mA(TTL接口);⑤ 接收灵敏度: -112dBm(1200bps);-108dBm(9600bps)(4) 接口定义接口定义如表所示。3. 软件设置信道与频率的对应关系如表所示。4. 模块使用方法(1) 电源KYL610 无线电数传模块使用直流电源,工作电压从 3.1V~5.5V。(2) 模块与串行口的连接(3) 模块上的指示灯(4) 关于模块的数据传输(5) 标准配置① KYL610无线传输模块一只。② 6PIM扁平连接线一条。③ 弹簧天线一支。(6) 可选配件① RS232接口编程连接线USB接口编程连接线数据传输测试设备④ 可选天线5. KYL610无线数传调试软件的使用当把一块KYL610无线传输模块(用TTL接口电平)接到单片机的RXD与TXD;再用一块KYL610无线传输模块(用RS232接口电平)接至个人电脑的RS232口时,原来的串口通信程序不需作任何修改,就做到了单片机与上位机之间的无线通信。任务实施原理图的绘制二、 编写源程序三、 编译与仿真将上述源程序在KEIL C中编译并生成HEX文件,在PROTEUS中作原理图仿真。在作PROTEUS仿真时须注意以下几个关键点,这是仿真成功与否的关键。目标检测六、课后习题完成每个任务的目标检测。 展开更多...... 收起↑ 资源列表 1 项目一 闪烁报警灯.docx 2 项目二 按键计数器.docx 3 项目三 倒计时交通灯.docx 4 项目四 直流电机调速.docx 5 项目五 通信口应用与控制.docx