《课程设计(论文)基于单片机和DS18B20的数字温度计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于单片机和DS18B20的数字温度计.doc(17页珍藏版)》请在三一办公上搜索。
1、摘要温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学试验中,有特别重要的意义。随着人们生活水平的不断提高,,人们对温度计的要求越来越高,传统的温度计功能单一、精度低,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。数字温度计(Digital Thermometer)简称D温度是许多监控系统中的一个重要参数。TM,它是采用数字化测量技术,把连续的温度值转换成不连续、离散的数字形式并加以显示的仪表。采用单片机控制的数字温度计,由于精度高、可扩展性强、集成方便、抗干扰能力强,得到了广泛的应用。本设计以单片机和温度传感器为核心,
2、设计数字温度计。实现对温度的采集、监视和报警。在温度采集的实现中,使用了AT89C51单片机和温度传感器DS18B20,温度监视部分利用动态驱动技术,以单片机驱动4位LED数码管。温度测量范围-55+125,通过按键设置上下限报警温度,并用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到设计要求。正文还介绍了AT89C51和集成温度传感器DS18B20。 目录1 设计的意义及主要功能31.1 意义31.2 主要功能32 总体方案设计42.1 方案比较42.2 方案论证52.3 方案选择53 硬件电路设计63.1 元器件的选择63.2 电路原理图63.3 特殊元器件的介绍63.3.
3、1 AT89C51介绍63.3.2 DS18B20介绍94 总结135 参考文献13附录141 设计的意义及主要功能1.1 意义随着人们生活水平的不断提高,数字化无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,一切向着数字化控制,智能化控制方向发展。数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。温度计是常用的热工仪表,常用于工业现场作为过程的温度测量。在工业生产过程中,不仅需要了解当前温度读数,而且还希望能了解过程中的温度变化情况。随着工业现代化的发展,对温
4、度测量仪表的要求越来越高,而数字温度表具有结构简单,抗干扰能力强,功耗小,可靠性高,速度快等特点,更加适合于工业过程中以及科学试验中对温度进行在线测量的要求。近年来,数字温度表广泛应用在各个领域,它与模拟式温度表相比较,归纳起来有如下特点。准确度高,测量范围宽、灵敏度高,测量速度快,使用方便、操作简单,抗干扰能力强,自动化程度高,读数清晰、直观方便。数字温度计的高速发展,使它已成为实现测量自动化、提高工作效率不可缺少的仪表。数字化是当前计量仪器仪表发展的主要方向之一。而高准确度数字温度计的出现,又使温度计进入了精密标准测量领域。与此相适应,测量的可靠性、准确性显得越来越重要。1.2 主要功能实
5、时显示环境温度。4位数码管显示,3位整数,1位小数。温度范围:-55125。上电运行,实时显示温度。2 总体方案设计 通过查阅大量相关技术资料,并在老师的指导下,使我对整个电路系统有了一个比较全面的了解。本设计主要是实现模拟量温度的采集,然后使其转换为数字量,最后将其转化为直观的十进制示值。2.1 方案比较对同一种目的的实现,可以用不同的方案,下面就着重介绍以下两种方案对同一目的的实现方法。并比较两种方案的优劣。方案一原理框图如图1所示:热电偶ADC译码显示电路电源图1 方案一的原理框图方案一的原理简述:该方案的各部分电源均由总电源供电,温度传感器为热电偶,热电偶的热端感受被测物体温度t,产生
6、相应的热电势。热电势与热端温度成单值函数关系,用模数转换器ADC将热电势转化为数字量,按照热电势与温度的函数关系将该数字量转换为对应温度值,经译码显示电路显示在数码管上,从而实现数字温度计的功能。方案二原理框图如图2所示:显示电路电源数字温度传感器AT89C51图2 方案二的原理框图方案二的原理简述:该方案的各部分电源均由总电源供电,51单片机作为中央处理器及控制核心,控制数字温度计采集温度,数字温度传感器在采集到温度后直接输出数字量,传给单片机进行处理,单片机将传回的二进制数据处理后转换为相应温度,由译码显示电路以十进制形式显示在数码管上。方案三原理框图如图3所示:数字温度传感器控制电路译码
7、显示电路传感器图3 方案三的原理框图方案二的原理简述:该方案的各部分电源均由总电源供电,由模拟及数字元器件组成的控制电路作为核心,控制数字温度计采集温度,数字温度传感器在采集到温度后直接输出数字量,传给控制电路进行处理,控制电路将传回的二进制数据处理后转换为相应温度,由译码显示电路以十进制形式显示在数码管上。2.2 方案论证以上三种方案都是可行的,第一种方案的优点是由纯硬件电路构成,不涉及软件编程,但是由于热电势与温度之间的函数关系较复杂,利用硬件电路完成其转化较复杂,设计该电路难度较大且电路将比较庞大。第二种方案的难点主要是单片机程序编制,但其硬件电路相对简单,借助于微控制器的强大功能可使设
8、计周期缩短,测量精度高,且易于扩展功能,增强了电路对各种工作要求的适应性。第三种方案的优点是由纯硬件电路构成,不涉及软件编程,但是数字式温度传感器的工作涉及复杂的时序,用硬件电路实现将十分复杂,电路设计难度大且电路庞大。2.3 方案选择考虑到自己先前自学过单片机知识,对单片机有一定了解以及电路的灵活性和适用性,经过上面三个方案的分析,第二个方案的可行性高,所以我选择第二个方案作为设计方案。在第二个方案中,数字式温度传感器和单片机起着主导作用,单片机控制传感器测温并将其传回的数据进行处理,通过改变程序,可改变测量精度及电路的功能,可实现设计要求。3 硬件电路设计3.1 元器件的选择在本设计中主要
9、采取较为熟悉的AT89C51单片机和由美国DALLAS半导体公司研制的DS18B20温度传感器以及4位LED数码管。3.2 电路原理图电路原理图如图4所示。 图43.3 特殊元器件的介绍3.3.1 AT89C51介绍AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造
10、,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1主要特性:a) 与MCS-51 兼容 b) 4K字节可编程闪烁存储器 c) 寿命:1000写/擦循环d) 数据保留时间:10年e) 全静态工作:0Hz-24Hzf) 三级程序存储器锁定g) 128*8位内部RAMh) 32可编程I/O线i) 两个16位定时器/计数器j) 5个中断源 k) 可编程串行通道l) 低功耗的闲置和掉电模式m) 片内振
11、荡器和时钟电路 2管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0 口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作
12、为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P
13、3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示: 图5 AT89C51管脚图P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机
14、器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR区中的8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周
15、期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。 EA/VPP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。3振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,X
16、TAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个
17、硬件复位为止。3.3.2 DS18B20介绍温度传感器DS18B20是一种新型数字温度传感器,它采用独特的单线接口方式,仅需一个端口引脚来发送或接收信息,在单片机和DS18B20之间仅需一条数据线和一条地线进行接口。DS18B20采用TO-92或8脚SOIC封装,引脚排列如图6所示。各引脚功能如下:l GND:地。l DQ:单线应用的数据输入/输出引脚。l VDD:可选的外部供电电源引脚。DS18B20内部有三个主要数字部件:64位激光ROM、温度传感器、非易失性温度报警触发器TH和TL。DS18B20可以采用寄生电源方式工作,从单总线上汲取能量,在信号线处于高电平期间把能量储存在内部电容里,
18、在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。DS18B20也可用外部35.5V电源供电,这两种供电方式的电路如图7所示。 图7采用寄生电源方式时,VDD引脚必须接地,另外为了得到足够的工作电流,应给单片机的I/O口线提供一个强上拉,一般可以使用一个场效应管将I/O口线直接拉到电源上。采用外部供电方式时可以不用强上拉,但外部电源要处于工作状态,GND引脚不得悬空。温度高于100时,不推荐使用寄生电源,应采用外部电源供电。DS18B20依靠一个单线端口通信,必须先建立ROM操作协议,才能进行存储器和控制操作。因此,单片机必须先提供下面5个ROM操作命令之一:
19、读出ROM,代码为33H,用于读出DS18B20的序列号,即64位激光ROM代码。匹配ROM,代码为55H,用于辨识(或选中)某一特定的DS18B20进行操作。搜索ROM,代码为F0H,用于确定总线上的节点数以及所有节点的序列号。跳过ROM,代码为CCH,命令发出后系统将对所有DS18B20进行操作,通常用于启动所有DS18B20转换之前,或系统中只有一个DS18B20时。报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度界限的节点。这些命令对每个器件的激光ROM部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时指明有多少器件或是什么型号的器件。DS18B2
20、0内部存储器映像如图4所示。存储器由一个高速暂存器和一个存储高低温报警触发值TH和TL的非易失性电可擦除ERAM组成。头2个字节为实测温度值,低字节在前,高字节在后,第3和第4字节是用户设定温度报警值TH和TL的拷贝,是易失的,每次上电时被刷新。第5字节为配置寄存器,其内容用于确定温度值得数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。配置寄存器各位的分布如下:其中,TM为测试模式位,用于设定DS18B20为工作模式还是为测试模式,出厂时TM被设置为0,用户一般不要改动。R1和R0用于设定温度转换的精度分辨率。如表1所示。其余低5位全为1。DS18B20温度
21、转换时间较长,而且设定的分辨率越高,所需转换时间越长,因此实际应用中要根据具体情况权衡考虑。高速暂存器的第6、7、8字节保留未用,读出值为全1。第9字节为前面8个字节的CRC校验码,用于保证数据通信的正确性。DS18B20提供了如下存储器操作命令:温度转换,代码为44H,用于启动DS18B20进行温度测量,温度转换命令被后DS18B20保持等待状态。如果主机在这条命令之后跟着发出读时间隙,而DS18B20又忙于进行温度转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源,主机必须在发出这条命令后立即启动强上拉,并保持750ms,在这段时间内单总线上不允许
22、进行任何其他操作。读暂存器,代码为BEH,用于读取暂存器中的内容,从字节0开始最多可以读取9个字节,如果不想读完所有字节,主机可以在任何时间发出复位命令来终止读取。写暂存器,代码为4EH,用于将数据写入到DS18B20暂存器的地址2和地址3(TH和TL字节)。可以在任何时刻发出复位命令来终止写入。复制暂存器,代码为48H,用于将暂存器的内容复制到DS18B20的非易失性ERAM中,即把温度报警触发字节存入非易失性存储器里。如果主机在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器的内容复制到ERAM存储器,DS18B20就会输出一个“0”,如果复制结束的话,DS18B20则输出
23、“1”。如果使用寄生电源,主机必须在这条命令发出后立即启动强上拉并最少保持10ms,在这段时间内单总线上不允许进行任何其他操作。重读ERAM,代码为B8H,用于将存储在非易失性ERAM中的内容重新读入到暂存器(温度触发器)中。这种复制操作在DS18B20上电时自动执行,这样器件一上电,暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读时间隙,器件会输出温度转换忙的标志:“0”代表忙,“1”代表完成。读电源,代码为B4H,用于将DS18B20的供电方式信号发送到主机。若在这条命令发出之后发出读时间隙,DS18B20将返回它的供电模式:“0”代表寄生电源,“1”代表外部电源。一条温度转换命
24、令启动DS18B20完成一次温度测量,测量结果以二进制补码形式存放在高速暂存器中,占用暂存器的字节1(LSB)和字节2(MSB)。用一条读暂存器内容的存储器操作命令可以把暂存器中的数据读出。温度报警触发器TH和TL各由一个EPROM字节构成,可以用一条写存储器操作命令对TH和TL进行写入,对这些寄存器的读出需要通过暂存器。所有数据都以低位(LSB)在前的方式进行读写,数据格式以0.0625/LSB形式表示如下:LSB字节 MSB字节 当符号位S=0时,表示测得的温度值为正,可以直接对测得的二进制数进行计算并转换为十进制数。当符号位S=1时,表示测得的温度值为负,此时测得的二进制数为补码数,要先
25、变成原码数再进行计算。表2所示为部分温度值对应的二进制数据。DS18B20完成温度转换后,就把测得的温度值t与暂存器中的TH、TL字节内容进行比较,若tTH或tTL,则将DS18B20内部报警标志位置1,并对主机发出的报警搜索命令做出响应,因此可用多只DS18B20进行多点温度循环检测。4 总结此次课程设计是我大学生活重要的一步。从最初的选题,开题到写论文直到完成论文。其间,查找资料,老师指导,与同学交流,然后反复修改,每一个过程都是对自己能力的一次检验和充实。通过这次实践,锻炼了设计实践能力,此次课程设计是对我专业知识和专业基础知识一次实际检验和巩固。 这次课程设计收获很多,比如学会了查找相
26、关资料相关标准,分析数据,提高了自己的制作能力。 终于完成了我的单片机课程设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计花了我很多心血,高兴之余不得不深思呀!在本次设计的过程中,我发现很多的问题,比如缺乏综合应用专业知识的能力,对材料的不了解等等。由于时间有限,未能完成全部安装与调试工作,对设计结果没有作出最后的检验,也感到遗憾。这次实践是对自己大学三年所学的一次大检阅,使我明白自己知识还很不全面。单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,只有我们去试着做了,才能真正的掌握,只学习理论有
27、些东西是很难理解的,更谈不上掌握。从这次的课程设计中,使我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。在此感谢老师的悉心指导和同学们的大力帮助!5 参考文献1.张靖武、周灵彬.单片机原理、应用与PROTEUS仿真.北京:电子工业出版社,2008年8月2.徐爱钧.单片机原理实用教程基于Proteus虚拟仿真.北京:电子工业出版社,2009年1月3.李全利.单片机原理及接口技术.北京:高等教育出版社,2009年1月4.欧阳文.ATMEL89系列单片机的原理与开发实践
28、.北京:中国电力出版社.2007年6月5.倪志莲.单片机应用技术.北京:北京理工大学出版社.2007年6月6.AT89单片机原理及应用.北京:国防工业出版社.2008年2月附录本设计的应用程序温度传感器DS18B20采用器件默认的12位转化。晶振频率为12MHz,最大转化时间为750ms。DS18B20的通信线与P3.7相接,程序设计如下。 ORG 00H TMPL EQU 29H ;用于保存读出温度的低8位 TMPH EQU 28H ;用于保存读出温度的高8位 FLAG1 EQU 38H ;是否检测到DS18B20标志位27H DATAIN BIT P1.7MAIN: LCALL GET_T
29、EMPER ;调用读温度子程序 LCALL CVTTMP LCALL DISP1 AJMP MAIN;DS18B20复位初始化子程序INIT_1820: SETB DATAIN NOP CLR DATAIN;主机发出延时537ms的复位低脉冲 MOV R1,#3TSR1: MOV R0,#107 DJNZ R0,$ DJNZ R1,TSR1 SETB DATAIN ;然后拉高数据线 NOP NOP NOP MOV R0,#25HTSR2: JNB DATAIN,TSR3 ;等待DS18B20回应 DJNZ R0,TSR2 CLR FLAG1 ;清标志位,表示DS18B20不存在 SJMP TS
30、R7TSR3: SETB FLAG1 ;置标志位,表示DS18B20存在 CLR P1.7 ;检查到DS18B20就点亮P1.7LED MOV R0,#117TSR6: DJNZ R0,$ ;时序要求延时一段时间TSR7: SETB DATAIN RET;读出转换后的温度值GET_TEMPER: SETB DATAIN LCALL INIT_1802 ;先复位DS18B20 JB FLAG1,TSS2 NOP RET ;判断DS18B20是否存在?若DS18B20不存在,则返回TSS2: MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ;发出温
31、度转换命令 LCALL WRITE_1820 ACALL DISP1 LCALL INIT_1820 ;准备读温度前复位 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 ;将读出的温度数据保存到35H/36H RET;写DS18B20的子程序(有具体的时序要求)WRITE_1820: MOV R2,#8 ;一共8位数据 CLR CWR1: CLR DATAIN MOV R3,#6 DJNZ R3,$ RRC A MOV DATAIN,C MOV R3,#23
32、DJNZ R3,$ SETB DATAIN NOP DJNZ R2,WR1 SETB DATAIN RET;读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_1820: MOV R4,#2 ;将温度高位和低位从DS18B20中读出 MOV R1,#29H ;低位存入29H中,高位存入28H中RE00: MOV R2,#8 ;数据一共有8位RE01: CLR C SETB DATAIN NOP NOP CLR DATAIN NOP NOP NOP SETB DATAIN MOV R3,#9RE10: DJNZ R3,RE10 MOV C,DATAIN MOV R3,#23
33、RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00 RETCVTTMP: MOV A,TMPH ANL A,#80H JZ TMPC1 CLR C MOV A,TMPL CPL A ADD A,#1 MOV TMPL,A MOV A,TMPH CPL A ADDC A,#0 MOV TMPH,A MOV 73H,#0BH ;显示“-”号 SJMP TLPC11TMPC1: MOV 73H,#0AH ;正数符号不显示TMPC11: MOV A,TMPL ANL A,#0FH MOV DPTR,#TMPTAB MOV
34、C A,A+DPTR MOV 70H,A ;小数部分 MOV A,TMPL ANL A,#0F0H SWAP A MOV TMPL,A MOV A,TMPH ANL A,#0FH SWAP A ORL A,TMPLH2BCD: MOV B,#100 DIV AB JZ B2BCD1 MOV 73H,A ;百位不等于0时,保存B2BCD1: MOV A,#10 XCH A,B DIV AB MOV 72H,A ;十位 MOV 71H,B ;个位TMPC12: NOPDISBCD: MOV A,73H ANL A,#0FH CJNE A,#1,DISBCD0 SJMP DISBCD1 ;百位为1,
35、个位、十位不管是不是0,都要显示DISBCD0: MOV A,72H ;百位不为1,就是0A不显,0B为负号 ANL A,#0FH ;十位是0时,正数只显示个位 JNZ DISBCD1 ;十位是0时,负数的负号移到十位的位置上 MOV A,73H ;此时百位不显示,为0BH MOV 72H,A MOV 73H,#0AHDISBCD1: RETTMPTAB: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9DISP1: MOV R1,#70H MOV R5,#0FEHPLAY: MOV P1,#0FFH MOV A,R5 MOV P2,A MOV A,R1 MOV DPTR,
36、#TAB MOVC A,A+DPTR MOV P1,A MOV A,R5 JB ACC.1,LOOP1 CLR P1.7 ;显示小数点LOOP1: LCALL DL1MS INC R1 MOV A,R5 JNB ACC.3,ENDOUT RL A MOV R5,A SJMP PLAYENDOUT: MOV P1,#0FFH ;关显示,消串影 MOV P2,#0FFH RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,0FFH,0BFHDL1MS: MOV R6,#14HDL1: MOV R7,#100 DJNZ R7,$ DJNZ R6,DL1 RET END