基于单片机的温度监测控制器 - 图文

更新时间:2024-03-11 20:29:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

南 京 理 工 大 学

毕业设计说明书(论文)

作 者: 教学点: 专 业: 题 目:

尚明康 准考证号: 084913204087

淮安信息职业技术学院

电子工程

基于单片机的温度监测控制器

杨金红 讲师 指导者:

(姓 名) (专业技术职务)

评阅者:

(姓 名) (专业技术职务)

2015 年 5 月

毕业设计说明书(论文)中文摘要

基于单片机的温度监测控制器由硬件电路和系统软件两部分组成。硬件电路主要包括电源模块、温度变换电压模块、AD转换模块、单片机控制模块。电源模块采用MC1403作为低压基准电源;温度变换电压模块采用IN4148作为温度传感器,采用LM358作为运算放大器;AD转换模块选用ICL7135作为A/D转换器;单片机控制模块采用AT89S52作为控制器,包括时钟电路、复位电路及显示电路等。系统软件使用汇编语言编写,包括主程序、读取温度数据子程序及按键控制子程序。该系统电路简单、工作稳定、集成度高,调试方便,测试精度高,具有一定的实用价值。 关键词 AD转换 AT89S51 温度传感器 毕业设计说明书(论文)外文摘要

Title temperature monitoring controller based on MCU Abstract The temperature monitoring controller based microcontroller consists of hardware and systems software in two parts. Hardware circuit includes power supply module, temperature conversion voltage module, AD converter module, microprocessor control module. MC1403 as a low-voltage power module reference power; temperature transform voltage module use IN4148 as a temperature sensor, using LM358 as an operational amplifier; AD converter module select ICL7135 as the A / D converter; MCU control module, using AT89S52 as controller, includes a clock circuit, reset circuit and display circuit. System software written in assembly language, including the main program, read the temperature data and key control subroutine subprogram. The system circuit is simple, stable, highly integrated, easy to debug, high precision, has some practical value. Keywords AD Conversion AT89S51 temperature sensor 本科毕业设计说明书(论文) 第I页 共I页

目次

1 引言 ............................................................ 1 1.1问题的提出 ...................................................... 1 1.2国内外研究现状 .................................................. 1 2 总体方案设计 .................................................... 3 2.1方案一 .......................................................... 3 2.2方案二 .......................................................... 3 2.3方案三 .......................................................... 4 2.4方案选取 ........................................................ 4 3 硬件结构与设计 .................................................. 6 3.1 电源模块 ........................................................ 6 3.2 温度变换电压模块 ................................................ 7 3.3 AD转换模块 .................................................... 10 3.4单片机控制模块 ................................................. 12 3.5 温度监测系统的原理图 ........................................... 15 4 软件设计 ....................................................... 16 4.1 主程序设计 ..................................................... 16 4.2 读取温度数据子程序的设计 ....................................... 17 4.3 按键控制子程序的设计 ........................................... 17 5 系统的调试 ..................................................... 19 5.1 电路检查 ....................................................... 19 5.2程序的下载 ..................................................... 19 5.3 温度校正 ....................................................... 19 5.4 测试 ........................................................... 19 6 设计总结、体会及改进 ........................................... 20 致 谢 ............................................................ 21 参考文献 .......................................................... 22 附录一 最终电路图 ................................................. 23 附录二 实物图 ..................................................... 24 附录三 源程序 ..................................................... 25

本科毕业设计说明书(论文) 第1页 共36页

1 引言

1.1问题的提出

温度是生活及生产中最基本的物理量,它表征的是物体的冷热程度。自然界中任何物理、化学过程都紧密地与温度相联系。在很多生产过程中,温度的测量和控制都直接和安全生产、提高生产效率、保证产品质量、节约能源等重大技术经济指标相联系。自18世纪工业革命以来,工业过程离不开温度控制。温度控制广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等。温度控制的精度以及不同控制对象的控制方法选择都起着至关重要的作用,温度是锅炉生产质量的重要指标之一,也是保证锅炉设备安全的重要参数。同时,温度是影响锅炉传热过程和设备效率的主要因素。基于此,运用反馈控制理论对锅炉进行温度控制,满足了工业生产的需求,提高了生产力。

对温度的测量与控制在现代工业中也是运用的越来越广泛。而传感器主要用于测量和控制系统,它的性能好坏直接影响系统的性能。因此,不仅必须掌握各类传感器的结构、原理及其性能指标,还必须懂得传感器经过适当的接口电路调整才能满足信号的处理、显示和控制的要求,而且只有通过对传感器应用实例的原理和智能传感器实例的分析了解,才能将传感器和信息通信与信息处理结合起来,适应传感器的生产、研制、开发和应用。另一方面,传感器的被测信号来自于各个应用领域,每个领域都为了改革生产力、提高工效和时效,各自都在开发研制适合应用的传感器,于是种类繁多的新型传感器及传感器系统不断涌现。

温度传感器是其中重要的一类传器。其发展速度之快,以及其应用之广。并且还有很大潜力为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。该系统具有性能可靠、测温准确、结构简单、造价低廉等特点,并兼具线路简捷、使用灵活、抗干扰性好、可移植性强等优点,可在工程实际中得到广泛应用。

1.2国内外研究现状

最近几年,国内外温湿度传感器测量系统正向着集成化、智能化发展,随着科研人员的不断努力,该类型系统取得的巨大的成就。

现代温湿度传感器测量系统技术主要以数据采集为依据,主要类型包括:虚拟仪器、智能仪器、数字式仪器等等。伴随电子科学技术的进一步发展,数据采集系统也发生了日新月异的变化,其整体的性能、实用性方面都有所改进。因此,依托于数据采集结构而发展的温湿度传感器测量系统在实际应用中也发挥这越来越重要的作用。

目前,许多外国大型企业都很重视传感器的研发工作,例如,日本的Figaro公司、芬兰的Vaisala公司等,都致力于传感器的发展和完善,以保障其在整个销售市场的竞争力。与此同时,国内许多机构也在传感器测试装置的研发上不断探索、研发。例如通过采用传统电子仪器进行设计研发而成的多种动态测试系统、动进样装置的气体传感器智能测试系统等等,这些成绩都体现了我国在传感器领域取得的成就。

当然,随着科技的进步,传统的温度测试技术在稳定性、精度等方面已经无法满足市

本科毕业设计说明书(论文) 第2页 共36页

场的需求,因此,针对新一代传感器的探究显得尤为重要。随着工业生产效率不断提高,自动化水平与范围也不断扩大,因而对温度检测技术的要求也愈来愈高,一般可以归纳以下几方面:

