单片机智能温度计设计
摘要:本论文叙述了应用单片机AT89C51构成的智能温度计主要的功能、硬件的组成和软件的设计。该系统的功能是通过温度传感器对温度进行采集,然后通过A/D转换器MC14433进行模数转换,传给单片机进行处理,从而实现温度的实时显示。整个系统结构紧凑、简单可靠、操作灵活、功能强、性能价格比高,较好地满足了现代农业生产和科研的需要。
关键词: 单片机 温度传感器 A/D转换器 实时显示
Abstract
the present paper narrated the application monolithic integrated circuit AT89C51 constitution intelligent thermometer main function, the hardware composition and the software design.This system function is carries on gathering through the temperature sensor to the temperature, then carries on a/d conversion through A/D switch MC14433, passes to the monolithic integrated circuit to carry on processing, thus realization temperature real time display.Overall system structure compact, simple reliable, operation nimble, function strong, performance price scaled height of burst, has satisfied the modern agricultural production and the scientific research need well.
Key word: monolithic integrated circuit temperature sensor A/D switch Real time display383
单片机智能温度计设计
引 言
单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域的应用日益广泛,并且正在逐步取代现有的多片微机应用系统。单片机的潜力越来越被人们所重视。特别是当前用CMOS工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强、能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。而现在单片机在农业上也有了很多的应用。
温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量。测量温度的基本方法是使用温度计直接读取温度。最常见到的测量温度的工具是各种各样的温度计,例如,水银玻璃温度计,酒精温度计,热电偶或热电阻温度计等。它们常常以刻度的形式表示温度的高低,人们必须通过读取刻度值的多少来测量温度。利用单片机和温度传感器构成的电子式智能温度计就可以直接测量温度,得到温度的数字值,既简单方便,又直观准确。
1 智能温度计的基本组成方框
图1—1是智能温度计的基本组成方框。主要由温度传感器,放大器,A/D转换器,单片机控制,LED显示器,电源等组成。温度传感器是把温度转换成电压(或电流)的器件,温度传感器输出电压的大小随温度的高低变化而变化,电压值的变化范围从几个微伏到几个毫伏。不同的温度传感器,输出电压的范围也差别很大。放大器的主要功能是把微弱的温度电压信号放大到(0—2)伏或(0—5)伏的范围内,以便进行A/D转换。A/D转换器把放大后的模拟温度电压信号转换成对应的数字温度电压信号。单片机8051是智能温度计的控制核心,一方面控制A/D转换器实现模拟信号到数字信号的转换,另一方面将采集到的数字温度电压值,经过计算处理,得到相应的温度值,送到LED显示器以数字形式显示测量的温度。LED显示器用于显示测量温度的结果。
图1—1 智能温度计方框图
2 系统硬件组成
图1—2 测量摄氏(℃)温度的电路原理。若
假定 :温度测量范围:0——150℃。摄氏(℃)
温度数字显示: 000.0 或112.8等,十进制小数点后一位。
2.1、温度传感器AD590及其应用
AD590是美国模拟器件公司生产的单片集成两端感温电流源。它的主要特性如下:
2.1.1 流过器件电流的微安数等于器件所处环境温度的热力学温度(开尔文)度数。即
IT/T=1µA/K
式中的IT为流过器件(AD590)的电流,单位µA,T为温度,单位为K。
2.1.2 AD590的测温范围为-55 ℃ -+150 ℃。
2.13 AD590的电源电压范围为4V~30V。电源电压从4V到6V变化,电流IT变化1µA,相当于温度变化1K。AD590可以承受44V正相电压和20 V反相电压。因而器件反接也不会损坏器件。
2.1.4 输出电阻为710MΩ。
2.1.5 精度高。
AD590在出厂以前已经校对,精度高。因为流过AD590的电流于热力学温度成正比,如两个电阻之和为1K,温度变化1°C,那么输出电压Vo变化为1mV/K。但由于AD590
的增益有偏差,电阻也有误差,调整的方法与对P-N结温度传感器调整的方法相同。即,把AD590放于冰水混合物中,调整电位器,使Vo=273.2mV。或在室温下,例如25℃条件下调整电位器使Vo=273.2+25=298.2(mV)。但这样调整只可以保证0 ℃或25 ℃附近有较高精度。
图中用电位器R1调零点,用R2调增益,方法如下:在0 oC时调整W1使输出Vo=273.2mV。然后在100 ℃时调W2使Vo=373.2mV。然后反复多次,直至0 ℃时Vo=273.2mV,100 ℃时Vo=373.2mV为止。最后在室温下进行校验。例如,若室温为25℃,那么Vo应为298.2mV。0 ℃和100 ℃环境的产生方法:冰水混合物是0 ℃的环境,沸水为100 ℃环境。
2.2 放大器
放大器由运算放大器A组成,常用的芯片有:LF335,LF336,CA3140等,主要功能是把模拟的温度电压信号放大到A/D转换器要求的输入电压范围。A/D转换器MC14433要求,模拟输入电压的范围为:0——2V。W3的作用是抵消温度传感器AD590在摄氏0℃时产生的温度电压Vo=273.2mV,使放大器A的输出电压为0.0V。放大器A的放大倍数选择为10,保证温度在0—150℃范围内变化,而放大器的输出电压在0—1。50V的范围内。电位器W2用于调整放大器的放大倍数。
2.3 A/D转换器MC14433
A/D转换器由双积分型3又1/2位A/D转换器MC14433来完成。因为温度的变化具有惯性,变化缓慢,MC14433的转换速度完全可以满足温度测量的要求。
MC14433的方框图和引脚如图3所示,它是单片CMOSA/D转换器,它采用双积分原理实现A/D转换。因为转换后的数字量有三位十进制数,而最高位只能输出0或1,故称为3又1/2位A/D转换器.该电路需要外接积分电阻R和电容C,外接失调补偿电容C。该电路具有自动调零、自动极性转换功能,它精度高、功耗低、使用方便并能与微机或其他数字电路兼容。它广泛用于数字面板表、数字万用表、数字量具和遥控遥测系统。若
图1—3 MC14433的方框图和引脚
单片机智能温度计设计
引脚引线功能如下:
G 被测电压VX和参考电压VR的模拟接地端
VR 外接参考电压端(+2V或+200Mv)
VX 被测电压输入端
R1,R1/C1,C1 外接积分电阻R1和积分电容C1元件端。外接元件典型值:当量程为2V时,C = 0.1μF,R = 470kΩ;当量程为200mV时,C1 = 0.1μF, R1 = 27kΩ
C01,C02 外接失调电容C0端。C0典型值为0.1μF
DU 数据显示控制端。当DU和EOC(引脚14)连接时,每次A/D转换都输出
CLKI,CLKO 时钟振荡器外接电阻RC端, RC的典型值为470kΩ,时钟频率随RC增加而下降
VEE 模拟负输入端。典型值为-5V
VSS 数字地,除CLKO端外所有输出端的低电平基准。当VSS与VAG相连(即数字地和模拟地相连)时,输出电压幅度为VAG~VDD(0V~+5V);当VSS与VEE(-5V)相连,输出电压幅度为VEE~VDD(-5V~+10V)。实际应用时一般是VSS与VAG相连
EOC 转换结束控制端(输出)。每当一个A/D转换周期结束,EOC端输出一个宽度为时钟周期1/2宽度的正脉冲
过量程标志输出端。平时为高电平。当|VX|﹥VR时(被测电压输入绝对值大于参考电压), 端输出低电平
DS1~DS4 多路选通脉冲输出端,对应DS1千位,对应DS4个位。每个选通脉冲宽度为18个时钟脉冲,两个相邻脉冲之间间隔为2个时钟周期
Q0~Q3 BCD码数据输出线。其中为Q0最低位,Q3为最高位。当DS2 、DS3和 DS4选通期间,Q0~Q3除了表示千位的0或1外,还表示了转换值的正负极性和欠量程还是过量程
VDD 正电源端。典型值为+5V
MC14433的外部连接电路
尽管MC14433外部连接元件很少,为使其工作于最佳状态,也必须注意外部电路的连接和外接元件的选择,其实际连接电路如图11—18所示。为了提高电源抗干扰的能力,正、负电源分别通过去耦电容0.047μF、0.02μF与VSS(VAG)相连。
MC14433和单片机8051采用查询方式连接。MC14433的多路选通脉冲输出端和BCD码数据输出端Q0--Q7和单片机的P0口连接。EOC端和8051的/INT0连接,单片机8051通过不断查询/INT0端的状态,了解MC14433的每次A/D转换是否结束,在A/D转换结束后,经P0口读取A/D转换的结果,存入CPU内部的输入数据缓冲区。MC1403是高精度的基准源(2.5V),它的输出经10K可调电位器,调整到2.0V提供MC14433的基准电压。
2.4 LED显示器
LED显示器由4位共阴极LED显示器组成,采用动态分时扫描方式。采用4位共阴极LED示器使为了保证温度超过100℃时,测量结果仍能保持在小数点后一位显示,例如:110.4℃,提高测量显示精度。
共阴极LED显示器的阳极和单片机CPU的P1口连接,显示段码由CPU通过P1口传送到LED显示器的阳极。位扫描码由单片机8051的P2口低四位输出,经同相驱动器传送到LED显示器的阴极,选通LED显示器的数位,P2.3,P2.2,P2.1,P2.0输出电平为‘0111’时,选通左边的第一位数字,P2.3,P2.2,P2.1,P2.0输出电平为‘1011’时,选通左边的第二位数字,P2.3,P2.2,P2.1,P2.0输出电平为‘1101’时,选通左边的第三位数字,P2.3,P2.2,P2.1,P2.0输出电平为‘1110’时,选通左边的第四位数字。
2.5 系统核心单片机部分---闪电存储器型器件AT89C51
单片机AT89C51有内部RAM,可以作为各种数据区使用,内部闪电存储器存放智能温度计的控制程序。它的主要功能是控制MC14433,实现温度的数字值采集,完成温度的数字采集值到对应数字温度的转换计算,并把计算的数字温度转换相应的显示段码,控制LED显示器以动态扫描方式进行温度显示。
AT89系列单片机是ATMEL公司生产的。这是当前最新的一种电擦写8位单片机,与MCS-51系列完全兼容,有超强的加密功能,可完全替代87C51/52和8751/52。它物美价廉,深受用户欢迎。
与87C51相比,AT89系列的优越性在于,其片内闪电存储器的编程与擦除完全用电实现;数据不易挥发,可保存10年;编程/擦除速度快,全4K字节编程只需时3s,擦除时间约用10ms;AT89系列了实现在线编程;也可借助电话线进行远距离编程。
AT89C51是一种低功耗、高性能内含4K字节闪电存储器(Flash Memory)的8位CMOS微控制器。这种器件系以ATMEL高密度不挥发存储技术制造,与工业标准MCS-51指令系统和引脚完全兼容。片内闪电存储器的程序代码或数据可在线写入,亦可通过常规的编程器编程。例如,MP-100这样一种经济型的编程器,它支持通用EPROM等各种存储器、PAL、GAL以及INTEL、ATMEL和PHILIPS等各公司的全系列51单片机的编程。ME5103和ME5105仿真器支持AT89系列所有器件的调试、仿真和编程。
AT89C51具有下列主要性能:
. 4KB可改编程序Flash存储器
(可经受1,000次的写入/擦除周期)
.全静态工作:0Hz~24MHz
.三级程序存储器保密
.128 X 8字节内部RAM
.32条可编程I/O线
.2个16位定时器/计数器
.6个中断源
.可编程串行通道
.片内时钟振荡器
另外,AT89C51是用静态逻辑来设计的,其工作频率可下降到0 Hz,并提供两种可用软件来选择的省电方式——空闲方式(Idle Mode)和掉电方式(Power Down Mode)。在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统都继续工作。在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,只保存片内RAM中的内容,直到下一次硬件复位为止。
2.5.1 主电源引脚
(a).Vcc 电源端
(b).GND 接地端
2.5.2 外接晶体引脚XTAL1和XTAL2
(a).XTAL1 接外部晶体的一个引脚。在单片机内部,它是构成片内振荡器的反相放大器的输入端。当采用外部振荡器时,该引脚接收振荡器的信号,既把此信号直接接到内部时钟发生器的输入端。
(b).XTAL2 接外部晶体的另一个引脚。在单片机内部,它是上述振荡器的反相放大器的输出端。采用外部振荡器时,此引脚应悬浮不连接。
2.5.3 控制或与其它电源复用引脚RST、ALE//PROG、/PSEN和/EA/Vpp
(a).RES 复位输入端。当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。
(b).ALE//PROG 当访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率(此频率为振荡器频率的1/6)周期性地出现正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是:每当访问外部数据存储器时,将跳过一个ALE脉冲。在对Flash存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。
如果需要的话,通过对专用寄存器(SFR)区中8EH单元的D0位置数,可禁止ALE操作。该位置数后,只有在执行一条MOVX或MOVC指令期间,ALE才会被激活。另外,该引脚会被微弱拉高,单片机执行外部程序时,该设定禁止ALE位无效。
(c). /PSEN 程序存储允许(/PSEN)输出是外部程序存储器的读选通信号。当AT89C51/LV51由外部程序存储器取指令(或常数)时,每个机器周期两次/PSEN有效(既输出2个脉冲)。但在此期间内,每当访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(d)./EA/Vpp 外部访问允许端。要使CPU只访问外部程序存储器(地址为0000H~FFFFH),则/EA端必须保持低电平(接到GND端)。然而要注意的是,如果保密位LB1被编程,复位时在内部会锁存/EA端的状态。
当/EA端保持高电平(接Vcc端)时,CPU则执行内部程序存储器中的程序。
在Flash存储器编程期间,该引脚也用于施加12V的编程允许电源Vpp(如果选用12V编程)。
2.2.4 输入/输出引脚 P0.0~ P0.7、P10.~P1.7、P2.0~ P2.7 和P3.0~P3.7
(a).P0端口(P0.0~ P0.7) P0是一个8位漏极开路型双向I/O端口。作为输出口用时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。
单片机智能温度计设计
在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。
在Flash编程时,P0端口接收指令字节;而在验证程序时,则输出指令字节。验证时,要求外接上拉电阻。
(b).P1端口(P1.0~ P1.7) P1是一个带有内部上拉电阻的8位双向I/O端口。P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。作输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在对Flash编程和程序验证时,P1接收低8位地址。
(c).P2端口(P2.0~P2.7) P2是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在访问外部程序存储器和16位地址的外部数据存储器(如执行MOVX @DPIR指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行MOVX @RI指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中P2寄存器的内容),在整个访问期间不会改变。
在对Flash编程和程序验证期间,P2也接收高位地址和一些控制信号。
(d).P3端口(P3.0~P3.7) P3 是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在AT89C51中,P3端口还用于一些专门功能,这些兼用功能见表1
表 1—1
端口引脚 兼 用 功 能 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 (外部数据存储器读选通)
在对Flash编程和程序验证时,P3还接收一些控制信号。
2.2.5 Flash存储器的编程和程序校验:
AT89C51单片机内部有一个4K字节的Flash PEROM。这个Flash存储阵列通常是处于已
擦除状态(既存储单元的内容为FFH),随时可对它进行编程。编程接口可接收高电压(12V)或低电压(Vcc)的允许编程信号。低电压编程方式可很方便地对AT89C51内的用户系统进行编程;而高电压编程方式则可与通用的EPROM编程器兼容。
AT89C51的程序存储器阵列是采用字节写入方式编程的,既每次写入一个字节。要对片内的PEROM程序存储器写入任何一个非空字节,都必须用片擦除方式将整个存储器的内容清除。2.2.6 对Flash存储器编程
编程前,必须按照表2和图5建立好地址、数据和相应的控制信号。编程单元的地址加在P1端口和P2端口的P2.0~P2.3(11位地址为0000H~0FFFH),数据从P0端口输入。引脚P2.6、P2.7和P3.6、P3.7的电平选择见表2。/PSEN应保持低电平,而RST应保持高电平。/EA/VPP是编程电源的输入端,按要求加入编程电压。ALE//PROG端输入编程脉冲(应为负脉冲信号)。编程时,采用4~20 MHz的振荡器。对AT89C51编程的步骤如下:
(a)在地址线上输入要编程单元的地址。
(b)在数据线上输入要写入的数据字节。
(c)激活相应的控制信号。
(d)在采用高电压编程方式时,将/EA/VPP端的电压加到12V。
(e)每对Flash存储阵列写入一个字节或每写入一个程序加密位,加一个ALE//PROG编程脉冲。
改变编程单元的地址和要写入的数据,重复步骤a~e,直到全部文件编程完毕。
每个字节写入周期是自动定时的,通常不大于1.5ms。
表 1—2 Flash编程方式若图片无法显示请联系站长QQ3710167
2.2.7 数据查询方式
AT89C51单片机用数据查询方式来检测一个写周期是否结束。在一个写周期期间,如果想读出最后写入的哪个字,则读出数据的最高位(P0.7)是原来写入字节最高位的反码。写周期一旦完成后,有效的数据就会出现在所有输出端上,这时可开始下一个写周期。一个写周期开始后,可在任何时间开始进行数据查询。
单片机智能温度计设计若
图1—5 Flash编程 图 1—6 程序的校验
图1—7 Flash编程和校验的波形(高电平编程方式)
2.2.8 准备就绪/忙信号
字节编程的过程也可通过RDY//BSY输出信号来监视。在编程期间,当ALE变为高电平后,P3.4(RDY//BSY)端的电平被拉低,表示忙(正在编程)状态。编程完毕后,P3.4的电平变高表示就绪状态。
2.2.9 程序的校验
如果加密位LB1和LB2没有被编程,那么就可以对AT89C51内部已编好的程序进行校验。这时采用图6所示的引脚接法。程序存储器的地址仍由P1端口和P2端口的P2.0~P2.3输入,数据由P0端口输入。P2.6、P2.7和P3.6、P3.7的电平见表1-4。/PSEN保持低电平,而ALE、/EA和RST保持高电平。校验时,在P0端口上要求外接约10KΩ左右的上拉电阻。
程序加密位不能直接校验。加密位的校验可通过观察它们的功能是否被允许来进行。
Flash存储器编程和程序校验时的时序图见图1—7(高电平编程)和图1—8(低电压编程)。
图 1—8 Flash编程和校验的波形(低电压编程方式)
2.6 其它
为增强系统在工作现场的抗干扰能力,在硬件设计方面采取了一系列措施,例如,信号的输入/输出采用电平转换、光电隔离;正确配置接地系统,处理好共地信号;强电信号和弱电信号分开走线,传输线尽可能使用双绞线和屏蔽电缆;设置WDT时钟监视电路,自动监视CPU运行状态,出现故障自动处理,同时具有硬件自诊断功能,避免“死机”现象发生等等。
单片机智能温度计设计
3 智能温度计的流程图
在软件设计上,采用了良好的人机交互环境,可通过选择功能热键执行特定的程序,如任意设定检测参数值,选择显示方式和控制模式等,还可设置优先权直接进行人为干预以便达到灵活控制的目的,如果某一检测通道被键设置成关闭,那么不管此通道外部情况如何,系统均不作任何反应。
为了提高系统的抗干扰能力,除硬件上采取了相应的措施外,在软件设计中也采取了若干措施,如在数据采集时采用数字滤波;采取指令冗余设计,在程序中适当地插入空操作指令,对一些重要的指令重写等等。从而有效地提高了系统运行的可靠性,使其检测控制工作及时准确、安全稳定,达到良好的环境模拟控制性能要求。
图9是智能温度计的流程图。因为智能温度计的控制和计算相对简单,由该流程方框图可见,该主程序是循环线性结构。在初始化时,清除内部RAM,设定标志位和标志单元,设置堆栈指针,检测LED显示器工作是否正常等。
它主要包括了下述一些子程序:
(1)从A/D转换器MC14433读取温度数字电压子程序:查询A/D转换状态,一旦本次A/D转换结束,CPU将温度电压的BCD码数字值送到RAM中的输入缓冲区存放。
(2)温度电压数字值到温度数字转换子程序;将缓冲区中的温度电压数字BCD码转换为实际的温度十进制数字。
(3)温度数字到LED显示段码转换子程序:把温度十进制数字转换成相应的LED显示段码,存放在显示段码缓冲区供LED显示器显示传送子程序
(4) LED显示段码到LED显示器显示传送和动态扫描子程序
(5) BCD码加,减,乘,除子程序;
(6) BCD码在缓冲器间传送子程序;
开始 CPU 初始化,设堆栈指针,清除RAM缓冲区,初始化LED显示器,显示8888一秒,调用MC14433的A/D转换程序,对温度进行采样,送LED显示器,显示当前温度
调用MC14433的A/D转换子程序,将温度的电压数字值存放到内部A/D输入数据缓冲区
调用A/D输入数字值到数字温度转换子程序,将数字温度电压值转换为其相应的温度数字,存放到数字温度的缓冲区
调用送LED显示器显示子程序,将数字温度缓冲区的内容变换为相应的LED显示段码,然后调用动态扫描子程序,将段码送LED显示器显示
(7) 其它专用子程序;
图 9 智能温度计的流程图若
4 系统主程序
系统主程序:
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP SUB
ORG 0100H
MAIN: MOV SP,#40H
MOV A,#78H
MOV R7,#09H
MOVX A,@DPTR
MOV R0,A
CLR C
SUBB A,#34H
JNC LOOP1
CLR C
MOV A,R0
SUBB A,#3AH
JC LOOP
MOV A,R0
ACALL TEMP
LOOP:MOV DPTR,#EF00H
MOV R1,#0F8H
MOV A,#33H
MOVX @R1,A
MOV A,R0
MOVC A,@A+DPTR
DEC R1 www.lwfree.cn
MOVX @R1,A
MOVX @R1,A
INC R0
MOV A,R2
CLR C
RRC A
MOV R2,A
MOV A,#00H
MOV DPTR,#00F8H
MOVX @DPTR,A
AJMP GO
LOOP1: MOV P1,#8FH
AJMP GO
LOOP2: MOV P1,#0BFH
GO : POP DPH
POP DPL
POP ACC
POP PSW
RETI
END
TEMP: MOV DPTR,TABLE
MOV A,R0
MOV B,#04H
CLR C
MUL AB
JNC NOO
INC DPH
NOO: MOVC A,@A+DPTR
MOV 80H,A
INC DPTR
MOVC A,@DPTR
MOV 81H,A
AJMP LOOP
ORG 0300H
TAB: DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 83H
MAIN:MOV 20H,#0
MOV 21H,#0
MOV R0,#3CH
MOV R1,#12
LCALL CLEAR
SETB PT0
ML2: NOP
NOP
NOP
MOV A,P1
CJNE A,#0FBH,ML3
AJMP MAIN
ML3: MOV A,PIN1
INC A
SUBB A,PIN3
CJNE A,#0,ML4
AJMP TEST0
ML4: JC TEST0
JNB E1,TEST0
AJMP COMPP
TEST0:MOV PIN3,#0
MOV A,P1
CJNE A,#0FDH,TEST
AJMP EXIT
TEST:MOV A,P1
CJNE A,#0FFH,TEST1
EXIT:MOV R0,#79H
MOV R1,#50H
HEX: ACALL HEXASC
MOV R2,#6
MOV R0,#5AH
ACALL INI
CLR FLAG3
SJMP HERE
COMPP:AJMP COMP
SECOO:JNB P1.5,SSECO
AJMP SECO
SSECO:AJMP SEC
MINII:JNB P1.5,MMINI
AJMP MINI
MMINI:AJMP MIN
HOURR:JNB P1.5,HHOUR
AJMP HOUR
HHOUR:AJMP HOU
TEST1:JNB P1.0,SETT
TEST2:SETB EA
JNB P1.4,EXIT
JNB P1.5,DEAL
AJMP TEST
SETT:CLR EA
MOV C,P1.4
MOV F0,C
JNB P1.1,SECOO
JNB P1.2,MINII
JNB P1.3,HOURR
AJMP TEST2
DEAL:SETB E1
JNB P1.4,OVER
MOV R0,#49H
MOV R1,#6
ACALL CLEAR
MOV B,#3
MOV A,PIN1
MUL AB
ADD A,R4
MOV PIN,A
MOV A,PIN1
CJNE A,#4,AAA
MOV PIN1,#0
MOV PIN2,#3EH
MOV PIN,#3CH
AAA: JNB P1.4,OVER
JNB P1.1,SECOO
JNB P1.2,MINII
JNB P1.3,HOURR
AJMP AAA
OVER:SETB E2
INC PIN1
MOV R2,#6
MOV R0,#3AH
MOV R1,PIN1
ACALL INI
MOV R0,#49H
MOV R2,#3
单片机智能温度计设计
MOV R1,PIN
ZIP: MOV A,@R0
MOV @R1,A
INC R0
MOV A,@R0
SWAP A
ORL A,@R1
MOV @R1,A
INC PIN
INC R0
INC R1
DJNZ R2,ZIP
AJMP EXIT
COMP:MOV A,PIN2
CJNE A,#4AH,J
AJMP OVR
J: MOV R0,PIN2
MOV R1,#7EH
MOV R2,#3
JJJ:MOV A,@R0
ANL A,#0F0H
SWAP A
XRL A,@R1
JNZ ENDD
DEC R1
MOV A,@R0
ANL A,#0FH
XRL A,@R1
JNZ ENDD
DEC R1
DEC R0
DJNZ R2,JJJ
SETB FLAG2
INC PIN3
AJMP TEST
ENDD:MOV A,PIN2
ADD A,#3
MOV PIN2,A
AJMP COMP
OVR: MOV PIN2,#3EH
AJMP TEST
HOUR:ACALL DELY
MOV R0,#7EH
JNB F0,SUB1
ACALL DAAD1
MOV A,R2
XRL A,#24H
JNZ ML0
ACALL CLR0
AJMP ML0
MINI:ACALL DELY
MOV R0,#7CH
JNB F0,SUB1
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ ML0
ACALL CLR0
AJMP ML0
SECO:ACALL DELY
MOV R0,#7AH
JNB F0,SUB1
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ ML0
ACALL CLR0
ML0: MOV R0,#79H
MOV R1,#50H
ACALL HEXASC
MOV R2,#6
MOV R0,#5AH
ACALL INI
AJMP SETT
SUB1:SETB F0
ACALL SUB
AJMP ML0
CLEAR:MOV @R0,#0
INC R0
DJNZ R1,CLEAR
RET
HOU: ACALL DELY
SETB E0
MOV R0,#4EH
ACALL DAAD1
MOV A,R2
XRL A,#24H
JNZ ML00
ACALL CLR0
AJMP ML00
MIN: ACALL DELY
SETB E0
MOV R0,#4CH
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ ML00
ACALL CLR0
AJMP ML00
SEC: ACALL DELY
SETB E0
MOV R0,#4AH
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ ML00
ACALL CLR0
ML00:MOV R0,#49H
MOV R1,#30H
ACALL HEXASC
MOV R2,#6
MOV R0,#3AH
MOV R1,PIN1
INC R1
ACALL INI
AJMP AAA
DELY:MOV R1,#0FFH
A1: MOV R2,#0FFH
LOOP:NOP
NOP
NOP
DJNZ R2,LOOP
DJNZ R1,A1
RET
PITO:PUSH PSW
PUSH 0E0H
PUSH DPH
PUSH DPL
SETB PSW.3
MOV A,P1
MOV TL0,#01H
MOV TH0,#1FH
CJNE A,#0FDH,SSS
MOV TL0,#0EDH
MOV TH0,#0FBH
SSS: JNB P1.5,GETNUM
DDD: MOV A,2FH
DEC A
MOV 2FH,A
JNZ RET0
MOV 2FH,#10H
MOV R0,#7AH
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ RET0
ACALL CLR0
MOV R0,#7CH
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ RET0
ACALL CLR0
单片机智能温度计设计
MOV R0,#7EH
ACALL DAAD1
MOV A,R2
XRL A,#24H
JNZ RET0
ACALL CLR0
RET0:SETB TR0
POP DPL
POP DPH
POP 0E0H
POP PSW
RETI
GETNUM:
JB FLAG1,EE
MOV R1,#49H
MOV R2,#6
CO: MOV @R1,#0
INC R1
DJNZ R2,CO
SETB FLAG1
EE: AJMP DDD
DAAD1:MOV A,@R0
DEC R0
SWAP A
ORL A,@R0
ADD A,#1
DA A
MOV R2,A
ANL A,#0FH
MOV @R0,A
MOV A,R2
INC R0
ANL A,#0F0H
SWAP A
MOV @R0,A
SETB FLAG3
RET
SUB: DEC R0
DEC @R0
CJNE @R0,#0FFH,RET2
INC R0
CJNE @R0,#0,AA
DEC R0
MOV @R0,#0
RET
AA: DEC R0
MOV @R0,#9
INC R0
DEC @R0
CJNE @R0,#0FFH,RET2
MOV @R0,#0
SETB FLAG3
RET2: RET
SUB0: DEC R0
DEC @R0
CJNE @R0,#0FFH,RET2
INC R0
CJNE @R0,#0,BB
DEC R0
MOV @R0,#0
RET
BB: DEC R0
MOV @R0,#9
INC R0
DEC @R0
CJNE @R0,#0FFH,RET3
MOV @R0,#0
SETB FLAG3
RET3: RET
CLR0: CLR A
MOV @R0,A
DEC R0
MOV @R0,A
SETB FLAG3
RET
FUL0: MOV A,#6
MOV @R0,A
DEC R0
CLR A
MOV @R0,A
SETB FLAG3
RET
INI: ORL TMOD,#20H
MOV TH1,#0fdH
MOV TL1,#0fdH
MOV SCON,#50H
MOV PCON,#80H
SETB TR1
MOV A,#0CH
MOV SBUF,A
JNB TI,$
CLR TI
MOV R3,#2
REC2: MOV R2,#2
REC: MOV A,@R0
SND: MOV SBUF,A
JNB TI,$
CLR TI
DEC R0
DEC R0
DJNZ R2,REC
MOV A,#3AH
MOV SBUF,A
JNB TI,$
CLR TI
DJNZ R3,REC2
MOV R2,#2
REC1: MOV A,@R0
MOV SBUF,A
JNB TI,$
CLR TI
DEC R0
DEC R0
DJNZ R2,REC1
JB E0,REE
AJMP JJ
RET
REE: MOV SBUF,#24H
JNB TI,$
CLR TI
剩余代码请联系QQ3710167,本论文免费
单片机智能温度计设计
总结和体会
本课程设计叙述了智能温度计的设计,包括硬件组成和软件的设计,该系统在硬件设计上主要是通过温度传感器对温度进行采集,把温度转换成变化的电压,然后由放大器将信号放大,通过A/D转换器,MC14433将模拟温度电压信号转化为对应的数字温度信号电压。其硬件设计中最核心的器件是单片机89C51,它一方面控制A/D转换器实现模拟信号到数字信号的转换,另一方面,将采集到的数字温度电压值经计算机处理得到相应的温度值,送到LED显示器,以数字形式显示测量的温度。整个系统的软件编程就是通过汇编语言对单片机MT89C51实现其控制功能。整个系统结构紧凑,简单可靠,操作灵活,功能强大,性能价格比高,较好的满足了现代农业生产和科研的需要。
通过本次的设计,参考了大量的资料,让我认识到了单片机功能的强大,让我学到了很多,受益匪浅!
致 谢
在毕业论文接近末尾之时,我要衷心地感谢我们肖伟杰老师,在我整个毕业设计过程中,肖伟杰老师给了我很大的帮助和细心的指导。在一个多月的毕业设计过程中,当我遇到了困难和问题时,当我们需要他的时候,肖伟杰老师总是第一时间出现在我们面前,他让我
们学会了以前在课堂上没有的东西。
另外,我还要特别感谢我所有的搭档,是他们给了我巨大的勇气和战胜困难的信心,在毕业设计中我们合作的很愉快,当我们遇到困难时我们一起去探讨和研究,一起去战胜它,大家也一起分享排除问题和困难后的喜悦。
同时大家也发扬我们慷慨激扬精神:特别能吃苦,特别能攻关,特别能战斗,特别能奉献 。
在此我表示真诚的感谢!
参 考 文 献
1李朝青《PC机及单片机数据通信技术》》 [M] 北京航空航天大学出版社,2000
2何立民《单片机应用技术选编》[M] 北京航空航天大学出版社,1993
3周明德《微型计算机硬件软件及其应用》[M] 清华大学出版社。1980
4金伟正.《单线数字温度传感器的原理与应用》[J].电子技术应用2000(6):66~68.
5李广弟.《单片机基础》[M].北京航空大学出版社.1994年6月
6何立民。单片机应用系统设计——系统配置与接口技术.
北京:北京航空航天大学出 版社。 1995
7马明建. 数据采集与处理技术。西安:西安交通大学出版社. 1997