用单片机控制数码管显示数字的设计与研究

上传人:马*** 文档编号:66872357 上传时间:2022-03-29 格式:DOC 页数:36 大小:1.69MB
收藏 版权申诉 举报 下载
用单片机控制数码管显示数字的设计与研究_第1页
第1页 / 共36页
用单片机控制数码管显示数字的设计与研究_第2页
第2页 / 共36页
用单片机控制数码管显示数字的设计与研究_第3页
第3页 / 共36页
资源描述:

《用单片机控制数码管显示数字的设计与研究》由会员分享,可在线阅读,更多相关《用单片机控制数码管显示数字的设计与研究(36页珍藏版)》请在装配图网上搜索。

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

2、.3 流程图绘制以及说明234.4 用kiel设计程序及仿真结果234.5 心得体会29附录A30附录B31致谢34参考文献35摘 要单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用ATME

3、L公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器 既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。关键词: 单片机 AT89s51 数码管 proteus keil3设计背景与方案一、设计背景1.单片机发展前景目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民

4、用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。2.共阳极数码管的显示方法LED数码管是单片机控制系统中最常见的显示器件之一,一般用来显示处理结果或输入输出信号的状态。数码管显示是一个系统工程中必不可少的人机交互环节,因此关于数码管的驱动也就是系统工程中的一个重要的环节。数码管的驱动分为动态驱动和静态驱动两种。所谓静态驱动,就是指无论多少位LED数码管,同时处于显示状态。动态显示驱动是指无论在任何时刻只

5、有一个LED数码管处于显示状态,及单片机采用“扫描”方式控制各个数码管轮流显示。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.动态显示P2.0端口控制数码管的个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+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的

9、8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价

10、格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可

11、能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可用

12、它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。 它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。图1-1 单片机芯片目前,很多人对汇编语言并不认可。可以说,掌握用C语言单片机编程很重要,可以大大提高开发的效率。不过初学者可以不了解单片机的汇编语言,但一定要了解单片机具体性能和特点,不然在单片机领域是比较致命的。如果不考虑单片机硬件资源,在KEIL中用C胡乱编程,结果只能是出了问题无法解决!可以肯

13、定的说,最好的C语言单片机工程师都是从汇编走出来的编程者因为单片机的C语言虽然是高级语言,但是它不同于台式机个人电脑上的VC+什么的单片机的硬件资源不是非常强大,不同于我们用VC、VB等高级语言在台式PC上写程序毕竟台式电脑的硬件非常强大,所以才可以不考虑硬件资源的问题。还有就是在单片机编程中C语言虽然编程方便,便于人们阅读,但是在执行效率上是要比汇编语言低10%到20%,所以用什么语言编写程序是要看具体用在什么场合下。总的来说做单片机编程要灵活使用汇编语言与C语言,让单片机的强大功能以最高是效率展示给用户。1.2 AT89S51单片机的主要性能参数AT89S51 是美国 ATMEL 公司生产

14、的低功耗,高性能 CMOS8 位单片机,片内含 4k bytes 的可系统编程的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 8051 指令系统及引脚。它集 Flash 程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用 8 位微处理器于单片芯片中,ATMEL 公司的功能强大,低价位 AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。主要性能参数与单片机产品兼容4k 字节 Flash 闪速存储器、128 字节内部 RAM、1000次擦写周期、全静态操作:0Hz33Hz、三级加密程序存储器、32个可编程I

15、/O口线 、两个数据指针、两个 16 位定时/计数器、六个中断源 、全双工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):程序存储器用于存放程序和固定不变的常数等。通常采用只读存储器,且其又多种类型

17、,在89系列单片机中全部采用闪存。AT89S51内部配置了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所示:(1)VCC:电源电压(2)GND:地线(3)P0口:P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。(4)P1口:Pl 是一个带内部上拉电阻的8位双向I/O口,Pl的输出

19、缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,Pl接收低8位地址。表1 具有第二功能的P1口引脚端口引脚第二功能P1.5MOSI(用于ISP编程)P1.6MOSI(用于ISP编程)P1.7MOSI(用于ISP编程)图1-2 AT89S51引脚图(5)P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉

20、电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVXRi 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。(6)P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/0 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3口写入

21、“l”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表所示:表2 具有第二功能的P3口引脚端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外中断0)P3.3/ INT1(外中断1)P3.4T0(定时/计数器0外部输入)P3.5T1(定时/计数器1外部输入)P3.6/ WR(外部数据存储器写选通)P3.7/ RD外部数据存储器读选通)P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。(7)RST:复位输入。当振荡