(1)扩大测温对象

温度检测技术将会由点测量发展到线、面、甚至立体的测量。应用范围将同工业领域延伸到环境保护、家用电器、汽车工业及航天工业领域。

(2)发展新型产品

利用老的检测技术生产出适应于不同场合、不同工况要求的新型产品,以满足于用户需要,同时利用新的检测技术制造出新的产品。

(3)适应特殊环境下测温

在工业生产中,对许多场合的温度检测器有特殊要求,如防硫、防爆、耐磨等性能要求又如移动物体和高速旋转物体的测温、钢水的连续测温、火焰温度的检测等。

(4)显示数字化

温度仪表向数字化方向发展。其最大优点是直观、无读数误差、分辨率高、测量误差小,因而有广阔的销售市场。

(5)标定自动化

应用计算机技术,快速、准确、自动地标定温度检测器。 根据上述要求,国内外温度仪表制造商将向以下几方面发展:

1) 继续生产量大面广的传统的温度检测元件,如热电偶、热电阻、热敏电阻等。 2) 加强新原理、新材料、新加工工艺的开发。

3) 如近年来已开发的碳化硅薄膜热敏电阻温度检测器、厚膜、薄膜铂电阻温度检

测器,硅单晶热敏电阻温度检测器等。 4) 向智能化、集成化、实用化方向发展。

5) 新产品不仅要具有检测功能,又要具有判断和指令等多功能,采用微机技术向

智能化方向发展。 6) 向机电一体化方向发展。

本科毕业设计说明书(论文) 第3页 共36页

2 总体方案设计

实现温度监测控制,可以采用不同的方案,下面针对三种温度监测的方案进行分析,比较这几种方案的优劣,最后选择最佳方案。

2.1方案一

方案二的温度监测控制系统结构框图如图2-1所示。

工作原理简述:基于AT89S52为核心的单片机温度控制系统,温度信号由18B20温度传感器进行采集,然后经过转换成数字信号后传入单片机,由单片机对数字信号进行相应的处理,从而得到温度控制的目的,然后输出在LCD上进行显示。当温度值超出预设值时电热丝停止加热,低于预设值时,电热丝开始加热。

键盘输入 电热丝 温度传感器(18B20) AT89S52 显示电路 报警电路

图2-1 方案一结构框图

2.2方案二

方案二的温度监测控制系统结构框图如图2-2所示。

工作原理简述:基于AT89S52为核心的单片机温度控制系统,温度信号由AD590温度传感器进行采集,再经过AD转换后将数据传入单片机,由单片机对数字信号进行相应的处理,从而得到温度控制的目的,然后输出在LCD上进行显示。当温度值超出预设值时电热丝停止加热,低于预设值时,电热丝开始加热。

本科毕业设计说明书(论文) 第4页 共36页

温度传感器(AD590) 键盘输入 显示电路 放大电路LM358 ADC ICL7135 AT89S52 电热丝 报警电路

图2-2 方案二结构框图

2.3方案三

方案三的温度监测控制系统结构框图如图2-3所示。

工作原理简述:基于AT89S52为核心的单片机温度控制系统,PN结温度传感器是利用晶体二极管或三极管的P-N结电压随温度的变化而变化。温度信号由PN结温度传感器采集后,然后经过放大电路放大信号,再与预先设定的基准信号进行比较,再经过AD转换后将数据传入单片机,由单片机对数字信号进行相应的处理,从而得到温度控制的目的,然后输出在LCD上进行显示。当温度值超出预设值时电热丝停止加热,低于预设值时,电热丝开始加热。

键盘输入 PN结传感器 显示电路 放大电路 LM358 ADCI CL7135 AT89S52 电热丝 比较电路 报警电路 基准

图2-3 方案三结构框图

2.4方案选取

18B20虽然与单片机的接口简单,但编程比较复杂,单只使用比较简单,多只单总线使用涉及到ROM搜索的程序,比较难写,涉及到数据结构的二叉树部分。测温的范围只在

本科毕业设计说明书(论文) 第5页 共36页

-55~155度左右。

PN结温度传感器是利用晶体二极管或三极管的P-N结电压随温度的变化而变化。例如硅管的PN结的电压温度每升高摄氏一度时,电压约下降1mV。这种传感器有较好的线性度,灵敏度高,热时间常数约0.2s—2s,其测温范围为-50°C—150°C。可用于一些高要求的温度检测。电路简单可靠,精确度不高但价格适中,较AD590更为经济适用。

综上所述,选取方案三。

本科毕业设计说明书(论文) 第6页 共36页

3 硬件结构与设计

本节主要介绍系统各单元模块的具体功能、电路结构、工作原理、以及各个单元模块之间的联接关系

本设计采用单片机为核心器件。通过测温二极管采集到温度信息,并转化为电信号,经过A/D转换之后,送给单片机进行处理,进而通过液晶显示器显示。并辅助复位电路,驱动电路,电源电路,按键电路,指示灯电路。当温度超过上限或低于下限,超限指示灯点亮。

温度监测电路设计原理图如图3-1所示,控制器使用单片机AT89S52,温度传感器使用二极管1N4148,用液晶LCD1602实现温度显示,电源采用低压基准电源MC1403,A/D转换器选用ICL7135。

图3-1 系统总体设计框图

图3-2 各模块连接图

由图3-2可看到,本电路主要由温度变换模块、AD转换模块、单片机控制模块组成。

3.1 电源模块

本设计采用低压基准电源MC1403,它是利用一个负温度系数的基射结正向电压VBE与正温度系数的工作在不同电流密度下,两个晶体管基射结电压差ΔVBE相加而形成的零温度系数的参考电压源。

本科毕业设计说明书(论文) 第7页 共36页

