《用单片机控制数码管显示数字_的设计与研究.doc》由会员分享,可在线阅读,更多相关《用单片机控制数码管显示数字_的设计与研究.doc(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、毕业论文用单片机控制数码管显示数字的设计与研究学生姓名: 专 业: 年 级: 学 号: 指导教师: 目录摘 要2设计背景与方案3第一章 单片机介绍51.1 单片机根底知识学习51.2 AT89S51单片机的主要性能参数71.3 AT89S51芯片内部结构简介71.4 主要引脚功能8第二章 数码管的介绍122.1 数码管分类、结构及工作原理122.2 数码管的引脚132.3 驱动方式14第三章 KEIL软件简介163.1 系统概述163.2 整体结构简介163.3 建立工程步骤17第四章 程序设计及仿真224.1 设计要求224.2 利用proyeus仿真软件画出电路图224.3 流程图绘制以及
2、说明234.4 用kiel设计程序及仿真结果234.5 心得体会29附录A30附录B31致谢34参考文献35摘 要单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。通常,单片机由单块集成电路芯片构成,内部包含有计算机的根本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易
3、失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器 既可在线编程ISP也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。关键词: 单片机 AT89s51 数码管 proteus keil3设计背景与方案一、设计背景1.单片机开展前景目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的平安保障系统
4、,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。2.共阳极数码管的显示方法LED数码管是单片机控制系统中最常见的显示器件之一,一般用来显示处理结果或输入输出信号的状态。数码管显示是一个系统工程中必不可少的人机交互环节,因此关于数码管的驱动也就是系统工程中的一个重要的环节。数码管的驱动分为动态驱动和静态驱动两种。所谓静态驱动,就是指无论多少位LED数码管,同时处于显示状态。动态显示驱动是指无论在任何时刻只有一个LED数码管处于显
5、示状态,及单片机采用“扫描方式控制各个数码管轮流显示。3.共阳极数码管的驱动设计将数码管每个LED灯对应单片机的一个I/O口。通过单片机的P口来控制LED灯的亮和灭。I/O口之间互相独立,需要用I/O口直接控制LED。动态显示将数码管的每个引脚一对一连接在一起接单片机的数据,而将各个数码管的公共端单独送至单片机的I/O口进行片选。此外,在此根底上,用单片机与三极管来驱动数码管,从而实现数码管的动态显示。二、设计方案1.静态显示静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据
6、时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小。能供应单独锁存的I/O接口电路很多,各数码管的公共极固定接有效电平,各数码管的字形控制端分别由各自的控制信号控制。LED显示亮度温度,容易调节,编程容易,工作是占用CPU时间短。但假设直接用单片机输出各位数码管的字形信号时,占用单片机的I/O口线较多。一般仅适用于显示位数较少的应用场合。2.动态显示端口控制数码管的个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过驱动三极管给数码管相应的位供电,这是只要P3口送出数字的显示代码,数码管就能正常的显示数字。3.动态显示与静态显示比照本设计要求循环显示,要求显示不
7、同数字,所以要求用动态扫描的方式实现,即采用动态的显示方式,就是显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到不同数字的稳定显示。数码管的字形控制端对应的并在一起,由一组I/O端口进行控制,公共极相互独立,分别由不同的I/O控制信号控制。为了到达我们的设计要求,实现用单片机控制数码管显示数字的设计,下面我们将从根底知识开始研究。第一章 单片机介绍单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能可能还包括显示驱动电路、脉宽调制电路、模拟
8、多路转换器、A/D转换器等电路集成到一块硅片上构成的一个小而完善的计算机系统。单片机也被称为微控制器Microcontroller Unit,常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器开展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的开展便分道扬镳。1.1 单片机根底知识学习早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很
9、大的好评。此后在8031上开展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大开展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美
10、元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和 核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。 、 、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远
11、超过PC机和其他计算的总和,甚至比人类的数量还要多。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格廉价、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最正确选择。 单片机内部也用和电脑功能类似的模块,比方CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可用它来做一些控制电器一类不是很复杂的工作足矣了
12、。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制局部的核心部件。 它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的本钱,这也是和离线式计算机的比方家用PC的主要区别。图1-1 单片机芯片目前,很多人对汇编语言并不认可。可以说,掌握用C语言单片机编程很重要,可以大大提高开发的效率。不过初学者可以不了解单片机的汇编语言,但一定要了解单片机具体性能和特点,不然在单片机领域是比拟致命的。如果不考虑单片机硬件资源,在KEIL中用C胡乱编程,结果只能是出了问题无法解决!可以肯定的说,最好的C语言单片机工程师都是从汇编走出来
13、的编程者因为单片机的C语言虽然是高级语言,但是它不同于台式机个人电脑上的VC+什么的单片机的硬件资源不是非常强大,不同于我们用VC、VB等高级语言在台式PC上写程序毕竟台式电脑的硬件非常强大,所以才可以不考虑硬件资源的问题。还有就是在单片机编程中C语言虽然编程方便,便于人们阅读,但是在执行效率上是要比汇编语言低10%到20%,所以用什么语言编写程序是要看具体用在什么场合下。总的来说做单片机编程要灵活使用汇编语言与C语言,让单片机的强大功能以最高是效率展示给用户。1.2 AT89S51单片机的主要性能参数AT89S51 是美国 ATMEL 公司生产的低功耗,高性能 CMOS8 位单片机,片内含
14、4k bytes 的可系统编程的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 8051 指令系统及引脚。它集 Flash 程序存储器既可在线编程ISP也可用传统方法进行编程及通用 8 位微处理器于单片芯片中,ATMEL 公司的功能强大,低价位 AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。主要性能参数与单片机产品兼容4k 字节 Flash 闪速存储器、128 字节内部 RAM、1000次擦写周期、全静态操作:0Hz33Hz、三级加密程序存储器、32个可编程I/O口线 、两个数据指针、两个 16 位定时/计数器
15、、六个中断源 、全双工UART串行通道低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器WDT、双数据指针、掉电标识符、一个 5 向量两级中断结构、片内振荡器及时钟电路。同时,AT89S51 可降至 0Hz 的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。1.3 AT89S51芯片内部结构简介AT89S51单片机的片内硬件组成结构如附录A中图1所示。把作为控制应用所必需的根本功能部件都集成在一个尺寸有限的集成电路芯
16、片上。下面介绍附录A中图1里片内各功能部件。一、中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。二、数据存储器(内部RAM):数据存储器用于存放变化的数据。AT89S51中数据存储器的地址空间为256个RAM单元,但其中能作为数据存储器供用户使用的仅有前面128个,后128个被专用存放器占用。三、程序存储器(内部ROM):程序存储器用于存放程序和固定不变的常数等。通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。AT89S51内部配置
17、了4KB闪存。四、定时/计数器(ROM): 定时/计数器用于实现定时和计数功能。AT89S51共有2个16位定时/计数器。五、并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。每个口都由1个锁存器和一个驱动器组成。它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。六、全双工串行口:AT89S51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。七、时钟电路:时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。八、中断系统:中断系统的作用主要是对外
18、部或内部的终端请求进行管理与处理。AT89S51共有5个中断源,其中又2个外部中断源和3个内部中断源。1.4 主要引脚功能AT89S51 引脚图如图1-2所示:1VCC:电源电压2GND:地线3P0口:P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址低8位和数据总线复用,在访问期间激活内部上拉电阻。4P1口:Pl 是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动吸收或输出电流4个TTL逻辑门电路。对端口写“l,通过内部的上拉电
19、阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流IIL。Flash编程和程序校验期间,Pl接收低8位地址。表1 具有第二功能的P1口引脚端口引脚第二功能MOSI用于ISP编程MOSI用于ISP编程MOSI用于ISP编程图1-2 AT89S51引脚图5P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动吸收或输出电流4 个TTL逻辑门电路。对端口写“1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流IIL。在访问外部程
20、序存储器或16位地址的外部数据存储器例如执行MOVXDPTR指令时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器如执行MOVXRi 指令时,P2 口线上的内容也即特殊功能存放器SFR区中P2存放器的内容,在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。6P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/0 口。P3 口输出缓冲级可驱动吸收或输出电流4 个TTL逻辑门电路。对P3口写入“l时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流IIL。P3口除了作为一般的I/0口线外,更重要的用途是它的第二
21、功能,如下表所示:表2 具有第二功能的P3口引脚端口引脚第二功能RXD串行输入口TXD串行输出口/INT0外中断0P/ INT1外中断1T0定时/计数器0外部输入T1定时/计数器1外部输入/ WR外部数据存储器写选通/ RD外部数据存储器读选通P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。7RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位地址8EH可翻开或关闭该功能。DISRT0位缺省为RESET输出高电平翻开状态。8ALE/PROG():当访问外部程序存储器或数据
22、存储器时,ALE地址锁存允许输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对F1ash存储器编程期间,该引脚还用于输入编程脉冲PROG。如有必要,可通过对特殊功能存放器SFR区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。9PSEN()程序储存允许PSEN()输出是外部程序存储器的读选通信号,当AT89S5
23、1 由外部程序存储器取指令或数据时,每个机器周期两次PSEN()有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN()信号。10EA()/VPP:外部访问允许。欲使CPU仅访问外部程序存储器地址为0000HFFFFH,EA端必须保持低电平接地。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平接VCC端,CPU那么执行内部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。11XTAL1:振荡器反相放大器及内部时钟发生器的输入端。第二章 数码管的介绍2.1 数码管分类、结构及工作原理一、数码管分类数码管也称LED数码管,
24、数码管是一种半导体发光器件,其根本单元是发光二极管.数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元多一个小数点显示;按能显示多少个“8可分为1位、2位、3位、4位、5位、6位、7位等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阳极(COM)的数码管。共阴数码管在应用时应将
25、公共极PWR接到电源输入PWR上, 当某一字段发光二极管的阴极极为低电平时, 相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。二、数码管结构LED数码管LED Segment Displays是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位、1、2、3、4、5、6、8、10位等等,LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不
26、同的。共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。LED数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。三、数码管工作原理数码管的每一段是由发光二极管组成,所以在使用时跟发光二极管一样,也要连接限流电阻,否那么电流过大会烧毁发光二极管的。共阳极数码管中8个发光二极管的阳极二极管正端连接一起,即为共阳极接法,简称共阳数码管。通常,公共阳极接高电平一般接电源,其它管脚接段驱动电路输出端。当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符
27、。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管中8个发光二极管的阴极二极管负端连接在一起,即为共阴极接法,简称共阴数码管。通常,共阴极接低电平一般接地,其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。2.2 数码管的引脚数码管一般有七段或者八段(小数点DP段有就是八段,否那么就是ABCDEFG七段)。图2-1 共阳极数码管引脚图数码管分共阴极和共
28、阳极两种共阳极就是把所有LED的阳极连接到共同接点COM,而每个LED的阴极分别为A、B、C、D、E、F、G及DP小数点;共阴极那么是把所有LED的阴极连接到共同接点COM,而每个LED的阳极分别为A、B、C、D、E、F、G及DP小数点,引脚有a、c、d、e、f、g、h和公共端,如下列图(h引脚也叫做DP引脚,接的就是小数点) 图2-2 共阴极数码管引脚图对于单个数码管来说,从它的正面看进去,左下角那个脚为1脚,以逆时针方向依次为110脚,左上角那个脚便是10脚了,上面两个图中的数字分别与这10个管脚一一对应。注意,3脚和8脚是连通的,这两个都是公共脚。2.3 驱动方式数码管要正常显示,就要用
29、驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。一、静态显示驱动静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示那么需要58=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。二、动态显示驱动数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所
30、有数码管的8个显示笔划“a、b、c、d、e、f、g、dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制翻开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足
31、够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。第三章 Keil软件简介单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断开展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断开展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷
32、宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境uVision将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工
33、具也会令你事半功倍。3.1 系统概述Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能表达高级语言的优势。3.2 整体结构简介C51工具包的整体结构,如图3-1所示,其中uVis
34、ion与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创立生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。图3-1 C51工具包的整体结构图3.3 建立
35、工程步骤1点击Project菜单,选择弹出的下拉式菜单中的New Project,如图3-2。图3-2接着弹出一个标准Windows文件对话窗口,在“文件名中输入您的第一个C程序工程名称,“保存后的文件扩展名为uv2,这是KEIL uVision2工程文件扩展名,以后我们可以直接点击此文件以翻开先前做的工程。2选择所要的单片机。3首先我们要在工程中创立新的程序文件或参加旧程序文件。如果你没有现成的程序,那么就要新建一个程序文件。4点击保存新建的程序,也可以用菜单FileSave或快捷键Ctrl+S进行保存。我们把第一个程序命名为,保存在工程所在的目录中,这时你会发现程序单词有了不同的颜色,说明
36、KEIL的C语法检查生效了。如图3-3,鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在工程中增加减少文件等操作。 图3-35C程序文件已被我们加到了工程中了,下面就剩下编译运行了。如图3-4,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译当前工程,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6是有一
37、个小放大镜的按钮,这就是开启关闭调试模式的按钮,它也存在于菜单DebugStartStop Debug Session,快捷键为Ctrl+F5。 图3-46进入调试模式,软件窗口样式大致如图3-5所示。图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4我们可以翻开5中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个工程也正是在这里看运行结果。首先按4翻开串行调试窗口,再按运行按钮。要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后我们就可以进行关闭KE
38、IL等相关操作了。7生成HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示,常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。 图3-5翻开目录,找到的文件就可以翻开先前的工程了。然后右击图3-6中的1工程文件夹,弹出工程功能菜单,选Options for TargetTarget1,弹出工程选项设置窗口,同样先选中工程文件夹图标,这时在Project菜单中也有一样的菜单可选。 图3-6翻开工程选项窗口,转到Output选项页图3-7所示,图中1是选择编译输出的路径,2是
39、设置编译输出生成的文件名,3那么是决定是否要创立HEX文件,选中它就可以输出HEX文件到指定的路径中。 图3-7选好后再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创立到指定的路径中了,如图3-8这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果。 图3-8第四章 程序设计及仿真4.1 设计要求要求利用单片机中断功能控制数码管显示,状态:当无外中断时,主程序运行状态为七段数码管的A到G段依次点亮,不断循环,有外中断输入时,显示为0到9,然后返回主程序原断点,继续执行,数码管继续段点亮。4.2 利用proyeus仿真软件画出电路图首先添加元器件:元件拾取共有两种
40、方法,一种是按类别查找和拾取元件,另一种是直接查找和拾取元件。然后在原理图编辑区单击鼠标左键即完成元件的释放。最后电路连线:用鼠标左键单击编辑区元件的一个端点拖动到要连接的另外一个元件的端点,先松开左键后再单击鼠标左键,即完成一根连线,以此类推最终结果如图 4-2所示。图4-24.3 流程图绘制以及说明主程序主要分为四局部,包括复位电路局部、独立按键的判别局部、单片机控制主程序局部和译码显示局部,模块流程图如图4-1所示:结束返回重新检测按键将单片机处理的数据进行显示单片机主控制电路向单片机申请显示0计数加1,向单片机申请显示该数值。Y是否按键?开始N 图4-1 主程序流程图4.4 用keil
41、设计程序及仿真结果一、程序如下: ORG 0000H ;从0000H单元开始 LJMP START ;跳转到真正的程序起点START: MOV SP,#5FH ;堆栈初始化 MOV 20H,#00H ;20H作为计数器LOOP: CALL DISP ;调用显示程序 CALL DELAY ;调用延时程序 INC 20H ;计数器加1 MOV A,20H ;将计数器中的值送到A中 CJNE A, #0AH,L1 ;A中的值到了10吗?未到转L1 MOV 20H,#00H ;A中的值到了10让其回0L1: LJMP LOOP ;转LOOP继续循环DISP: ;显示子程序 CLR P2.7 ;由硬件电
42、路要求 MOV A,20H ;取出计数器中的值送A MOV DPTR,#50H ;将字形码表的首地址送到DPTR中 MOVC A,A+DPTR ;根据A中的值查表 MOV P0,A ;查出相应字形码送到P0口 RET ;返回DELAY: ;延时子程序 MOV R7,#10 ;R7=10D1: MOV R6,#250 ;R6=250D2: MOV R5,#250 ;R5=250D3: DJNZ R5,D3 ;R5中的值不等于0转本身循环 DJNZ R6,D2 ;R6中的值不等于0转D2 DJNZ R7,D1 ;R7中的值不等于0转D1 RET ;返回 ORG 50H ;从50H单元开始存放字形码
43、表DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END ; 结束伪指令二、程序仿真及烧录启动Keil软件,输入源程序,并保存起来;然后建立工程文件,参加源程序,设置工程。翻开Debug选项卡后,在左侧最下面的Parametet文本框中输入“-ddpj,单击“确定关闭对话框,如图4-3所示。图4-3 设置工程文件按F7汇编、链接以获得目标文件,然后选择Debug-Start/Stor Debug菜单项进入调试状态。选择Peripherals“键盘显示实验仿真板。如图4-4所示。图4-4 选择实验仿真板再单击“运行按钮即可开始运行。可以从仿真板上直观地观察到LED上有数字的显示,如图4-5所示。图4-5 仿真运行显示三、仿真结果如下:从仿真板上直观地观察到LED上有数字的显示,显示数字从0到9,如图4-6所示。图4-6 仿真显示数字0到94.5 心得体会:本次设计主要是针对单片机知识,用汇编语言在KEIL中编程,在PROTEUS中绘制原理图并进行仿真,通过对这两个软件的学习,了解了其功能的强大,掌握了AT89S51的内部结构及工作原理,对于我们以后的学习和实践有很大的指导意义。这次课程设计使我在学习新知识的同时,还锻炼了我的意志品质,当调试程序出现错误时,并没有使我灰心,让我放弃,而是通过自己不懈的努力,
限制150内