智能温度测量仪
多功能智能化温度测量仪设计
摘要:本文主要介绍了温度的自动测量,包括温度传感器、单片机接口及其应用软件的设计,大体分为以下几大部分:介绍了国内外温度检测技术和特种测温一钢水温度检测的发展现状,并且分析了温度检测技术的未来发展方向;根据实际使用要求设计了相应的单片机硬件系统,该系统能够实现数据采集、 数据处理、温度值的在线显示以及时钟电路的时间显示;简略介绍了该仪表的软件部分;对该温度仪表的未来发展进行了展望。
多功能智能化温度测量仪是以8051单片机系统和温度检测元件一AD590相结合的温度测量系统。本系统的数学模型合理,测量方法容易实现。实际仪器采用抗干扰、低零漂、低温漂的电子元件,性能稳定。该测量仪总体特点是使用简便、实用、使用对象广、并且实现了自动化。
关键词:温度测量 多功能 智能化 单片机
第1章 绪 论
1.1 引言
温度测量是现代检测技术的重要组成部分,在保证产品质量、节约能源和安全生产等方面起着关键的作用。因此,能够确保快速、准确地测量温度的技术及其装置普遍受到各国的重视。近年来,利用智能化数字式温度传感器以实现温度信息的在线检测已成为温度检测技术的一种发展趋势。本文介绍的智能温度检测系统,以智能化数字式温度传感器与PIC 微处理器有机结合,构成了一种新型智能化温度检测系统。该系统具有性能可靠、测温准确、结构简单、造价低廉等特点,并兼具线路简捷、使用灵活、抗干扰性好、可移植性强等优点,可在工程实际中得到广泛应用。
本课题主要为采用单片机实现温度采集与多功能数字钟的制作。突出民用产品的低成本多动能的特点。按照选题要求应实现温度测量精度
第 2 章 多功能智能化温度测量仪设计
2.1 课题主要内容
在掌握《传感器与传感器技术》和《单片机原理与应用》等教材内容和教学要求的基础上,研究分析热电偶的测温原理、热电偶的安装使用方法以及热电偶检定,确定单片机的硬件设计,制定多功能温度测量仪器设计方案,确定硬件并写出程序蓝本。再在软件上模拟实现要求的功能,调试出结果。本文介绍了该测量仪的研制,包括温度传感器、单片机接口及其应用软件,
2.2 系统功能
根据设计要求,系统的主要内容(功能)如下: (1) 根据要求设计时钟并显示; (2) 自动检测温度并显示; (3) 用LED显示方式; (4) 温度以℃为单位;
2.3 系统总体设计方案
将集成温度传感器AD590(0℃时为0.2732mA)因温度变化,导致电流变化(0.001mA/℃),经OPA转换为电压变化输入ADC0804,输入电压Vin(0~5V之间)经过A/D转换之后,其值由8751处理,最后将其显示在D4,D3,D2,D1共四个七段显示器。其中包含了时钟显示电路。该温度测量仪可以实现温度的测量,数据的显示、储存以及日历时间的显示。
2.4 各模块的方案设计
2.4.1 选择温度传感器器件[1]
本次设计用到电流型两线制集成温度传感器AD590(0℃时为0.2732mA)。AD590测量热力学温度、摄氏温度、两点温度差、多点最低温度、多点平均温度的具体电路,广泛应用于不同的温度控制场合。由于AD590精度高、价格低、不需辅助电源、线性好,常用于测温和热电偶的冷端补偿。
2.4.2 选择单片机器件
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。在大多情况下,理应选择性价比高的单片机及其它器件,但在某些特殊场合,当性能成为决定因素时,应以性能优先原则选择所需的单片机或其它器件。单片机一般分为51系列和52系列,本次设计用到的是52系列即8051单片机。
2.4.3 时钟电路设计、接口设计
在许多的单片机系统中,通常进行一些与时间有关的控制,这就需要使用实时时钟。若再要求记忆用户的一些设置,还需要使用存储器。本系统采用一片DALLAS公司生产的串行实时时钟芯片DS13 02和两片Intel公司的E2PR OM2 864芯片。
2.4.4 放大器的设计
温度传感器的输出电压经过ISO100隔离放大(单增益)后,将输出电压送给测量放大器进行放大,以便放大后的输出电压和A/D转换器的量程相匹配。本设计中选用了AD521,它是美国AD公司生产的第二代单片集成精密仪表放大器。
2.4.5 A/D和D/A转换器设计[21]
一般A/D转换常用以下四种方式:
1 计算式A/D。速度慢,结构简单,价格低。
2 双积分式A/D。精度高,速度慢,能消除干扰和电源噪声。
3 逐次逼近式A/D。速度高。
4 并行转换A/D。速度最快,但成本高。
图1 A/D转换器硬件与单片机连接的方式
若A/D转换器中带锁存器,可与单片机直连;若A/D片中不带锁存器,则在单片机与A/D之间要家锁存器,如74LS373等。
图2 A/D转换与51单片机的接口
2.4.6 显示器及键盘的设计[7]
在本设计中采用8279可编程键盘、显示器接口芯片。8279芯片是一种专用于键盘、显示器的接口器件,它能对显示器自动扫描,能识别键盘上闭合键的键号,提高CPU的工作效率。8279的中断请求信号线IRQ经反向驱动器74F04接至8031外部中断,这样,可通过中断方式对按键进行处理
2.4.7 抗干扰措施
为了进一步提高系统的可靠性,在硬件电路设计时,应采取一系列防干扰措施: (1) 大规模IC芯片电源供电端都应加高频滤波电容,根据负载电流的情况,在各级供电
节点还应加足够容量的退藕电容;
(2) 开关量I/O通道与外界的隔离可采用光电耦合器件,特别是与继电器、可控硅等连接的通道,一定要采取隔离措施;
第3章 系统的硬件设计
3.1 系统总体原理框图
系统总体原理框图如图3.1
图3 系统总体原理框图
3.2 信号输入部分总体设计
信号输入部分总体设计如图3.2
图4信号输入部分总体设计
3.3 信号输入部分设计 3.3.1 集成温度传感器
图
5
是简化的电流型集成温度传感器的基本原理图:
UBE9+I1R6=
UBE11UBE9=UBE11=
kTqkTqlnln
I1
IS9
I1IS11
VT8
I0=k1=
83kln qR6
-6
R6=538Ω
k1=1⨯10A /KVT10
图5 简化的电流型集成温度传感器的基本原理图
值得注意的是VT10管的作用,VT10管为VT1、VT3、VT9、VT11管的基极电流提供了一个通路,使它们不影响左、右两支管的电流对称性,应采用小温度系数的材料电阻R6。
3.3.2 ADC0804
所谓的ADC0804就是模拟/数字转换器,就是将模拟信号转换为数字信号,信号输入端可以是传感器或转换器的输出, ADC0804的规格及引脚图如图6
图6 ADC0804引脚图
在使用时应注意以下几点: (1) 转换时序
(2) 零点和满刻度调节。
(3) 参考电压的调节 (4) 接地
3.4 单片机及其扩展I/O的设计
采用TTL电路扩展I/O口是一种最常见的微机I/O扩展手段。
图7 单片机与I/O接口原理图
3.4.1 地址锁存器
由于8051单片机的PO口是分时复用的地址/数据总线,因此在进行程序存储器扩展时,必须用地址锁存器将地址信号从地址/数据总线中分离开来。74LS373是带三态缓冲输出的八D锁存器,将它的锁存控制端G直接与8031的锁存控制信号端ALE相连,在ALE下降沿进行地址锁存。
3.4.2 程序存储器
程序存储器的扩展包括三组总线的连接及地址译码等。MCS-51系列单片机程序存储器可扩展64KB。由于大规模的集成电路的扩展,单片存储器的存储容量越来越大,因此,在程序存储器芯片使用的数量上一般采用一片就够了。
程序存储器的作用是存放单片机的执行程序,虽然现今的单片机具有片内的程序存储器,但是,当程序量超过单片机的片内程序存储器时,将采用片外扩展程序存储器,
通常采用EPROM、E2PROM、Flash存储器等芯片。
3.4.3 数据存储器扩展
扩展的数据存储器空间地址同外扩程序存储器一样,由P2口提供高8位地址,PO口为分时提供低8位地址和8为双向数据总线。由8031的RD (P3 .7 )和WR (P3.6)信号控制,,而片外程序存储器EPROM的输出允许端( OE)由读选通信号PSEN控制即使与片外数据存储器RAM的读和写EPROM共处一地址空间,但由于控制信号即使用的数据传输指令不同,故不会发生总线冲突
3.5 键盘和显示的设计
键盘分为独立式键盘和矩阵式键盘。由于本设计中键的数量不是很多,所以在此我们选用独立式键盘控制。
在此电路中为8279扩展I/0控制的8位共阴极LED动态显示接口电路。由于所有8位段选线皆由一个I/0口控制,因此,在每一瞬间,8位LED会显示相同的字符。要想每位显示不同的字符,就必须采用扫描方法轮流点亮各位LED,记载每一瞬间只使某一位显示字符。在此瞬间,段选控制I/0口输出相应字符段选码(字型码),而位选则控制I/0口在该显示为送入选通电平(因为LED为共阴,故应送低电平),以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。逐位轮流点亮各个LED,每一位停留lms,在10-20ms之内再一次点亮,重复不止,这样,利用人的视觉暂留好像六位LED同时点亮了。在此仪器的设计中,LED显示器的显示方式采用的是动态显示方式。
3.6 模拟信号输出部分设计
3.6.1 信号输出部分总体设计
系统经过数据采集、数据处理之后,获得被测对象的温度值,但在有些时候需要控制被控对象的温度,因此,要由单片机系统发出控制信号,进行系统控制。但是由8031输出的控制信号是数字信号,需将其经过数/模转变为模拟信号,再经功率放大,才能控制加热炉、热处理炉等。这一功能由一片DAC0832来完成,由于DAC0832是一种电流输出型D/A芯片,因此其后端接一片运算放大器构成反相输出电路以实现电压信号输出,然后再接入1片多路模拟开关CD4051,将输出扩展为8路。由上述可知,该部分具有8路模拟信号输出能力。
3.6.2 芯片的选择
(1) D/A转换器选用DAC0832
该芯片是8位分辨率的D/A集成芯片,与微处理机完全兼容,具有价格低廉、接口简单、转换控制容易等优点,主要有如下特点 A)可单缓冲或双缓冲数字输入; B)只需在满量程下调整其线性度; C)低功耗,200mW;
D)内部无参考电压源,须外接参考电压源;
E)为电流输出型数模转换器,要获得模拟电压输出时,需外加转换电路; F)有5根控制线;
图8 DAC0832的管脚功能
(2) 放大器的选用
放大器选用OP-07,其主要特征是开环增益和共模抑制比很高(一般为MOM),而失调电压和失调电流、温漂以及噪声又很小。主要用于稳定积分、精密加法比较、闽值电压检测、微弱信号精确放大等场合。其电源电压范围为13-士18V,输入电压范围为0一土14V。在该电路连接中,放大器输出端直接反馈到Rfb,其产生的模拟输出电压是单极性的。
第4章 时钟电路的设计
4.1单片机的选择
本次设计用到的是8051。该单片机在以上报告中已重点说明,在此就不做过多说了。
4.2 时钟与复位电路的设计
单片机工作的时间基准是有时钟电路提供的。在单片机的XTAL1和XTAL2两个管脚,接一个晶振及两只电容就构成了单片机的时钟电路。
单片机的复位方式有上点自动复位和手工复位两种。只要VCC上升时间不超过1ms,它们都能很好地工作。复位以后,单片机内各部件恢复到初始状态。电阻电容器件的参
考值为R1=200Ω,R2=1KΩ,C3=22μA。RET按键可以选择专门的复位按键,也可以选择轻触开关。
4.3 LED显示电路设计与器件选择
单片机应用系统中,通常都需要进行人机对话。这包括人对应用系统的状态干预与数据输入,以及应用系统向人们显示运行状态与运行结果等。显示器、键盘电路就是用来完成人机对话活动的人机通道。
4.3.1 LED显示器的选择
在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此生产厂家就生产了多种位数、尺寸、型号不同的LED显示器。在我们的设计中,选择4位一体的时钟型LED显示器,简称“4-LED”。用“:”前的2位显示“小时”的十位和个位,用“:”后的2位显示“分”的十位和个位。
4.3.2 LED的段驱动芯片的选择
LED的段驱动电路有很多种,在本设计中可以选择BCD-7段锁存/译码/驱动器作为段驱动器。这类芯片的型号有74LS47、74LS48、74LS247、74LS248等。该类芯片具有锁存、译码、驱动的功能。即在输入端输入要显示字形的BCD码,在输出端就可以得到具有一定驱动能力的7段显示字形码。
4.3.3 LED的位驱动芯片的选择[14]
LED位驱动较常用的芯片有ULN2003A和ULN2803。前者是具有7个达林顿电路的集成芯片,后者是具有8个达林顿电路的集成芯片。此种芯片集电极可以收集最大达500mA的电流,耐压为30V,能驱动常规的LED显示器。2803芯片的电路原理和2003完全相同,只是在结构上2803比2003多一路驱动器。
在本次设计中选用ULN2003作为位驱动电路,将该芯片的输入端管脚IN0,IN1,IN2,IN3与单片机的P1口或者P3口连接,该芯片的输出端管脚OUT0,OUT1,OUT2,OUT3与LED显示器的4个位码管脚D1~D4相连接。ULN2003的作用是接受来自单片机的位码输入信号,经过反相放大后输出,送到LED显示器的位码管脚,完成对位码信号的反相和驱动的功能。
4.3.4 LED驱动电路与单片机的连接
采用单片机的P1口作为与LED的输出接口,用P1口的低四位作为LED的段码输出信号,P1口的高四位作为LED位码的输出控制信号。硬件电路连接如图1所示。RP是
上拉电阻,作用是保证LED可靠导通与截止,可以选择阻值为8×100Ω的排电阻。
该电路的工作原理是:当P1口的低四位输出短码信号的BCD码后,通过74LS48芯片的锁存、译码和驱动作用,输出具有一定驱动能力的7段字形码,由于4-LED的段码输入管脚是并联在一起的,所以每一位LED的段码输入管脚都能获得这个段码信号。若要控制在每一时刻只有一位LED被点亮,必须靠位码信号在每一时刻只有一位是“1”,其他位全为“0”,然后按时间顺序改变输出“1”的位置,控制在每一时刻只有一位LED被点亮,达到动态显示的目的。
4.4 按键电路设计与器件选择
电子时钟应用系统工作时应具备两项基本功能,一是随时输入定时(闹钟)时间,二是随时对当前时间进行调整。要实现这一功能,可以接入键盘输入电路。
4.4.1键盘结构的选择
在单片机组成的测控系统及智能化仪器中,用得最多的是非编码键盘。键盘结构又可以分为独立式键盘和行列式键盘(矩阵式)两类。
本例只需要4个按键,因此选择独立式键盘。电路由按键和4个电阻组成,按键可以采用轻触开关,按键分别命名为SET、ALM、+1和RET键,电阻可以采用5脚排电阻,阻值为4×1kΩ。
4.4.2 键盘与单片机的接口电路设计
将键盘直接与单片机的P3口连接,有P3.2、P3.3口线通过两个按键SET、ALM接入两个外部中断的请求信号INT0、INT1;P3.0、P3.1管脚作为I/O口使用。四个按键功能的设计思路如下:
(1) SET键功能设置当前时间。
(2) ALM键功能设置定时(闹钟)时间。
(3) +1调整键的功能分别对时间值的小时十位、分的十位、分的个位进行+1调整,即该键每按下一次,对应的时间调整位+1。
(4) RET确认键的功能确认。
键盘的硬件电路设计只是完成4个按键信号可靠输入,要想实现键盘的输入功能,还要靠软件编程来具体实现。
4.5 蜂鸣器电路的设计
设计要求定时(闹钟)时间到时要有声音提醒信号产生,可选择一只蜂鸣器来实现
这一功能。压电式蜂鸣器(H)作为三级管VT的集电级负载,当VT导通时,蜂鸣器发出鸣叫声音;VT截止时,蜂鸣器不发声。R是限流电阻。
该电路的工作原理是:当VT2的基极为低电平时,VT2导通,dp段被点亮,即“:”段与LED数码管的第二位一起被点亮;当VT2的基极为高点平时,VT2截止,dp段熄灭。
器件选择:R4=20Ω、R5=100Ω,VT2选择PNP型三级管9012。至此,我们已经完成了电子时钟的功能,还需要有相应的软件配合,才能达到设计要求。
4.6 电子时钟应用程序设计
进行应用软件设计时可采用模块化结构设计,其优点是:①每个模块的程序结构简单,任务明确,易于编写、调试和修改;②程序可读性好,便于功能扩充和版本升级;③对于使用频繁的子程序可以建立子程序库,便于多个模块调用;④便于分工合作,多个程序员同时进行程序的编写和调试工作,加快软件研制进度。
4.6.1电子时钟系统软件设计方案确定
根据设计要求,首先要确定软件设计方案,即确定该软件应该完成哪些功能;其次是规划这些功能需要分成多少个功能模块,划分模块时应遵循下述原则: (1) 每个模块应具有独立的功能,能产生一个明确的结果。 (2) 模块之间的控制参数应尽量简单,数据参数应尽量少。
(3) 模块长度适中,模块语句的长度通常在20~100条的范围较合适。
根据模块的划分原则,我们将该程序划分成七个模块,如图9所。
图9电子时钟软件设计的模块
4.6.2 内存空间的分配
一般在程序设计前应对内存进行合理的分配,这样既可以使得编程时心中有数,也
1 表1电子时钟应用程序设计内存分配
4.6.3 电子时钟应用程序设计
(1) 主程序的设计
主程序的内容一般包括:主程序的起始地址、中断服务程序的起始地址、有关内存单元及相关部件的初始化和一些子程序调用等。 主程序设计框图如图10所示。
图4.8 流程图
图10 主程序设计框图
(2).LED动态显示程序模块的设计
在采用动态扫描显示方式时,要使得LED显示得比较均匀,又有足够的亮度,需要设置适当的扫描频率。一般可以采用间隔10ms对LED进行动态扫描一次。程序流程如图11所示:
图11 LED动态扫描程序的程序流程图
本设计中,采用硬件定时和软件定时并用的方式,即用T0溢出中断功能实现10ms定时,通过软件延时程序实现1ms的定时。
程序清单见附录A
第5章 系统软件设计
5.1 系统软件总体设计
整个温度检测系统是在程序控制下工作的,该系统的软件全部采用汇编语言编写,以提高系统的快速性和实时性。其设计方法与硬件设计相对应,同样采用模块化的设计思想,将该部分设计划分为相应的程序模块,分别进行设计、编制和调试,最后通过主程序和中断处理程序将各程序模块连接起来。这样有利于程序修改和调试,增强了程序的可移植性。整个软件系统主要有以下几部分:主程序、数据采集、数据标度变换处理及键盘显示等程序。
5.2 主程序设计
系统的主程序设计主要完成系统初始化、中断优先级设定以及判断调用各模块程序,即主要实现各程序模块的连接。整个控制系统软件设计按照两种控制方式设计:一种采用键盘控制方式,另一种采用微机(上位机)控制方式。 (1)键盘控制方式
在没有微机联网的情况下,本仪器的调试使用键盘控制方式,是按人工直接操作设计的。
(2)微机控制方式
微机控制方式是采用微机通过通讯接口向单片机发出命令,单片机按其要求实现控制系统的动作要求。
5.3 数据采集及处理子程序设计
该部分主要实现将来自热电偶传感器的模拟信号转换为数字信号的功能。由电路连接图可知,AM转换器工作于中断方式。当AM转换完毕时,STS由高电平变为低电平,通过IN而向8051请求中断。该程序主要有A/D转换器启动程序、中断等待转换结束、读取转换结果并存入RAM等几步。被测信号经过AM 转换后变为数字信号,必须通过数据处理后才能变为可直接显示的温度值。
5.4 键盘/显示程序设计
8279的基本程序有三大块:一块是8279的初始化,一块是显示程序,另一块是键盘处理程序。初始化程序主要送入各种命令字,放在主程序中,显示程序编为显示子程序,键盘处理程序放在中断服务程序中。程序主要功能是将要显示的8个数的字段码送显示
RAM进行循环显示,其中键盘处理程序采用中断方式,通过外部中断1实现。整个程序是通过设定命令字,实现键盘和LED显示器的工作方式的设定,并完成对各种数据的读、写操作。
结束语
1.本设计所研制的多功能智能化温度测量仪是单片机控制的智能化仪表,它的主要特点如下:
(1) 该仪表适用于-55~+150℃温度范围的测量可以进行温度的实时显示。 (2) 该仪表选用了集成温度传感器AD590作为测温元件,该元件体积小,精度高重要的是它的价格低廉。这样该仪表的成本就低,可以大规模生产。
(3) 该仪器可以进行温度的实时显示还有时间显示及报警功能并且使用方便。 (4) 元器件经仔细挑选,抗干扰能力强。 2.本设计存在的不足之处如下:
本仪表只能进行一路测量,在需要进行多路测量时受到限制,因此应进一步完善以能进行多路测量。
该仪表没有打印测量温度值可以在原有硬件电路上进行扩展,实现更多的功能。 3.可以从两方面考虑进行改进:
1) 改变传感器。只需修改软件设计,硬件电路无需大的改动。 2> 采用黑体空腔理论进行测量。
参考文献
[1] 王迎旭 . 单片机原理与应用[J].北京.机械工业出版社.20042.7 [2] 徐科军 . 自动检测和仪表中的共性技术[J].清华大学出版.2002 [3] 松井邦彦 . 传感器实用电路设计与制作[J].科学出版社.1999 [4] 张友德 . 单片微型机原理、应用与实验[M].复旦大学出版社.2001 [5] 房小翠 .单片机应用系统设计技术[M].国防工业出版社.2004 [6] 曹琳琳 .单片机原理及接口技术[M].国防科技大学出版社.2003 [7] 孙涵芳,徐爱卿.单片机原理及应用[M].北京航空航天大学出版社.1998
[8] 李艳萍 . 单片机及嵌入式系统应用[M].高等教育出版社.2002 Education(Asia) 王晓明 .电动
机的单片机控制[M].北京:北京航空航天大学出版社.2004
[9] 张洪润 . 单片机应用技术教程[M].清华大学出版社.2000
附录1
参考程序清单
(1) 时钟电路主程序清单如下: ORG 0000H
LJMP MAIN ORG 0003H LJMP T0_SEV ORG 000BH LJMP INTB ORG 0013H LJMP INTB ORG 001BH LJMP T1_SEV ORG 0030H MAIN:MOV SP,#60H MOV A,#00H MOV 3OH,A MOV 31H,A MOV 32H,A MOV 33H,#0CH MOV 34H,A MOC 35H,A
MOV 44H,#80H MOV 45H,#40H MOV 46H,#20H MOV 47H,#10H CLR RS0
CLR RS1 MOV R2,#0
;转主程序
;外部中断0中断服务程序入口地址 ;转外部中断0中断服务程序 ;T0定时中断服务程序入口地址 ;转T0定时中断服务程序
;外部中断1中断服务程序入口地址 ; 转外部中断1中断服务程序 ;T1定时中断服务程序入口地址 ;转T1定时中断服务程序 ;设置主程序起始地址=0030H ;设置堆栈指针 ;LED位选择码 ;选择0组工作寄存器
MOV R3,#0 ;设置时间初值=12:00 MOV R4,#0 MOV R5,#12
MOV TMOD,#11H ;设置T1、T0的工作方式:定时器。工作方式1 MOV TH1,#3CH
MOV TL1,#0B0H ;T1计数初值=3CB0H MOV TH0,#0ECH ;T0计数初值=EC78H MOV TL0,#78H
MOV IP,#08H MOV TCON,#50H MOV IE,#8FH LOP: MOV B,#10 MOV A,33H DIV AB MOV 40H,A MOV 41H,B MOV B,#10 MOV A,32H DIV AB MOV 42H,A AA: MOV 43H,B SETB RS2 CLR RS0
A1: MOV R2,35H CJNE R2,#0,NT MOV R2,34H CJNE R2,#0,NT SJMP BB NT: MOV A,35H
CJNE A,33H,BB MOV A,34H CJNE A,32H,BB
;设置中断优先级 ;启动定时器T0、T1 ;开中断
;将二进制数转换为十进制数(BCD码) ;并送到显示缓冲区40H~43H ;判断是否有定时时间 ;判断定时时间到否
CLR P3.7 ;时间到,发出报警 SJMP LOP BB: SETB P3.7 SJMP LOP
(2) T0定时器中断服务程序清单如下:
TO_SEV: PUSH A ;LED定时扫描程序 PUSH PSW ;保护现场 SETB RS1 ;RS1、RS0=11H SETB RS0 ;选择3组工作寄存器 CLR TR0 ;停止T0定时器 MOV R2,#04H ;设置显示器位数 MOV R0,#40H ;设置段码首地址 MOV R1,#44H ;设置位码首地址 GO_ON: MOV A,R2 ;送显示位数到A
CJNE A,31H,NO_FLASH ;判断是闪烁位否,不是则转NO、FLASH DJNZ 30H,FLASH ;是闪烁位则转移到FLASH。 NO_FLASH: MOV A,@R1 ;送位码地址到A累加器
ADD A,@R0 ;将段码和位码组成8位二进制数 MOV P1,A ;输出段码、位码数据到P1口 LCALL DELAY1 ;调延时子程序,延时1ms FLASH: INC R0 ;段码地址+1 INC R1 ;位码地址+1
DJNZ R2,GO_ON ;判断4位都显示完否;没完继续显示下一位 MOV TH0,#0ECH
MOV TL0,#78H ;重置T0计数初值 POP A ;恢复现场 SETB ET0 ;允许T0中断 SETB TR0 ;启动T0开始定时
SETB EA ;开中断
RETI ;中断返回
DELAY1: MOV R3,#02H ;延时1ms子程序 AGAIN: MOV R4,#0F8H
DELAY: DJNZ R3,AGAIN RET
注意:在T0中断服务程序中,有调用了延时1ms子程序,因此,T0中断服务程序有是延时1ms子程序的主程序。 (3) 中断服务程序如下:
T1_SEV:MOV TH1,#3CH ;重置T1计数初值 MOV TL1,#0B0H
CLR PUSH PUSH PUSH CLR CLR INC CJNE MOV INC CJNE MOV INC MOV CJNE MOV MOV INC MOV CJNE MOV MOV EN: POP POP
EA A B PSW RS1
RS0 R2 R2,#0AH,EN R2,#0 R3 R3,#3CH,EN R3,#0 R4 32H,R4 R4,#3CH,EN R4,#0 32H,R4 R5 33H,R5 R5,#18H,EN R5,#0 33H,R5 PSW B
;选择0区工作寄存器 ;中断次数加1
;判断中断10次否,否则转EN
;T1中断10次的累计时间为1s,计数寄存器R2
清零
;秒计时单元R3+1
;判断R3=60s否,否则转EN ;60s时间到。R3=0 ;分计时单元R4+1 ;分值送32H单元
;判断R4=60min否,否则转EN ;60min时间到,R4=0 ;分值送32H单元 ;小时单元R5+1 ;小时值送33H
;判断R5=24h否,否则转EN标号地址 ;24h时间到。R5=0 ;小时值送33H单元 ;恢复现场 20
;关中断 ;保护现场
POP A
SETB EA ;开中断 RET1 ;中断返回
(4)键盘接收子程序 1)设置当前时间程序如下:
INTA: SETB P3.0 ;输入键值前,先将P3.0、P3.1置1 SETB P3.0
CLR TR1 CLR ET1 CLR EX0 CLR EX1 SETB EA SETB ET0 SETB PT0
PUSH A PUSH B PUSH PSW
MOV 31H,#04H MOV 29H,#00H LP0: JB P3.0,NEXT0 LCALL DELAY1 JB P3.0,LP0 LP1: JNB P3.0,LP1 INC 29H MOV 30H,#1H
SJMP LO1 NEXT0: JB P3.1,L1 LCALL DELAY1 JB P3.1,NEXT0 LD1: JNB P3.1,LD1 MOV 29H,#0
;T1停止定时 ;T1禁止中断 ;INT0禁止中断 ;INT1禁止中断 ;开中断 ;允许T0中断 ;保护现场 ;(31H)=04H(LED的位数) ;(29H)=00H
;判断P3.0键(+1键)按下否,否则转NEXT0 ;有键按下,延迟1ms ;判断是否松开,否则转LP0 ;等待键松开
;键松开后,(29H)+1 ;转LO1标号地址
;判断P3.1是否按下,否则转L1 ;有键按下,延迟1ms ;是否松开,否则转NEXT0 ;是否松开,否则转LD1 21
DJNZ 31H,LO1 SJMP LL LO1: MOV A,31H
CJNE A,#04H,LO2 ;是时针的十位吗》否则转LO2 MOV A,29H
CJNE A,#03H,LA1 ;十位大于3吗?否则转LA1 MOV LA1: MOV SJMP LO2: MOV CJNE MOV CJNE MOV SJMP A1: MOV CJNE MOV LA2: MOV SJMP LO3: MOV CJNE MOV CJNE MOV LA3: MOV SJMP LO4: MOV CJNE MOV LA4: MOV
29H,#00H 40H,29H L1 A,31H
A,#03H,LO3 A,40H A,#4,LA2 29H,#0 LA2 A,29H
A,#0AH,LA2 29H,#00H 41H,29H L1 A,31H
A,#02H,LO4 A,29H
A,#06H,LA3 29H,#00H 42H,29H L1 A,29H
A,#0AH,LA4 29H,#00H 43H,29H ;是的,清0 ;(29H)→(40H) L1 ;是时针的个位吗?否则转LO3 ;判断是否大于9,否则转LA2 ;(29H)清零 ;(29H)→(41H) ;转到L1 ;是分针的十位吗?否则转LA3 ;大于6吗?否则转LA4 ;(29H)清零 ;(29H)→(42H) ;转L1 ;分针个位大于9吗?否则转LA4 ;(29H)
;(29H)→(43H)
22
;转
CJNE A,#00H,LP0 ;31H=0则返回,否则转LP0
LL: MOV A,40H ;将输入的当前时间值BCD码转换为二进制数 MOV B,#10 MUL AB ADD A,41H MOV 33H,A MOV A,42H MOV B,#10 MUL AB ADD A,43H MOV 32H,A PUSH PSW CLR RS0 CLR RS1
MOV R4,32H MOV R5,33H
POP PSW POP PSW POP B POP A
MOV TH1,#3CH MOV TL1,#0B0H
SETB TR1 SETB ET1 SETB PT1 SETB EX0 SETB EX1 CLR TR0
MOV TH0,#0FFH MOV TL0,#00H SETB TR0
R4、R5寄存器 ;恢复现场 ;重置T1计数初值 ;启动T1定时器 ;开中断 23
;将当前时间置入
SETB XT0
RETI ;中断返回 2)设置定时(闹钟)时间程序清单如下:
INTB: SETB P3.0 ;输入键值前,先将P3.0、P3.1置1 SETB P3.1
CLR EX0 ;关INT0、INT1中断 CLR EX1 LPOB: LP1B: NEXTB: LD1B: LO1B:
SETB SETB SETB SETB PUSH PUSH PUSH MOV MOV JB LCALL JB JNB INC MOV SJMP JB LCALL JB JNB MOV MOV DJNZ SJMP MOV EA ET0 ET1 PT0
A B PSW
31H,#04H 29H,#00H P3.0,NEXTB DELAY1 P3.0,LP0 P3.0,LP1B 29H 30H,#1H LO1B
P3.1,L1B DELAY1 P3.1,NEXTB P3.1,LD1B
29H,#0 30H,#1
31H,LO1B LLB A,31H
;(31H)=04H ;(29H)=00H
;判断P3.0键,无键按下则转NEXTB ;有键按下,延迟1ms ;判断是否松开,否则转LP0 ;判断是否松开,否则再判断 ;P3.0松开后,(29H)+1 ;判断P3.1是否按下,否则转NEXT0 ;有键按下,延迟1ms ;是否松开?否则转LP0 ;是否松开?否则转LD1,再判断 ;是,(31)—1 24
;保护现场
CJNE A,#04H,LO2B ;是时针的十位吗?否则转LO2 MOV A,29H
CJNE A,#03H,LA1B ;十位大于3吗?否则转LA1 MOV 29H,#00H ;是的,清0 LA1B: MOV 40H,29H ;(29H)→(40H) SJMP L1B ;转L1 LO2B: MOV A,31H
A1B: LA2B: LO3B: LA3B: LO4B: LA4B:L1B:
CJNE A,#03H,LO3B MOV A,40H CJNE A,#2,A1B MOV A,29H CJNE A,#4,LA2B MOV 29H,#0 SJMP LA2B MOV A,29H
CJNE A,#0AH,LA2B MOV 29H,#00H MOV 41H,29H SJMP L1B MOV A,31H
CJNE A,#02H,LO4B MOV A,29H
CJNE A,#06H,LA3B MOV 29H,#00H MOV 42H,29H SJMP L1B MOV A,29H
CJNE A,#0AH,LA4B MOV 29H,#00H MOV 43H,29H MOV A,31H
CJNE A,#00H,LP0B ;是时针的个位吗?否则转LO3 ;是否大于9?否则转LA2 ;(29H)清零 ;(29H)→(41H) ;转到L1 ;是分针的十位吗?否则转LO4 ;大于6吗?否则转LA3 ;(29H)清零 ;(29H)→(42H) ;转L1 ;分针个位大于9吗?否则转LA4 ;(29)清零 ;(29H)→(43H)
;31H=0返回否则转LP0
25
LLB: MOV A,40H ;将输入的闹钟时间值BCD码转换为二进制
MOV B,#10 MUL AB ADD A,41H MOV 35H,A MOV A,42H MOV B,#10 MUL AB ADD A,43H MOV 34H,A
POP PSW POP B POP A CLR TR0
MOV TH0,#0FFH MOV TL0,#00H SETB TR0 SETB EX1 SETB EX0
SETB ET0 SETB EA RETI END
(5) 温度显示程序清单如下: ORG 00H
ANL P1,#0F0H START: MOVX @R0,A WAIT: JB P2.0,ADC CALL DISP JMP WALT
ADC: MOVX A,@R0
数
;恢复现场
;开中断 ;中断返回 ;清除显示器
;令ADC0804开始转换 ;检测ADC0804转换完成否? ;调用显示子程序 ;将转换好的数据送入累加器
26
CALL L1 ;调用十进制转换子程序 MOV R1,#0FFH ;显示延时 DISP1: CALL DISP ;调用显示子程序 DJNZ R1,DISP1 JMP START
L1: CLR C ;C=0
MOV R5,#00H ;十进制转换的低位寄存器 MOV MOV NEXT: RLC MOV MOV ADDC DA MOV MOV ADDC MOV MOV DJNZ MOV L2: MOV ADD DA MOV MOV ADDC DA MOV DJNZ RET
DISP: MOV
R4,#00H R3,#08H A R2,A A,R5 A,R5
A R5,A A,R4 A,R4
R4,A A,R2 R3,NEXT R7,#02 A,R5 A,R5 A R5,A A,R4 A,R4 A R4,A R7,L2 A,R5
;十进制转换的高位寄存器 ;作为十进制调整,调整的次数 ;将取入值转换十进制 ;暂存于R2 ;R5乘2加C ;做十进制调整 ;结果存回R5 ;R4乘2加C ;做十进制调整 ;结果存回R4
;做十进制调整结束否? ;称2两次,即乘4 ;R5乘2 ;做十进制调整 ;存入R5
;R4乘2 ;做十进制调整 ;存回R4 ;乘4完成否? 27
ANL A,#0FH ;取低4位,即D1的值 ORL A,#10H ;令D1使能+D1值 MOV P1,A ;显示D1 CALL DELAY MOV A,R5 CALL DELAY MOV A,R5
DELAY: D1:
ANL A,#0F0H SWAP A ORL A,#20H MOV P1,A CALL DELAY MOV A,R4
ANL A,#0FH ORL A,#40H MOV P1,A CALL DELAY MOV A,R4
ANL A,#0F0H SWAP A ORL A,#80H MOV P1,A CALL DELAY CLR A RET
MOV R6,#10 MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET END 28
4位,即D2的值 ;高低4位交换 ;令D2使能+D2值 ;显示D2 ;取低4位,即D3的值 ;令D3使能+D3值 ;显示D3 ;取高4位,即D4的值 ;高低4位交换 ;令D4使能+D4值 ;显示D4 ;5毫秒 ;取高
附录2
系统总电路图
29