AT89S52单片机的工作电压范围:4.0V—5.5V,所以通常给单片机外接5V直流电源。连接方式为VCC(40脚):接电源+5V端VSS(20脚接电源地端。电源电路连接设计如图3-3所示。

图3-3 电源电路

3.1.1 MC1403

MC1403是美国摩托罗拉公司生产的高准确度、低温漂、采用激光修正的带隙的低压基准芯片。一般用作8~12bit的D/A芯片的基准电压等一些需要基本精准的基准电压的场合。其引脚图如3-4所示。

图3-4 MC1403引脚图

MC1403技术参数: (1)输出电压:2.5V

(2)输入电压范围:4.5V-40V (3)静态电流:典型1.2mA (4)输出电流:10mA

(5)温度系数:典型10ppm/℃ (6)保证温度漂移规范

3.2 温度变换电压模块

本系统的温度变换模块如图3-5所示,由二极管1N4148作为温度传感器采集温度信号,经差动放大后,送到预先调试好的相关度控制比较电路进行比较,当温度低于控制温度下限值时,红色发光二极管亮。当温度高于控制温度上限值

本科毕业设计说明书(论文) 第8页 共36页

时,红色发光二极管灭。因此从以上不同的状态显示就可以知道温度情况及温度控制情况。

图3-5 测温二极管的选择与设计

3.2.1 温度传感器

温度传感器是通过物体随温度变化而改变某种特性来间接测量的。不少材料、元件的特性都随温度的变化而变化,所以能作温度传感器的材料相当多。温度传感器随温度而引起物理参数变化的有:膨胀、电阻、电容、而电动势、磁性能、频率、光学特性及热噪声等等。随着生产的发展,新型温度传感器还会不断涌现。

由于工农业生产中温度测量的范围极宽,从零下几百度到零上几千度,而各种材料做成的温度传感器只能在一定的温度范围内使用温度传感器的种类较多,在本文中主要利用二极管反向饱和电流随温度变化,压降也是随温度变化的原理,使用1N4148二极管实现温度检测。

1N4148是非常通用的一种高频开关二极管,非常易于获得,以及价格低廉,通用性极广的一个小信号高频二极管。1N4148实物如图3-6所示。

图3-6 1N4148实物图

该电路将二极管1N4148随温度变化的电流值转换为电压值。该电路为反向输入型转换电路LM358为运算放大器其输出电压U01正比于二极管电流从而实现I/V转换。为保证一定的转换精度和适应范围要求该转换电路有低的输入阻抗和输出阻抗。转换后的电压值与输入电流值成线性关系。

3.2.2 TL431

TL431是由美国德州仪器(TI)和摩托罗拉公司生产的2.5~36V可调式精密并联稳压器。是一个有良好的热稳定性能的三端可调分流基准电压源。该器件的典型动态阻抗为

本科毕业设计说明书(论文) 第9页 共36页

0.2Ω,工作电流范围宽达0.1~100mA。在很多应用中可以用它代替齐纳二极管,广泛用于单片精密开关电源或精密线性稳压电源中。例如,电压比较器、电源电压监视器、延时电路、精密恒流源、数字电压表、运放电路、可调压电源,开关电源等等。

TL431(TO-92封装)引脚图如图图3-7所示。

图3-7 TL431(TO-92封装)引脚图

由于TL431具有体积小、基准电压精密可调,输出电流大等优点,所以用TL431可以制作多种稳压器。其最大输入电压为37V,最大工作电流为150mA,内基准电压为2.5V,输出电压范围为2.5~30V。

TL431技术参数:

(1)可编程输出电压为36V

(2)电压参考误差:±0.4% ,典型值@25℃(TL431B) (3)低动态输出阻抗,典型0.22Ω (4)负载电流能力1.0mA to 100mA

(5)等效全范围温度系数50 ppm/℃典型 (6)温度补偿操作全额定工作温度范围 (7)低输出噪声电压

3.2.3 LM358

LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围包括传感放大器、直流增益模组,音频放大器、工业控制、DC增益部件和其他所有可用单电源供电的使用运算放大器的场合。适用于监视器、充电器、汽车功放、小家电控板、无绳电话机、交换机、集线器、扫描器、民用音响、UPS、防盗器、电磁炉控板等。

LM358引脚图如图3-8所示。

本科毕业设计说明书(论文) 第10页 共36页

图3-8 LM358引脚图

性能及优点:LM358由两个独立、高增益和内部频率补偿的运算放大器组成,可用一个宽范围的单电源供电,也可用带隙电源供电;低输入电流不依赖供电电压的大小。在整个频带增益有温度补偿。输入偏置电流有温度补偿。兼容所有的逻辑电平。可用电池供电。同一增益内部频率补偿。大DC电压增益,达100dB。同一增益带宽:1MHz。宽供电电压:单电源供电:3V到32V。双电源供电:±1.5V到±16V。非常低的耗电(500μA)不依赖电源供电。低偏移电压:2mV。输入对地的通用电压。差分输入电压于供电电压相等。输出电压范围摆率:0V到V+-1.5V。

3.3 AD转换模块

本设计A/D转换模块的设计如图3-9所示。通过温度检测模块读取1N4148读取到的温度,通过VI输入到A/D转换器,然后AD转换器进行转换成10进制显示在LCD上,并判断温度是否超过设置的值,如果超过设定的值,则灯灭。

图3-9 A/D转换模块

本科毕业设计说明书(论文) 第11页 共36页

3.3.1 ICL7135

ICL7135是4位半CMOS双积分A/D转换芯片,可以转换输出+20000个数字量,对外提供6输入、输出控制信号,因此,除用于数字电压表外,还能与异步接受/发送器、微处理器或其他控制电路连接使用。ICL713具有精度高(相当于l4位A/D转换)、双极性高阻抗抗差动输入、自动调0、自动极性、超量程判断、输出为动态扫描BCD码及价格低等优点。

(1)主要特点:

1) 输入阻抗达10Ω以上,对被测电路几乎没有影响 2) 在每次A/D转换前,内部电路都自动进行调零操作 3) 有精确的差分输入电路 4) 自动判别信号极性

5) 有超、欠压输出信号,机过量程(OR)、欠量程(UR)标志信号输出,可用作自

动量程转换的控制信号 6) 采用位扫描与BCD码输出

7) 在±20000字(2V满量程)范围内,转换精度±1字 8) 输出电流典型值1PA;输出为动态扫描BCD码

9) 对外提供六个输入\\输出控制信号R/H,BUSH,ST,POL,OR,UR。因此除用于

数字电压表外,还能与异步接收/发送器,微处理器或其它控制电路连接使用 10) 功耗:1000mW(MAX)

(2)转换原理:

其转换速度与时钟频率相关,每个转换周期均有-自校准(调零)、正向积分(被测模拟电压积分)、反向积分f基准电压积分1和过零检测4个阶段组成,其中自校准时问为10001个脉冲,正向积分时间为10000个脉冲,反向积分直至电压到零为止(最大不超过20001个脉冲)。故可以采用从正向积分开始计数脉冲个数,到反向积分为零时停止计数。将计数的脉冲个数减10000,即得到对应的模拟量。图3-10给出了ICL7135时序。由图3-10可见,当BUSY变高时开始正向积分,反向积分到零时BUSY变低,所以BUSY可以用于控制计数器的启动/停止。

9

图3-10 ICL7135时序图

(3)引脚简介:

本科毕业设计说明书(论文) 第12页 共36页

ICL7135芯片采用28位外引线双列直插式封装,图3-11为其引脚图。