22、器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平打开状态。(8)ALE/PROG():当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功

23、能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。(9)PSEN()程序储存允许(PSEN())输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN()有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN()信号。(10)EA()/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编

24、程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。(11)XTAL1:振荡器反相放大器及内部时钟发生器的输入端。第二章 数码管的介绍2.1 数码管分类、结构及工作原理一、数码管分类数码管也称LED数码管,数码管是一种半导体发光器件,其基本单元是发光二极管.数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管

25、。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阳极(COM)的数码管。共阴数码管在应用时应将公共极PWR接到电源输入PWR上, 当某一字段发光二极管的阴极极为低电平时, 相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。二、数码管结构LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,

26、只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位、1、2、3、4、5、6、8、10位等等,LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。LED数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。三、数码管工作原理数码管的每一段是由发光二极管组成,所以在使用时

27、跟发光二极管一样,也要连接限流电阻,否则电流过大会烧毁发光二极管的。共阳极数码管中8个发光二极管的阳极(二极管正端)连接一起,即为共阳极接法,简称共阳数码管。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管中8个发光二极管的阴极(二极管负端)连接在一起,即为共阴极接法,简称共阴数码管。通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的

28、输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。2.2 数码管的引脚数码管一般有七段或者八段(小数点DP段有就是八段,否则就是ABCDEFG七段)。图2-1 共阳极数码管引脚图数码管分共阴极和共阳极两种(共阳极就是把所有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、

29、e、f、g、h和公共端,如下图(h引脚也叫做DP引脚,接的就是小数点) 图2-2 共阴极数码管引脚图对于单个数码管来说,从它的正面看进去,左下角那个脚为1脚,以逆时针方向依次为110脚,左上角那个脚便是10脚了,上面两个图中的数字分别与这10个管脚一一对应。注意,3脚和8脚是连通的,这两个都是公共脚。2.3 驱动方式数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。一、静态显示驱动静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二十进制译码器译

30、码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要58=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。二、动态显示驱动数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a、b、c、d、e、f、g、dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位

31、选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。第三章 Keil软件简介单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,

32、一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM

33、、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。3.1 系统概述Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更

34、加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。3.2 整体结构简介C51工具包的整体结构,如图3-1所示,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件

35、(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。图3-1 C51工具包的整体结构图3.3 建立项目步骤(1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图3-2。图3-2接着弹出一个标准Windows文件对话窗口,在“文件名”中输入您的第一个C程序项目名称,“保存”后的文件扩展名为uv2,这是KEIL uVisi

36、on2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。(2)选择所要的单片机。(3)首先我们要在项目中创建新的程序文件或加入旧程序文件。如果你没有现成的程序,那么就要新建一个程序文件。(4)点击保存新建的程序,也可以用菜单FileSave或快捷键Ctrl+S进行保存。我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时你会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。如图3-3,鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。 图3-3(5)C程序文件已被我们加到了项目中了,下面就剩下编译运行

37、了。如图3-4,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6是有一个小放大镜的按钮,这就是开启关闭调试模式的按钮,它也存在于菜单DebugStartStop Debug Session,快捷键为Ctrl+F5。 图3-4(6)进入调试模式,软件窗口样式大致如图3-5所示。图中1

38、为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4我们可以打开5中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。首先按4打开串行调试窗口,再按运行按钮。要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后我们就可以进行关闭KEIL等相关操作了。(7)生成HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示,常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区

39、中的目标代码映象。一般的编程器都支持这种格式。 图3-5打开目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击图3-6中的1项目文件夹,弹出项目功能菜单,选Options for TargetTarget1,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。 图3-6打开项目选项窗口,转到Output选项页图3-7所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。 图3-7选好后再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径

40、中了,如图3-8这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果。 图3-8第四章 程序设计及仿真4.1 设计要求要求利用单片机中断功能控制数码管显示,状态:当无外中断时,主程序运行状态为七段数码管的A到G段依次点亮,不断循环,有外中断输入时,显示为0到9,然后返回主程序原断点,继续执行,数码管继续段点亮。4.2 利用proyeus仿真软件画出电路图首先添加元器件:元件拾取共有两种办法,一种是按类别查找和拾取元件,另一种是直接查找和拾取元件。然后在原理图编辑区单击鼠标左键即完成元件的释放。最后电路连线:用鼠标左键单击编辑区元件的一个端点拖动到要连接的另外一个元件的端点

41、,先松开左键后再单击鼠标左键,即完成一根连线,以此类推最终结果如图 4-2所示。图4-24.3 流程图绘制以及说明主程序主要分为四部分,包括复位电路部分、独立按键的判别部分、单片机控制主程序部分和译码显示部分,模块流程图如图4-1所示:结束返回重新检测按键将单片机处理的数据进行显示单片机主控制电路向单片机申请显示0计数加1,向单片机申请显示该数值。Y是否按键?开始N 图4-1 主程序流程图4.4 用keil设计程序及仿真结果一、程序如下: ORG 0000H ;从0000H单元开始 LJMP START ;跳转到真正的程序起点START: MOV SP,#5FH ;堆栈初始化 MOV 20H,

42、#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 ;由硬件电路要求 MOV A,20H ;取出计数器中的值送A MOV DPTR,#50H ;将字形码表的首地址送到DPTR中 MOVC A,A+DPTR ;根据A中的值查表 MOV P0,A ;查出相

43、应字形码送到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单元开始存放字形码表DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END ; 结束伪指令二、程序仿真及烧录启动Keil软件,输入源程序,并保存起来;然后建立工

44、程文件,加入源程序,设置工程。打开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 仿真显

45、示数字0到94.5 心得体会:本次设计主要是针对单片机知识,用汇编语言在KEIL中编程,在PROTEUS中绘制原理图并进行仿真,通过对这两个软件的学习,了解了其功能的强大,掌握了AT89S51的内部结构及工作原理,对于我们以后的学习和实践有很大的指导意义。这次课程设计使我在学习新知识的同时,还锻炼了我的意志品质,当调试程序出现错误时,并没有使我灰心,让我放弃,而是通过自己不懈的努力,弄懂了每一部分知识。因此,本次课设对我以后无论是学习还是工作,都有着较大的帮助。通过这次课程设计,使我意识到了课本上的知识远远不能满足当今社会的需要,让我知道了未来学习知识要更加注重实践与实用。通过此次设计给我最大

46、的感触就是做任何事都要自信和认真。自信不可盲目,更不要自大,一切有真实学和能力的人往往对此把握的游刃有余。认真是一种作风和态度,是一个人品质的集中体现,也包含对事业的责任心!有时候我们需要的太多,我们不妨从这两方面做起,去挑战自己!附录A图1 AT89S51结构框图附录B 单片机AT89S51汇编指令表数据传送指令序助记符功能字节数振荡周期1MOVA,Rn寄存器内容送入累加器1122MOVA,direct直接地址单元中的数据送入累加器2123MOVA,Ri间接RAM中的数据送入累加器1124MOVA,#tata立即数送入累加器2125MOVRn,A累加器内容送入寄存器1126MOVRN,din

47、rect直接地址单元中的数据送入寄存器2247MOVRn,#data立即数送入寄存器2128MOVdirect,A累加器内容送入直接地址单元2129MOVdirect,A寄存器内容送入直接地址单元22410MOVDirect,direct直接地址单元中的数据送入另一个直接地址单元32411MOVDirect,Ri间接RAM中的数据送入另一个直接地址单元22412MOVEirect,#data立即数送入直接地址单元32413MOVRi,A累加器内容送间接RAM单元11214MOVRi,direct直接地址单元数据送入间接RAM单元22415MOVRi,#data立即数送入间接RAM单元21216

48、MOVDPTR,#datl616位立即数送入地址寄存器32417MOVC A,A+DPTR以DPTR为基地址变址寻址单元中的数据送入累加器12418MOVCA,A+PC以PC位基地址变址寻址单元中的数据送入累加器12419MOVXA,Ri外部RAM(8位地址)送入累加器12420MOVXA,DPTR外部RAM(16位地址)送入累加器12421MOVXRi,A累加器器送外部RAM(8位地址)12422MOVXDPTR,A累加器器送外部RAM(16位地址)12423PUSHDirect直接地址单元中的数据压入堆栈22424POPDirect弹栈送直接地址单元22425XCHA,Rn寄存器与累加器交

49、换11226XCHA,direct直接地址单元与累加器交换21227XCHA,Ri间接RAM与累加器交换11228XCHDA,Ri间接RAM的低半字节与累加器交换112算术操作类指令序助记符功能字节数振荡周期1ADDA,Rn寄存器内容加到累加器1122ADDA,direct直接地址单元的内容加到累加器2123ADDA,Ri间接RAM的内容加到累加器1124ADDA,#data立即数加到累加器2125ADDCA,Rn寄存器内容带进位加到累加器1126ADDCA,direct直接地址单元的内容带进位加到累加器2127ADDCA,Ri间接RAM的内容带进位回到累加器1128ADDCA,#data立即

50、数带进位加到累加器2129SUBBA,Rn累加器带借位减寄存器内容11210SUBBA,direct累加器带借位减直接地址单元的内容21211SUBBA,Ri累加器带借位减间接RAM中的内容11212SUBBA,#data累加器带借位减立即数21213INCA累加器加111214INCRn寄存器加111215INCDirect直接地址单元加121216INCRi间接RAM单元加111217DECA累加器减111218DECRn寄存器减111219DECDirect直接地址单元减121220DECRi间接RAM单元减111221INCDPTR地址寄存器DPTR加112422MULABA乘以B14

51、823DIVABA除以B14824DAA累回器十进制调整112逻辑操作类指令序助记符功能字节数振荡周期1ANLA,Rn累加器与寄存器相“与”1122ANLA,Ri累加器与直接地址单元相“与”2123ANLA,Ri累加器与间接RAM单元单元相“与”1124ANLA,#data累加器与立即数相“与”2125ANLDirect,A直接地址单元与累加器相“与”2126ANLDirect,#data直接地址单元与累加器相“与”3247ORLA,Rn累加器与寄存器相“或”1128ORLA,direct累加器与直接地址单元相“或”2129ORLA,Ri累加器与间接RAM单元单元相“或”11210ORLA,#

52、data累加器与立即数相“或”21211ORLDirect,A直接地址单元与累加器相“或”21212ORLDirect,#data直接地址单元与立即数相“或”32413XRLA,Rn累加器与寄存器相“异或”11214XRLA,direct累加器与直接地址单元相“异或”21215XRLA,Ri累加器与间接RAM单元单元相“异或”11216XRLA,#data累加器与立即数相“异或”21217XRLDirect,A直接地址单元与累加器相“异或”21218XRLDirect,#data直接地址单元与立即数相“异或”32419CLRA累加器清“0”11220CPLA累加器求反11221RLA累加器循环

53、左移11222RLCA累加器带进位循环左移11223RRA累加器循环右移11224RRCA累加器带进位循环右移11225SWAPA累加器半字节交换112控制转移类指令序助记符功能字节数振荡周期1ACALLAddrl1绝对(短)调用子程序2242LCALLAddr16长调用子程序3243RET子程序返回1244RETI中断返回1245AJMPAddrl1绝对(短)转移2246LJMPAddr16长转移3247SJMPRel相对转移2248JMPA+DPTR相对于DPTR的间接转移1249JZRel累加器为零转移22410JNZRel累加器非零转移22411CJNEA,direct,rel累加器与

54、直接地址单元比较,不相等则转移32412CJNEA,#data,rel累加器与立即数比较,不相等则转移32413CJNERn,#data,rel寄存器与立即数比较,不相等则转移32414CJNERi,#data,rel间接RAM单元与立即数比较,不相等则转移32415DJNZRn,rel寄存器减1,非零转移32416DJNZDirect,erl直接地址单元减1,非零转移32417NOP空操作112布尔变量操作类指令序助记符功能字节数振荡周期1CLRC清进位位1122CLRBit清直接地址位2123SETBC置进位位1124SETBBit置直接地址位2125CPLC进位位求反1126CPLBit

55、置直接地址位求反2127ANLC,bit进位位和直接地址位相“与“2248ANLC,bit进位位和直接地址位的反码相“与“2249ORLC,bit进位位和直接地址位的相“或“22410ORLC,bit进位位和直接地址位的反码相“或“22411MOVC,bit直接地址位送入进位位21212MOVBit,C进位位送入直接地址位22413MOVRel进位位为1则转移22414JNCRel进位位为0则转移22415JBBit,rel直接地址位为1则转移32416JNBBit,rel直接地址位为0则转移32417JBCBit,rel直接地址位为1则转移,该位清零324致谢首先衷心感谢我的指导教师雷静静老师。本次的论文工作是在雷老师的悉心指导下完成的,从论文的选题、资料的收集、设计以及论文的撰写,各个方面都离不开雷老师热情耐心的帮助和教导。在此次论文中,雷老师认真的工作态度,诚信宽厚的为人处世态度,都给我留下了难以磨灭的印象,也为我今后的工作树立了优秀的榜样。其次感谢我的组员张祥平,兰洋,赵小涛,潘帛书,唐远华等等。他们在一起度过了很多快乐,开心的日子。在他们的帮助下,我顺利的解决了遇到的各种困难。没有他们无私的帮助,我是无法完成论文工作的。最后,向所有关心我的亲人、师长和同学们表示深深的谢意!

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!