图3-11 ICL7135引脚图

这些引脚大致可分为三类: 1)电源类

V-、V+分别接到-5V和+5V上;模拟地AGND和数字地DGND通常共地;VREF为基准电压输入端,基准电压典型值为1V,通常由用+5V工作电源分压后取得;REFCAP+、REFCAP-为外接基准电压电容端,通常接1uF钽电容。

2)模数信号类

IN+、IN-模拟信号的正、负输入端;D1~D5分别是转换结果输出万千百十个位的位选通信号;B1~B8是转换结果的BCD输出端。

3)控制信号类

R/H为转换/保持控制信号;BUSY(输出)用于查询法、中断计数法等。用于指示转换是否完成;CLK时钟信号输入端;ST选通信号输出端,主要用做外部寄存器存放转换结果的选通。

3.4单片机控制模块

根据功能要求与总体方案设计,选择单片机的AT89S52芯片作为核心器件。它具有着使用简单以及烧写程序简单等优点。

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

单片机控制模块的设计如图3-12所示。

本科毕业设计说明书(论文) 第13页 共36页

图3-12 单片机控制模块

3.4.1 时钟电路设计

单片机工作的时间基准,决定单片机工作速度。时钟电路就是振荡电路,向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。AT89S52单片机时钟频率范围0-33MHz。

3.4.2 复位电路设计

确定单片机工作的起始状态,完成单片机的启动过程。单片机接通电源时产生复位信号,完成单片机启动确定单片机起始工作状态。手动按键产生复位信号,完成单片机启动确定单片机的初始状态。通常在单片机工作出现混乱或“死机”时使用手动复位可实现单片机“重启”。 3.4.3显示器的选择与介绍

液晶显示器是一种体积小、重量轻、功耗极低的显示器件。它具有功耗低、显示信息量大(可显示文字、曲线、图形等)、没有辐射、寿命长等特点。因而广泛应用于便携式电子产品。本系统显示模块采用工业字符型液晶LCD1602,可以显示2行16列个字符,能显示阿拉伯数字、英文字母大小写、常用符号等;通过自定义还能显示简单的汉字。

本科毕业设计说明书(论文) 第14页 共36页

3.4.4 LCD1602

1602液晶是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。

LCD1602的引脚功能如图3-13所示。

图3-13引脚功能

第1脚:VSS为地电源。 第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端。接正电源时对比度最弱,接地时对比度最高,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址。当RS为低电平R/W为高电平时可以读忙信号。当RS为高电平R/W为低电平时可以写人数据。

第6脚:E端为使能端。当E端由高电平跳变成低电平时。液晶模块执行命令。 第7~14脚:DO~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 LCD1602的控制字

1602液晶模块的读写操作。屏幕和光标的操作都是通过指令编程来实现的。 指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。

指令3:光标和显示位置设置 FD,光标移动方向,高电平右移,低电平左移, S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。

指令4:显示开关控制。 D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。 C:控制光标的开与关.高电平表示有光标.低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位 S/C:高电平时显示移动的文字,低电平时移动光标。

指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时为双行显示,F:低电平时显示5X7的点阵字符,高电平时显示5X10的显示字符。

指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。

指令9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令

本科毕业设计说明书(论文) 第15页 共36页

或数据,如果为低电平表示不忙。

3.5 温度监测系统的原理图

依据上述各个部分电路图,对总体原理图进行设计如图3-14所示。

电路工作过程为:由二极管1N4148作为温度传感器采集温度信号,经差动放大后,送到预先调试好的相关度控制比较电路进行比较,当温度低于控制温度下限值时,红色发光二极管亮。当温度高于控制温度上限值时,红色发光二极管灭。因此从以上不同的状态显示就可以知道温度情况及温度控制情况。

图3-14 温度监测系统的原理图

本科毕业设计说明书(论文) 第16页 共36页

4 软件设计

4.1 主程序设计

程序初始化,设置初始限定温度为45度,置外部中断0为下降沿触发,允许外部中断0中断,AD转换器结束标记置没结束,暂时不允许AD转换,液晶显示器LCD初始化,启动AD转换,置定时器2处置为生产125KHZ的方波FFE2H,置定时器2为方波发生器方式,需要为捕捉方式,置定时器0工作方式为门控、外部计数16位,置定时器1工作方式为16位定时50ms,置定时器0工作方式为门控外部计数、16位,置定时器1计数初值3CB0H为50ms,允许定时器1中断,开启总的中断,初始化结束。本系统的主程序流程图如图4-1所示。

图4-1 主程序流程图

本科毕业设计说明书(论文) 第17页 共36页

4.2 读取温度数据子程序的设计

AD转换子程序首先检查AD转换是否结束,如果结束清除AD转换结束标志,计算计算计数值对应的温度,并将其转换为十进制数,然后将结果和温度上下限进行比较,如果超量程控制指示灯点亮。AD转换子程序如图4-2所示。

图4-2 温度读取数据子程序流程图

4.3 按键控制子程序的设计

本系统的按键使用的是查询方式,当检测到0#按键出发按键控制子程序,关闭三个定时器,重新条用显示新的界面,如显示上限温度等,关继电器,关指示灯,检测3#按键是否按下,如果按下则恢复三个定时器运转恢复显示当前温状态,并返回上一层。如果没3#有按下则检测1#按键是否按下,如按下,则预置温度加1。1#没有按下,则检测2#是否按下,如果2#按下,则预置温度减1。按键控制子程序流程图如图4-3所示。

本科毕业设计说明书(论文) 第18页 共36页

图4-3 按键控制子程序流程图

本科毕业设计说明书(论文) 第19页 共36页

5 系统的调试

5.1 电路检查

(1)不通电检查

电路安装完毕后,不要急于通电,应首先认真检查接线是否正确,包括多线、少线、错线等,尤其是电源线不能接错或接反,以免通电后烧坏电路或元器件。查线的方式有两种:一种是按照设计电路接线图检查安装电路,在安装好的电路中按电路图一一对照检查连线;另一种方法是按实际线路,对照电路原理图按两个元件接线端之间的连线去向检查。无论哪种方法,在检查中都要对已经检查过的连线做标记,使用万用表检查连线很有帮助。

(2)直观检查

连线检查完毕后,直观检查电源、地线、信号线、元器件接线端之间有无短路,连线处有无接触不良,二极管、三极管、电解电容等有极性元器件引线端有无错接、反接,集成块是否插对。

(3)通电检查

把经过准确测量的电源电压加入电路,但暂不接入信号源号。电源接通之后不要急于测量数据和观察结果,首先要观察有无异常现象,包括有无冒烟、有无异常气味、触摸元件是否有发烫现象、电源是否短路等。如果出现异常,应立即切断电源,排除故障后方可重新通电。

5.2程序的下载

下载器的连接,下载程序,芯片安装电路板,通电,电源灯亮,液晶有数据显示。

5.3 温度校正

把IN4148浸泡在冰水混合物中,调节RW1,使液晶显示器显示0摄氏度。

5.4 测试

接通电源后,系统启动,电源绿灯亮,液晶显示屏上显示当前温度,按下按键1进入温度预设界面,接着按下按键2则温度加1,按下按键3则温度减1,按下按键4则返回主界面,显示当前温度值。温度如超过预设值,则红灯灭。

本科毕业设计说明书(论文) 第20页 共36页

6 设计总结、体会及改进

该论文结合工业、农业、生产生活中温度测量的实际需要,硬件的设计采用AT89S52单片机为核心器件。通过测温二极管采集到温度信息,并转化为电信号,经过A/D转换之后,送给单片机进行处理,进而通过液晶显示器显示。并辅助复位电路,驱动电路,电源电路,按键电路,指示灯电路。通过中断扩展实现温度上下限的设置。当温度超过上限或低于下限,控制指示灯熄灭。

在本次设计中,通过对各种温度传感器的了解、运用,充分地认识了各种温度传感器的原理及用法。例如:温度传感器有的是利用的二极管原理,有的是利用金属箔发热等等,而且用法也各不相同,有的需要连接成桥型结构,有的则可以直接用,因此在传感器选型上一定要有耐心。这一步骤告诫我在以后的设计中选型很重要。其次,便是各种方案的比较,选择取其最优秀的方案,这能让设计更合理、更人性化、更合乎消费者的需求(即所谓的人性化)。

但是此电路也有很多不足之处,例如:实际温度超过上限时指示灯依然亮。此外,未能完美地完成显示当前温度的功能,之前曾设计出一个显示电路但由于不完美因而未采用。从整体上来看,这次设计不算很成功,因为我们的设计在考虑选温度传感器及其调试时浪费了大量的时间,所以到后面设计的时候有些仓促。但是,也收获了不少,对一些芯片的功能、引脚等更加熟悉,为以后的工作奠定了基础。

本科毕业设计说明书(论文) 第21页 共36页

致 谢

经过数月的艰辛论文终于完成了,此期间感觉压力很大,在论文完成的过程中,遇到了不少的困难,首先就是要对相关知识进行系统的了解和掌握,对于自己完全陌生且深奥的知识学习确实并非易事。但还是努力克服重重困难,在杨金红老师的亲切关怀和悉心指导下完成论文的写作。从论文的选题、资料查询及定稿过程中到论文的最终完成,杨老师都始终给予我无私的帮助和悉心的指导及不懈的支持,在此对杨老师表示真诚地感谢和深深的谢意。感谢所有关心、支持、帮助过我的良师益友。

感谢我身在远方的父母!你们给我生活上的关怀和精神上的鼓励是我学习的动力。 另外,我还要感谢我的同学给予我的关心和无私的帮助。谢谢你们陪我走过这样的一段青葱岁月,在论文的写作过程中,也得到了许多同学的宝贵建议,在此一并致以诚挚的谢意。谢谢你们一路给我的支持和帮助。

在学校的学习生活即将结束,回顾两年多来的学习经历,面对现在的收获,我感到无限欣慰。为此,我向母校表达由衷的敬意和谢意。

最后,衷心地感谢各位老师能在百忙之中参加我的论文评阅和答辩!

本科毕业设计说明书(论文) 第22页 共36页

参考文献

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

李朝青,单片机原理及接口技术(简明修订版)[M].北京航空航天大学出版社,1998 李广弟.单片机基础[M].北京航空航天大学出版社,1994

金伟正.单线数字温度传感器的原理与应用[J].电子技术与应用,2000

李 钢.1-Wire总线数字温度传感器DS18B20原理及应用.现代电子技术[J],2005 陈跃东.DS18B20集成温度传感器原理与应用[J].安徽机电学院学报,2002 阎石.数字电子技术基础(第三版)[M].高等教育出版社,1989 胡汉才.单片机原理及其接口技术[M].清华大学出版社,2004 刘修文主编.新编电子控制电路[M].机械工业出版社,2006 黄贤武编著.传感器原理与应用[M].高等教育出版社,2007 刘瑄编著.单片机有效值转换器[M]. 机械工业出版社,2008 刘军编著.单片机原理与接口技术[M].华东理工大学出版社,2008 黄贤武、郑筱霞编.传感器原理与应用[M].高等教育出版社出版,2004.3 邓元庆贾鹏数字电路与系统设计[M].西安电子科技大学出版社2003

薛钧义.MCS - 51 /96系列单片微型计算机及其应用[M].西安交通大学出版社,1998 孙蓓、忠义主编.电子工艺实训基础 [M].化学工业出版社2007 杨拴科. 模拟电子技术基础[M].高等教育出版社, 2003

本科毕业设计说明书(论文) 第23页 共36页

附录一 最终电路图

本科毕业设计说明书(论文) 第24页 共36页

附录二 实物图

本科毕业设计说明书(论文) 第25页 共36页

附录三 源程序

;*************************************** ;***液晶显示器LCD1602对应的控制引脚**** RS BRT P3.6; LCD_RS * RW BRT P3.1; LCD_RW * EN BRT P3.0; LCD_EN * ;***************************************

;*************************************** ;****AD转换器RCL7135对应的控制引脚**** BUSY BRT P3.2; IRCL7135忙闲信号 RUN BRT P3.7;定义RCL7135的运行控制脚

AD_END_FLAG BRT F0;AD转换结束标志位 POL BRT P1.2;电压极性,0为负,1为正

OVER BRT P1.4;溢出指示

;**************************************

;************************************** ;****电磁继电器和LED指示灯控制引脚**** JRDRANQR BRT P1.1 LED BRT P3.5

;**************************************

;************************************** ;*******按键控制引脚******************* SK3 BRT P2.0 ;进入设置(停止运行) SK2 BRT P2.1 ;设置限定值加1 SK1 BRT P2.2 ;设置限定值减1

SK0 BRT P2.3 ;退出设置(重新运行);**************************************

;************************************** ;*****内部寄存器常规初始数据的使用***** ;74H-70H用于保存要显示温度值的最终结果 ;7FH-7EH用于保存AD转换的计数值

;7DH-7CH用于HEX-DEC子程序的临时数据

MS_50 EQU 75H;50MS的次数放在此处,用于保存定时器1中断的50MS的次数,20次为1S

UPPER_LRMRT EQU 76H;限定温度参数放在此处

;**************************************

;************************************** ORG 0000H

LJMP START;初始化和主程序入口 ORG 0003H JMP EX0_RNT;某次AD转换结束,会产生该中断

ORG 001BH

LJMP TRMER1_RNT ;给液晶显示器和键盘用

;**************************************

;************************************** ;*************初始化******************* ORG 0030H START: ;刚刚开机 MOV MS_50,#0

MOV UPPER_LRMRT,#45;(带符号数,要控制的上限温度)

SETB RT0;中断初始化之下降沿方式 SETB EX0;中断初始化之允许外部中断 CLR AD_END_FLAG;这是AD转换器完成一次AD转换的标记

CLR RUN;刚刚开机停止AD转换 LCALL LCD_RNRT;LCD初始化 LCALL DRSPLAY_CURR_TEMPER LCALL DRSPLAY_TEMPER SETB RUN;开始进行AD转换 MOV RCAP2H,#0FFH;定时器2产生100KHZ的方波计数值高8位 MOV RCAP2L,#0E2H;定时器2产生100KHZ的方波计数值低8位

CLR T2CON.1;定时器2捕捉方式

ORL 0C9H,#02H;定时器2方波发生器方式

MOV TMOD,#00011101B;定时器0门控、外部计数、16位方式;定时器1进行16位定时,

本科毕业设计说明书(论文) 第26页 共36页 用于刷新显示 MOV TH1,#60;这是12MHZ晶体震荡期,初值3CB0H(60,176)为50MS MOV TL1,#176 SETB ET1 SETB TR0;启动定时器0 SETB TR1;启动定时器1 SETB TR2;启动定时器2 SETB EA;中断初始化之开启总的中断 ;*************************************** ;*************************************** ;***************主程序****************** MAIN: JNB AD_END_FLAG,MARN;检查AD转换有没有结束,没有结束标志返回主程序继续检查 CLR AD_END_FLAG;检查结束标志有,就清除该标志 LCALL DRV20;计数值(LSB=0.1MV)除以20为温度 LCALL HEX_DEC;将AD转换16进制形式的结果转换成10进制,以便显示 LCALL CONTROL;控制继电器吸合/断开和控制指示灯亮/灭(对应加温或不加温) SJMP MAIN ;*************************************** ;*************************************** ;***********外部中断0服务程序********** EX0_RNT:;一次AD转换完成 CLR C;将计数值减去10000(2710H) MOV A,TL0;取出计数值低8位 SUBB A,#10H;减10H MOV 7EH,A;另存为 MOV A,TH0;取出计数值高8位 SUBB A,#27H;减27H MOV 7FH,A;另存为 MOV TH0,#0;赋给新的计数值0 MOV TL0,#0;赋给新的计数值0 MOV C,POL;电压极性对应温度极性 MOV F1,C;传送到F1中 SETB AD_END_FLAG;置一次AD转换完成标志 RETR;中断返回 ;***************************************

;*************************************** ;*********定时器1中断服务程序*********** TRMER1_RNT:;每50MS进入该中断一次 RNC MS_50;首先将50MS单元加1 XCH A,MS_50;交换到A中以便判断 CJNE A,#20,NO_1S;有20次50MS了吗?没有就转至NO_1S XCH A,MS_50;有20次50MS了,即1S了,50MS单元和A换回头 MOV MS_50,#0;既然到了1S LCALL DRSPLAY;调用LCD1602显示程序,每秒钟都更新显示一次 JMP TEST_KEY;转到按键1检测 NO_1S: XCH A,MS_50;50MS单元和A换回头 TEST_KEY: JB SK0,TRMER1_RET;检测按键1,没按则转退出 CALL KEY;如果按下则调用按键程序 TRMER1_RET: RETR;中断返回 ;*************************************** ;*************************************** ;*************测量参数显示子程序******** DRSPLAY: MOV A,#0C8H ;显示在下行第8位 LCALL WRRTE_COM JNB F1,FU_SHU;POL极性参数在F1中,1为正,0为负 MOV A,#'+';\号代表零上温度 LCALL WRRTE_DATA;显示\ JMP DRSPLAY_CANSHU;转显示参数 FU_SHU: MOV A,#'-';\号代表零下温度 LCALL WRRTE_DATA;显示\ DRSPLAY_CANSHU:;显示参数 MOV A,73H ;十位数 ORL A,#30H ;ASCRR LCALL WRRTE_DATA MOV A,72H ;个位数 ORL A,#30H ;ASCRR

本科毕业设计说明书(论文) 第27页 共36页 LCALL WRRTE_DATA MOV A,#'.' ;小数点 LCALL WRRTE_DATA MOV A,71H ;0.1位数 ORL A,#30H ;ASCRR LCALL WRRTE_DATA MOV A,70H ;0.01位数 ORL A,#30H ;ASCRR LCALL WRRTE_DATA MOV A,#0DFH;这是小圆圈,温度的符号的一半 LCALL WRRTE_DATA MOV A,#'C'; C也是温度的符号的一半 LCALL WRRTE_DATA RET ;******************************************* ;****************************************** ;**********延时2.5MS子程序**************** DELAY: MOV R4,#5; ;2.5MS D1: MOV R5,#0FFH DJNZ R5,$ DJNZ R4,D1 RET ;********************************************* ;********************************************* ;**************延时14US子程序************* DELAY10US: NOP NOP NOP NOP NOP NOP RET ;***************************************** ;*****************************************

;************LCD1602初始化子程************ LCD_RNRT: MOV R2,#4 LOOP_10US: LCALL DELAY DJNZ R2,LOOP_10US MOV A,#01H ;清显示 LCALL WRRTE_COM MOV A,#38H ;8位数据端口,2行显示,5*7点阵 LCALL WRRTE_COM MOV A,#0CH ;开显示,光标不显示,不闪烁显示 LCALL WRRTE_COM MOV A,#06H ;指针自动加1,但数据不移位 LCALL WRRTE_COM RET ;***************************************** ;***************************************** ;*************向LCD下达命令*************** WRRTE_COM: LCALL DELAY; LCALL DELAY; CLR RS LCALL DELAY10US CLR RW LCALL DELAY10US CLR EN LCALL DELAY10US MOV P0,A ;下达的命令,该行语句的前面和后面各条语句编制满足LCD1602写命令的时序 LCALL DELAY10US SETB EN LCALL DELAY10US CLR EN LCALL DELAY10US RET ;***************************************** ;***************************************** ;**************数据写入LCD1602********** 本科毕业设计说明书(论文) 第28页 共36页 WRRTE_DATA: LCALL DELAY SETB RS LCALL DELAY10US CLR RW LCALL DELAY10US CLR EN LCALL DELAY10US MOV P0,A ;要显示的数据,该行语句的前面和后面各条语句编制满足LCD1602写数据的时序 CLR TR0;如果按下则确认,继续操作 CLR TR1 CLR TR2 LCALL DRSPLAY_SET;调显示\设置状态SETTRNG STATUS\ LCALL DRSPLAY_TEMPER;调显示\ LCALL DRSPLAY_QRNGCHU;调清除显示温度区域 LCALL DRSPLAY_UPPER;显示上限温度 SETB JRDRANQR;关闭继电器 LCALL DELAY10US SETB EN LCALL DELAY10US CLR EN LCALL DELAY10US RET ;***************************************** ;***************************************** ;*************电压除以20为温度************ ;电压与温度之间成20倍的关系,采用数据右移一位配合小数点左移一位来实现 DRV20: CLR C MOV A,7FH RRC A MOV 7FH,A MOV A,7EH RRC A MOV 7EH,A RET ;***************************************** ;***************************************** ;***************按键控制子程序************ ;按键程序 SK0_ON_RET: ;由下面相同标号转来 RET KEY: LCALL DELAY;延时10MS去抖动 LCALL DELAY LCALL DELAY LCALL DELAY JB SK0,SK0_ON_RET;再次检测1#按键如果没按则退出

SETB LED ;加热指示器熄灭 TEST_SK3: JB SK3,TEST_SK1 LCALL DELAY;延时10MS去抖动 LCALL DELAY LCALL DELAY LCALL DELAY JB SK3,TEST_SK1 SETB TR0;如果按下则确认,继续操作 SETB TR1 SETB TR2 JNB SK3,$ ;等待按键松开 LCALL DRSPLAY_CURR_TEMPER;恢复显示当前温度 LCALL DRSPLAY_TEMPER;左侧显示温度 RET TEST_SK1: JB SK1,TEST_SK2 LCALL DELAY;延时10MS去抖动 LCALL DELAY LCALL DELAY LCALL DELAY JB SK1,TEST_SK2 ;如果按下则确认,继续操作 MOV A,UPPER_LRMRT ADD A,#1 CJNE A,#100,BU_100 MOV A,#99 BU_100: MOV UPPER_LRMRT,A LCALL DRSPLAY_UPPER;显示上限温度 JNB SK1,$ TEST_SK2: JB SK2,TEST_SK3 LCALL DELAY;延时10MS去抖动

本科毕业设计说明书(论文) 第29页 共36页 LCALL DELAY LCALL DELAY LCALL DELAY JB SK2,TEST_SK3 ;如果按下则确认,继续操作 MOV A,UPPER_LRMRT CLR C SUBB A,#1 CJNE A,#9CH,BU_FU100;减1操作到-100(9CH)度时停在-99度 MOV A,#9DH;9DH即-99 BU_FU100: MOV UPPER_LRMRT,A;修改后的设定值保存 LCALL DRSPLAY_UPPER;显示上限温度 JNB SK2,$;等待按键松开 JMP TEST_SK3;检查退出键 ;***************************************** ;***************************************** ;*************控制区域******************** CONTROL:;控制加热与否和控制指示灯亮灭 JNB OVER,JRXU;先看看有没有超量程(比+2V大比-2V小) SETB JRDRANQR;已经溢出则关闭继电器通电 CPL LED;指示灯闪烁提示 RET;返回 JRXU: JB F1,ZHENG_WENDU;当前测量的极性为正,则转正温度,否则,这里为测量到的负温度 MOV A,UPPER_LRMRT;传限定值 JNB ACC.7,XRAN_ZHENG1;限定温度也是正转 ;这里是测量负/限定负 ;待编程 RET XRAN_ZHENG1:;这里是测量负/限定正;肯定要加温 CLR JRDRANQR CLR LED RET ZHENG_WENDU:;当前测量的极性为正 MOV A,UPPER_LRMRT

JNB ACC.7,XRAN_ZHENG;限定温度也是正转 ;这里是测量正/限定负;肯定要停止加温 SETB JRDRANQR SETB LED RET XRAN_ZHENG:;这里是测量正/限定正 MOV B,#10;限定值的高低位分开 DRV AB ;需要除以10 CJNE A,73H,ZZDX1;高位与73H比较,不相等,转再看看哪个大那个小 MOV A,B ;高位与73H比较相等,传限定值低位 CJNE A,72H,ZZDX1;高位与72H比较,不相等,转再看看哪个大那个小 SJMP CE_DA ;高低位都相等,证明测量温度已经达到限定温度,转关闭加温 ZZDX1: JC CE_DA;测量大限定小转 CLR JRDRANQR;测量小限定大,加温 CLR LED RET CE_DA: ;测量大限定小 SETB JRDRANQR;停止加温 SETB LED RET ;***************************************** ;************************************** ;*************显示相关区域************* DRSPLAY_SET: ;显示设置状态 MOV A,#80H;首行首字符命令 LCALL WRRTE_COM MOV DPTR,#TAB3;显示表格3的内容 MOV R2,#16 ;共16个 MOV R3,#0 ;从第0个字符开始显示 LOOP_SET: MOV A,R3 ;取第N个字符 MOVC A,@A+DPTR;查表 LCALL WRRTE_DATA;写入 RNC R3 ;为显示下一个字符作准备 DJNZ R2,LOOP_SET;循环16次 RET ;16个字符显示完返回 本科毕业设计说明书(论文) 第30页 共36页 ;*************显示相关区域************* DRSPLAY_CURR_TEMPER:;显示当前温度 MOV A,#80H;首行首字符命令 LCALL WRRTE_COM MOV DPTR,#TAB2;显示表格2的内容共16个 MOV R2,#16 MOV R3,#0 LOOP_CURR_TEMPER: MOV A,R3 MOVC A,@A+DPTR LCALL WRRTE_DATA RNC R3 DJNZ R2,LOOP_CURR_TEMPER RET ;*************显示相关区域************* DRSPLAY_TEMPER:;显示下行开始的7个字符 MOV A,#0C0H;首字符开始 LCALL WRRTE_COM MOV DPTR,#TAB1 ;表格0 MOV R2,#7 MOV R3,#0 LOOP_TEMPER: MOV A,R3 MOVC A,@A+DPTR LCALL WRRTE_DATA RNC R3 DJNZ R2,LOOP_TEMPER RET ;*************显示相关区域************* DRSPLAY_QRNGCHU: ;清除测量温度显示区 MOV A,#0C8H LCALL WRRTE_COM MOV R2,#6 MOV R3,#20H;空格 LOOP_QRNGCHU: MOV A,R3 ;显示6个空格 LCALL WRRTE_DATA DJNZ R2,LOOP_QRNGCHU RET ;*************显示相关区域************* DRSPLAY_UPPER:;上限温度显示;配合加减1按键

MOV A,#0CBH ;指出显示的位置

LCALL WRRTE_COM ;命令 MOV A,UPPER_LRMRT;取出要显示的参数,就是设置的上限温度 CJNE A,#80H,$+3 ;判断,为正数还是负数,-128 JC ZHENG;不够减为正 CPL A ;够减为负 ADD A,#1 ;为负则取反加1,为补码 MOV B,A ;因为要显示负的符号,所以先把数据暂存 MOV A,#'-' ;将负的符号位 LCALL WRRTE_DATA ;显示出来

MOV A,B ;把暂存的数据恢复到A SJMP SHUZHR ;转去显示数字处 ZHENG: ;正的符号位 MOV B,A ;显示正的符号位也要暂存数据 MOV A,#'+' ;将正的符号位 LCALL WRRTE_DATA ;显示出来

MOV A,B ;同样把暂存的数据恢复到A SHUZHR: ;符号显示完,开始显示两位数字 MOV B,#10 ;因为A中是2位数(00-99) DRV AB ;所以要用10去作除法,以分离出十位数和个位数,十位数在A中,个位数在B中 ORL A,#30H ;显示前要变成ASCRR码数字加30H(48)即可 LCALL WRRTE_DATA ;十位数先显示出来 MOV A,B ;取个位数 ORL A,#30H ;ASCRR LCALL WRRTE_DATA ;个位数再显示出来 RET ;***************************************** ;***************************************** ;**********16进制数转换为10进制数******** ;将要转换的数存放在7FH7EH中,高位7FH低位7EH。 ;编程思路是: ;先用7FH7EH除以10000,商为十进制的万位数;

本科毕业设计说明书(论文) 第31页 共36页 ;余数送7FH7EH,再除以1000,商为十进制的千位数; ;余数再送7FH7EH,再除以100,商为十进制的百位数; ;余数再送7FH7EH中,再除以10,商为十进制的十位数; ;最终余数为十进制的个位数; ;10000=2710H ;1000=03E8H ;100=0064H ;10=000AH ;用C语言编比较简单,只需要定义INT型的变量就可以直接作除法。而用汇编编程序较长,这是汇编的尴尬。 ;设:被除数高字节7FH中为TH0,被除数低字节7EH中为TL0,除数高字节存放于7DH,除数低字节存放于7CH中(除数为2710H\\03E8H\\0064H\\000AH共4种),转换后的十进制BCD码存放在74H73H72H71H70H连续5个内存单元中。要想做多字节除法,用减多次的方法,首先要判断够不够减,够减就减一次,商加1,不够减就再求低一位的十进制数。占用:A,B,PSW,7FH,7EH,7DH,7CH, 74H,73H,72H,71H,70H共9个字节;完整的子程序如下: HEX_DEC: ;将7FH、7EH中的十六进制数转换为几万几千几百几十几共5个10以内的十进制数,一般供显示用。 CLR A;将5个BCD单元清零 MOV 74H,A ;万 MOV 73H,A ;千 MOV 72H,A ;百 MOV 71H,A ;十 MOV 70H,A ;个 ;***************************************** ;***************************************** ;先求万位数 MOV 7DH,#27H;传除数高8位 MOV 7CH,#10H;传除数低8位 LOOP_W: LCALL COM_SUB;看看够不够减 JC BU_GOUJRANW;不够减 RNC 74H;商+1 LCALL SUBWORD;做一次减法

SJMP LOOP_W;万位数循环 ;***************************************** ;***************************************** ;再求千位数 BU_GOUJRANW: MOV 7DH,#03H;传除数高8位 MOV 7CH,#0E8H;传除数低8位 LOOP_Q: LCALL COM_SUB;看看够不够减 JC BU_GOUJRANQ;不够减 RNC 73H;商+1 LCALL SUBWORD;做一次减法 SJMP LOOP_Q;千位数循环 ;又求百位数 ;***************************************** BU_GOUJRANQ: MOV 7DH,#00H;传除数高8位 MOV 7CH,#64H;传除数低8位 LOOP_B: LCALL COM_SUB;看看够不够减 JC BU_GOUJRANB;不够减 RNC 72H;商+1 LCALL SUBWORD;做一次减法 SJMP LOOP_B;百位数循环 ;还求十位数 ;***************************************** BU_GOUJRANB: MOV 7DH,#00H;传除数高8位 MOV 7CH,#0AH;传除数低8位 LOOP_S: LCALL COM_SUB;看看够不够减 JC BU_GOUJRANS;不够减 RNC 71H;商+1 LCALL SUBWORD;做一次减法 SJMP LOOP_S;十位数循环 ;最后,个位数不用求了,最终余数就是! BU_GOUJRANS: MOV 70H,7EH RET ;***************************************** ;***************************************** ;判断是否够减,结果在C中,C=0够减;C=1不

本科毕业设计说明书(论文) 第32页 共36页 够减 COM_SUB: MOV A,7FH;传高8位 CJNE A,7DH,COM_END;高8位不相等 MOV A,7EH;高8位相等,传低8位 CJNE A,7CH,COM_END COM_END:;不相等就得出哪个大哪个小的结论了 RET; ;***************************************** SUBB A,7CH; MOV 7EH,A MOV A,7FH SUBB A,7DH; MOV 7FH,A RET ;*************************************** ;*************************************** ;***************************************** ;*双字节数的减法子程序,差还回到被减数的单元中* SUBWORD: CLR C MOV A,7EH

;***************表格区****************** TAB1: DB \TAB2: DB \TAB3: DB \;*************************************** END

本科毕业设计说明书(论文) 第32页 共36页 够减 COM_SUB: MOV A,7FH;传高8位 CJNE A,7DH,COM_END;高8位不相等 MOV A,7EH;高8位相等,传低8位 CJNE A,7CH,COM_END COM_END:;不相等就得出哪个大哪个小的结论了 RET; ;***************************************** SUBB A,7CH; MOV 7EH,A MOV A,7FH SUBB A,7DH; MOV 7FH,A RET ;*************************************** ;*************************************** ;***************************************** ;*双字节数的减法子程序,差还回到被减数的单元中* SUBWORD: CLR C MOV A,7EH

;***************表格区****************** TAB1: DB \TAB2: DB \TAB3: DB \;*************************************** END

本文来源:https://www.bwwdw.com/article/qm08.html

Top