1、信号检测课程设计说明书设设计题目:电子温度计学院:电气工程与信息工程学院专业班级:电子信息科学与技术 2 班学号:09260226姓名:雒建指导老师:任崇玉设计时间:2012 年春目录摘 要 .3一 绪论 .31.1 课题背景与意义 .31.2 课题研究现状 .4二 本课题的设计内容与要求 .5三方案设计: .5四硬件电路设计 .64.1 液晶显示模块 64.2 实时环境温度采集模块 74.3 报警模块 94.4 设置模块 9五硬件仿真图: .9六软件编程 .106.1 总流程图 106.2 汇编语言源程序: 11七仿真 .26八总结,收获,体会: .28九致谢 .28十参考文献: .29附录
2、 .29元件清单 29摘 要随着数字技术的发展和计算机日益广泛的应用,单片机技术在各个领域得到了充分的应用。本设计以AT89C51单片机为设计开发平台,结合DS18B20温度传感器、LCD液晶显示、按键和报警几部分电路,构成了远程温度采集与显示系统。将温度数据送入单片机进行数据处理,具有巡检速度快,扩展性好,成本低的特点。本设计中的温度采集系统充分发挥了AT89C51单片机的特点,结合现有技术,大大降低了电路的设计复杂度,该系统具有温控准确、操控界面良好、稳定性高、抗干扰能力强等优点。本系统能够同时检测4路温度,检测温度的范围为-55+125。本设计采用AT89C51八位单片机实现,单片机软件
3、编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现较简单,安装方便。基于单片机的温度采集系统广泛应用于采用计算机、自动测试、微电子和自动控制等多项技术,不仅具有信号采集方便、简单和灵活性大等优点,而且可以大幅度提高被测温度的技术指标。一 绪论1.1 课题背景与意义在人类的生活环境中,温度扮演着极其重要的角色。无论你在生活在那里,从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说是几乎80%的工业部门都不得不考虑着温度的因素。温度对于工业如此重要,由此推进了温度
4、传感器的发展。传感器主要经历了三个发展阶段:模拟集成温度传感器、模拟集成温度控制器、智能温度传感器。温度传感器的发展趋势:进入21世纪后,温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片机测温系统等高科技的方向迅速发展。自从1976年Intel公司推出第一批单片机以来,80年代的单片机技术进入了快速发展的时期。近年来,随着大规模集成电路的发展,单片机继续朝着快速,高性能的方向发展,从4位、8位单片机发展到16位、32位单片机。单片机主要用于控制,它的应用领域遍及各个行业,大到航天飞机,小至日常生活中的冰箱、彩电,单片机都可以大显其能,单片机在国
5、内的主要的应用领域有三个:第一是家用电器业,例如全自动洗衣机、智能玩具;第二是通讯业,包括手机、电话和BP机等等;第三是仪器仪表和计算机外设制造,例如键盘、软盘、收银机、电表等。除了上述应用领域外,汽车、电子行业在外国也是单片机应用很广泛的一个领域。它成本低、集成度高、功耗低、控制功能多、能灵活的组装成各种智能控制装置,由它构成的智能仪表解决了长期以来测量仪表中的误差的修正、线性处理等问题。在温度采集与显示系统中,用到了自动检测与传感器技术、单片机原理及应用、单片机接口技术、模拟电子技术、数字电子技术等方面的大量知识。检测技术和传感技术是人们为了对被测对象所包含的信息进行定性的了解和定量的掌握
6、所采取的一系列的技术措施。随着人类社会进入信息时代,以信息的获取转换、显示和处理为主要内容的检测技术已经发展成为一门完整的技术学科,在促进生产发展和科学进步的广阔领域内发挥着重要的作用。其主要应用如下:检测技术是产品检验和质量控制的重要手段;检测技术在大型的设备的安全经济运行检测中得到了广泛的应用;检测技术和装置时自动化系统中不可缺少的组成部分;检测技术的完善与发展推动着现代科学的进步;另一方面看,现代化生产和科学技术的发展也不断地对检测技术提出新的要求。它是由传感器、测量电路、显示记录装置组成。传感器在温度测控系统中的应用:目前市场主要存在单点和多点两种温度测温仪表。对于单点测温仪表,主要采
7、用传统的模拟集成温度传感器,其中又以热电阻、热电偶等传感器的测量精度高,测量范围大而得到了普遍的应用。此种产品测温范围大都在-200800之间,分辨率 12 位,最小分辨温度在 0.0010.01 之间。自带 LED 显示模块,显示4 位到 16 位不等。有的仪表还具有存储功能,可存储几百到几千组数据。该类仪表可很好的满足单个用户单点测量的需要。多点温度测量仪表,相对于单点的测量有一定得差距,虽然实现了多路温度的测控,但价格昂贵。基于单片机的温度采集系统广泛应用于采用计算机、自动测试、微电子和自动控制等多项技术,不仅具有信号采集方便、简单和灵活性大等优点,而且可以大幅度提高被测温度的技术指标。
8、1.2 课题研究现状温度采集属于模拟量的采集,也就是数据采集,国内外数据采集领域正在发生着重要的变化。首先,分布式控制应用场合中的智能数据采集系统正在发展。其次,总线兼容型数据采集插件的数量正在增大,与个人计算机兼容的数据采集系统的数量也在增加。数据采集已长时间地被认为与数据记录及其它数据采集系统相等同。在工作时,一些要打印出拷贝,而另一些则把采集的数据馈送给主计算机处理。但是,随着分布式控制在各个领域里越来越普遍的应用,数据采集设备开始同控制设备想结合。近年来,在温度采集方面,利用智能化数字式温度传感器以实现温度信息的在线检测已成为温度监测技术的一种发展趋势。数字化技术推动了信息化的革命,在
9、传感器的期间结构上采用数字化技术,使信息的采集更加方便。例如,对于温度信号采集系统,传统的模拟温度采集器多为铂电阻、铜电阻等。每一个传输线至少有两根导线,带补偿接法需要三根导线。如果对 50 路温度信号进行检测,就需要 100 根导线接到检测端口,然后还要经过电桥电路、信号放大、通道选择、A/D 转换等,才能将温度信号提供给计算机处理。而现在新型的 DS1820 单总线数字温度传感器,采用 3 脚( 或 8 脚) 封装,从 DS1820 读出或写入数据仅需要一根 I/O 口线。用这种智能化数字式传感器的优胜显而易见,而且不用进行模数转换,节省了资源。二 本课题的设计内容与要求本设计以 51 单
10、片机为设计开发平台,主要由 AT89C51 单片机、DS18B20 温度传感器、LCD 液晶显示、数码管、远程通信、按键和报警电路几部分组成。远程通信采用 RS-485串行通讯的标准,通过 DS18B20 进行现场总线的温度采集,然后将温度数据送入单片机进行数据处理,具有巡检速度快,扩展性好,成本低的特点。本设计采用 AT89C51 八位单片机实现,单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现较简单,安装方便。该系统有:单片机、显示器、键盘、串口通讯、液晶显示等以及整个系统中所需要的电源组成的一个系统,对于超过此限的温度数据将产生报警信号。设计温度
11、采集系统充分发挥了 AT89C51 单片机的特点,结合现有技术,大大降低了电路的设计复杂度,该系统具有温控准确、操控界面良好、稳定性高、抗干扰能力强等优点。温度采集系统的设计必将给生产生活带来一定的飞跃,大大促进了生产的需要,在以后的发展中更进一步提高效率。本设计通过 MCS-51 单片机制作一台数字显示的电子温度计。要求如下1. 选择 DS18B20 数字温度传感器设计一电子温度计;2. 设计通过 proteus 软件和 keil C51 软件仿真验证;3. 测量范围:初始测温范围 050。测温分辨率 0.5;并能通过键盘设置温度的上下限。4. 利用 LCD1602 显示测量值,并具有温度越
12、限报警功能。三方案设计:采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用52 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。该系统利
13、用AT89C51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。系统框图如图 3.3所示图 3.3 DS18B20温度采集显示系统框图从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。方案二
14、的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。其工作过程为:单片机定时采集温度传感器所感应到的被测对象的表面温度,并将采集到温度数据显示在数码管上,同时通过串口传送到计算机。计算机收到单片机传送来的温度数据,在显示屏上显示,同时与计算机软件设置的告警温度值相比较,若高出,则在屏幕上进行告警提示,同时通过串口向单片机发送告警指令,单片机收到指令后,控制蜂鸣器发音,进行告警提示。四硬件电路设计本系统以 AT89S52 单片机为控制核心,通过 DS18B20 通信获取实时环境温度,并将得到的数据通过 1602 液晶显示出来,同时通过相应的按键调整相应的值。因此
15、本设计可分为一下模块:显示模块、实时环境温度采集模块、报警模块、设置模块。下面对各个模块逐一进行论证分析:4.1 液晶显示模块采用 1602 液晶组成本设计的显示模块。1602 液晶也叫 1602 字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个 5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用。1602 的驱动电路带有 11 条指令,可以很方便的控制液晶的现实效果如:清屏、左移右移、光标显示。而且 1602 显示的字符在下一条指令为到来之前不会改变,也就是能够
16、维持显示的字符,1602 液晶占用的系统资源也少。1602 液晶功耗较小可直接与单片机接口相接,电源直接与电源电路相接,使用单片机的 P0 口和 P2 口与 1602 进行通信。(2)1602 相应功能特性介绍 +5V 电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有 80 字节显示数据存储器 DDRAM 内建有 160 个 5X7 点阵的字型的字符发生器 CGROM 8 个可由用户自定义的 5X7 的字符发生器 CGRAM(3)1602 引脚介绍4.2 实时环境温度采集模块DS18B20 是 美 国 DALLAS 公 司 生 产 的 数
17、字 温 度 传 感 器 , 采 用 单 总 线 的 接 口 方式 与 微 处 理 器 连 接 时 仅 需 要 一 条 口 线 即 可 实 现 微 处 理 器 与 DS18B20 的 双 向 通 讯 。 单 总 线 具 有 经 济 性 好 , 抗 干 扰 能 力 强 , 适 合 于 恶 劣 环 境 的 现 场 温 度 测 量 , 使 用 方 便 等 优点 , 使 用 户 可 轻 松 地 组 建 传 感 器 网 络 , 为 测 量 系 统 的 构 建 引 入 全 新 概 念 。 测 量 温 度范 围 宽 , 测 量 精 度 高 , 在 使 用 中 不 需 要 任 何 外 围 元 件 , 支 持 多
18、 点 组 网 功 能 多 个 DS18B20 可 以 并 联 在 惟 一 的 单 线 上 , 实 现 多 点 测 温 , 供 电 方 式 灵 活 DS18B20 可 以通 过 内 部 寄 生 电 路 从 数 据 线 上 获 取 电 源 。 因 此 , 当 数 据 线 上 的 时 序 满 足 一 定 的 要 求 时 ,可 以 不 接 外 部 电 源 , 从 而 使 系 统 结 构 更 趋 简 单 , 可 靠 性 更 高 。 因 此 非 常 适 合 本 系 统 使 用。DS18B20 特性介绍DS18B20 单线数字温度传感器,即“一线器件” ,其具有独特的优点: ( 1 )采用单总线的接口方式
19、与微处理器连接时 仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。 测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 + 125 ; 在 -10+ 85C 范围内,精度为 0.5C 。 在使用中不需要任何外围元件。 支持多点组网功能 多个 DS18B20 可以并联在惟一的单线上,实现多点测温。 供电方式灵活 DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而
20、 使系统结构更趋简单,可靠性更高。 测量参数可配置 DS18B20 的测量分辨率可通过程序设定 912 位。 负压特性 电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 掉电保护功能 DS18B20 内部含有 EEPROM ,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。 DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。(3) DS18B20 管脚介绍DS18B20 的管脚排列1.GND 为电源 地;2.DQ 为数字信号输入输出 端;3.VDD 为外接供电电源输入端,在寄生电源接
21、线方式时接地; 4.3 报警模块此模块采用无源蜂鸣器实现,只要编写相应的程序即可实现发出不同频率的声音。4.4 设置模块因设置模块只需编写相应的程序外加相应的按键。五硬件仿真图:连接好硬件电路图如下:k3调 整K2调 整K1查 看K4确 定XTAL218XTAL119ALE3031PSN29RST9P0./AD0390.1/138P0.2/AD2370.3/336P0.4/AD4350.5/534P0.6/AD630.7/732P1.011.2P1.231.34P1.451.56P1.671.78P3.0/RXD103.1/T1P3.2/IN0123./IT113P3.4/014P3.7/RD
22、173.6/W163.5/T115P2.7/A1528P2.0/A8212.1/92P2./A10232.3/124P2.4/A12252.5/13262.6/1427U1AT89C51X1FREQ=12MHzC13PF C23PFR210k C310uF4.1DQ2VC3GN1U2DS18B20D71463D5124D31029D1807E6RW5S4VS1D2VE3LCD1LM016L234567891RP1RESPACK-8LS1SOUNDER六软件编程6.1 总流程图开 始DS18B20采 样AT89C51进 行 数 据 分 析是 否 超 限送 液 晶 显 示报 警 电 路设 置 报
23、警 标 志累 加是 否 采 样 160次 NY调 出 数 据 超 限温度采集流程图开 始DS18B20采 样AT89C51进 行 数 据 分 析累 加是 否 采 样 160次 NY返 回键盘扫描流程图开 始有 键 闭 合 否调 用 延 时 子 程 序有 键 闭 合 否判 断 闭 合 键 号 -栈闭 合 键 释 放 否输 入 键 号NNNYYY返 回6.2 汇编语言源程序:TEMP_ZH EQU 24H ;实测温度值存放单元TEMPL EQU 25H TEMPH EQU 26H TEMP_TH EQU 27H ;高温报警值存放单元TEMP_TL EQU 28H ;低温报警值存放单元TEMPHC
24、EQU 29H ;正、负温度值标记TEMPLC EQU 2AHTEMPFC EQU 2BH K1 EQU P1.4 ;查询按键K2 EQU P1.5 ;设置/调整键K3 EQU P1.6 ;调整键K4 EQU P1.7 ;确定键BEEP EQU P3.7 ;蜂鸣器RELAY EQU P1.3 ;指示灯LCD_X EQU 2FH ;LCD 字符显示位置LCD_RS EQU P2.0 ;LCD 寄存器选择信号LCD_RW EQU P2.1 ;LCD 读写信号LCD_EN EQU P2.2 ;LCD 允许信号FLAG1 EQU 20H.0 ;DS18B20 是否存在标志KEY_UD EQU 20H.
25、1 ;设定按键的增、减标志DQ EQU P3.3 ;DS18B20 数据信号ORG 0000HLJMP MAINORG 0030HMAIN: MOV SP,#60HMOV A,#00HMOV R0,#20H ;将 20H2FH 单元清零MOV R1,#10HCLEAR: MOV R0,AINC R0DJNZ R1,CLEAR LCALL SET_LCDLCALL RE_18B20 START: LCALL RST ;调用 18B20 复位子程序JNB FLAG1,START1 ;DS1820 不存在LCALL MENU_OK ;DS1820 存在,调用显示正确信息子程序MOV TEMP_TH,
26、#032H ;设置 TH 初值 50 度MOV TEMP_TL,#00H ;设置 TL 初值 0 度LCALL RE_18B20A ;调用暂存器操作子程序LCALL WRITE_E2 ;写入 DS18B20LCALL TEMP_BJ ;显示温度标记JMP START2START1: LCALL MENU_ERROR ;调用显示出错信息子程序LCALL TEMP_BJ ;显示温度标记SJMP $START2: LCALL RST ;调用 DS18B20 复位子程序JNB FLAG1,START1 ;DS18B20 不存在MOV A,#0CCH ;跳过 ROM 匹配命令LCALL WRITEMOV
27、 A,#44H ;温度转换命令LCALL WRITELCALL RSTMOV A,#0CCH ;跳过 ROM 匹配LCALL WRITE MOV A,#0BEH ;读温度命令LCALL WRITELCALL READ ;调用 DS18B20 数据读取操作子程序LCALL CONVTEMP ;调用温度数据 BCD 码处理子程序LCALL DISPBCD ;调用温度数据显示子程序LCALL CONV ;调用 LCD 显示处理子程序LCALL TEMP_COMP ;调用实测温度值与设定温度值比较子程序LCALL PROC_KEY ;调用键扫描子程序SJMP START2 ;循环;* 键扫描子程序 *
28、PROC_KEY:JB K1,PROC_K1 LCALL BEEP_BLJNB K1,$MOV DPTR,#M_ALAX1MOV A,#1LCALL LCD_PRINTLCALL LOOK_ALARMJB K3,$LCALL BEEP_BLJMP PROC_K2PROC_K1: JB K2,PROC_ENDLCALL BEEP_BLJNB K2,$MOV DPTR,#RST_A1MOV A,#1LCALL LCD_PRINTLCALL SET_ALARMLCALL RE_18B20 ;将设定的 TH,TL 值写入 DS18B20LCALL WRITE_E2PROC_K2: LCALL MENU
29、_OKLCALL TEMP_BJPROC_END:RET;* 设定温度报警值 TH、TL *SET_ALARM:LCALL LOOK_ALARMAS0: JB K1,AS00LCALL BEEP_BLJNB K1,$CPL 20H.1 ;UP/DOWN 标记AS00: JB 20H.1,ASZ01 ;20H.1=1,增加JMP ASJ01 ;20H.1=0,减小ASZ01: JB K2,ASZ02 ;TH 值调整( 增加)LCALL BEEP_BLINC TEMP_THMOV A,TEMP_THCJNE A,#120,ASZ011MOV TEMP_TH,#0ASZ011: LCALL LOOK
30、_ALARMMOV R5,#10LCALL DELAYJMP ASZ01ASZ02: JB K3,ASZ03 ;TL 值调整( 增加)LCALL BEEP_BLINC TEMP_TLMOV A,TEMP_TLCJNE A,#99,ASZ021MOV TEMP_TL,#00HASZ021: LCALL LOOK_ALARM MOV R5,#10LCALL DELAYJMP ASZ02ASZ03: JB K4,AS0 ;确定调整LCALL BEEP_BLJNB K4,$RETASJ01: JB K2,ASJ02 ;TH 值调整(减少)LCALL BEEP_BLDEC TEMP_THMOV A,TE
31、MP_THCJNE A,#0FFH,ASJ011JMP ASJ022ASJ011: LCALL LOOK_ALARMMOV R5,#10LCALL DELAYJMP AS0ASJ02: JB K3,ASJ03 ;TL 值调整(减少)LCALL BEEP_BLDEC TEMP_TLMOV A,TEMP_TLCJNE A,#0FFH,ASJ021JMP ASJ022ASJ021: LCALL LOOK_ALARM ;MOV R5,#10LCALL DELAYJMP AS0ASJ022: CPL 20H.1JMP ASZ01ASJ03: JMP ASZ03RETRST_A1: DB “ SET AL
32、ERT CODE “ ,0;* 实测温度值与设定温度值比较子程序 *TEMP_COMP:MOV A,TEMP_TH SUBB A,TEMP_ZH ;减数被减数,则JC CHULI1 ;借位标志位 C=1,转MOV A,TEMPFCCJNE A,#0BH,COMPSJMP CHULI2COMP: MOV A,TEMP_ZHSUBB A,TEMP_TL ;减数被减数,则JC CHULI2 ;借位标志位 C=1,转MOV DPTR,#BJ5LCALL TEMP_BJ3CLR RELAY ;点亮指示灯RETCHULI1: MOV DPTR,#BJ3LCALL TEMP_BJ3SETB RELAY ;熄
33、灭指示灯LCALL BEEP_BL ;蜂鸣器响RETCHULI2: MOV DPTR,#BJ4LCALL TEMP_BJ3SETB RELAY ;熄灭指示灯LCALL BEEP_BL ;蜂鸣器响RET;-TEMP_BJ3: MOV A,#0CEHLCALL WCOMMOV R1,#0MOV R0,#2BBJJ3: MOV A,R1MOVC A,A+DPTRLCALL WDATAINC R1DJNZ R0,BBJJ3RETBJ3: DB “H“BJ4: DB “L“BJ5: DB “ !“; ;* 显示温度标记子程序 *TEMP_BJ: MOV A,#0CBHLCALL WCOMMOV DPTR
34、,#BJ1 ;指针指到显示消息MOV R1,#0MOV R0,#2BBJJ1: MOV A,R1MOVC A,A+DPTRLCALL WDATAINC R1DJNZ R0,BBJJ1RETBJ1: DB 00H,“C“;* 显示正确信息子程序 *MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息MOV A,#1 ;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_OK2 ;指针指到显示消息MOV A,#2 ;显示在第一行LCALL LCD_PRINTRETM_OK1: DB “ DS18B20 OK “,0M_OK2: DB “ TEMP: “,0;* 显示出
35、错信息子程序 *MENU_ERROR:MOV DPTR,#M_ERROR1 ;指针指到显示消息MOV A,#1 ;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_ERROR2 ;指针指到显示消息 1MOV A,#2 ;显示在第一行LCALL LCD_PRINTRETM_ERROR1: DB “ DS18B20 ERROR “,0M_ERROR2: DB “ TEMP: - “,0;*DS18B20 复位子程序 *RST: SETB DQNOPCLR DQMOV R0,#6BH ;主机发出延时复位低脉冲MOV R1,#04HTSR1: DJNZ R0,$MOV R0,#6BHD
36、JNZ R1,TSR1SETB DQ ;拉高数据线NOPNOPNOPMOV R0,#32HTSR2: JNB DQ,TSR3 ;等待 DS18B20 回应DJNZ R0,TSR2JMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置 1 标志位,表示 DS1820 存在JMP TSR5TSR4: CLR FLAG1 ; 清 0 标志位,表示 DS1820 不存在JMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,$ ; 时序要求延时一段时间TSR7: SETB DQRET;* DS18B20 暂存器操作子程序 *RE_18B20:JB FLAG1,RE_
37、18B20ARETRE_18B20A:LCALL RSTMOV A,#0CCH ;跳过 ROM 匹配LCALL WRITEWR_SCRAPD:MOV A,#4EH ;写暂器LCALL WRITEMOV A,TEMP_TH ;TH(报警上限)LCALL WRITEMOV A,TEMP_TL ;TL(报警下限)LCALL WRITEMOV A,#7FH ;12 位精度LCALL WRITERET;* 复制暂存器子程序 *WRITE_E2:LCALL RSTMOV A,#0CCH ;跳过 ROM 匹配LCALL WRITEMOV A,#48H ;把暂存器里的温度报警值拷贝到 EEROMLCALL W
38、RITERET;* 重读 EEROM 子程序 *READ_E2:LCALL RSTMOV A,#0CCH ;跳过 ROM 匹配LCALL WRITEMOV A,#0B8H ;把 EEROM 里的温度报警值拷贝回暂存器LCALL WRITERET;* 将自定义字符写入 LCD 的 CGRAM 中 *STORE_DATA:MOV A,#40HLCALL WCOMMOV R2,#08HMOV DPTR,#D_DATAMOV R3,#00HS_DATA: MOV A,R3MOVC A,A+DPTRLCALL WDATA ;写入数据INC R3DJNZ R2,S_DATARETD_DATA: DB 0C
39、H,12H,12H,0CH,00H,00H,00H,00H;* DS18B20 数据写入操作子程序 *WRITE: MOV R2,#8 ;一共 8 位数据CLR CWR1: CLR DQ ;开始写入 DS18B20 总线要处于复位(低)状态MOV R3,#07DJNZ R3,$ ;总线复位保持 16 微妙以上RRC A ;把一个字节 DATA 分成 8 个 BIT 环移给 CMOV DQ,C ;写入一位MOV R3,#3CHDJNZ R3,$ ;等待 100 微妙SETB DQ ;重新释放总线NOPDJNZ R2,WR1 ;写入下一位SETB DQRET;* DS18B20 数据读取操作子程序
40、 *READ: MOV R4,#4 ;将温度低位、高位、TH、TL 从 DS18B20 中读出MOV R1,#TEMPL ;存入 25H、26H、27H 、28H 单元RE00: MOV R2,#8RE01: CLR CYSETB DQNOPNOPCLR DQ ;读前总线保持为低NOPNOPNOPSETB DQ ;开始读总线释放MOV R3,#09 ;延时 18 微妙DJNZ R3,$MOV C,DQ ;从 DS18B20 总线读得一位MOV R3,#3CHDJNZ R3,$ ;等待 100 微妙RRC A ;把读得的位值环移给 ADJNZ R2,RE01 ;读下一位MOV R1,AINC R
41、1DJNZ R4,RE00RET;* 温度值 BCD 码处理子程序 *CONVTEMP: MOV A,TEMPH ;判温度是否零下ANL A,#08HJZ TEMPC1 ;温度零上转CLR CMOV A,TEMPL ;二进制数求补(双字节)CPL A ;取反加 1ADD A,#01HMOV TEMPL,AMOV A,TEMPHCPL AADDC A,#00HMOV TEMPH,AMOV TEMPHC,#0BH ;负温度标志MOV TEMPFC,#0BHSJMP TEMPC11TEMPC1: MOV TEMPHC,#0AH ;正温度标志MOV TEMPFC,#0AHTEMPC11: MOV A,
42、TEMPHCSWAP AMOV TEMPHC,AMOV A,TEMPLANL A,#0FH ;乘 0.0625MOV DPTR,#TEMPDOTTABMOVC A,A+DPTRMOV TEMPLC,A ;TEMPLC LOW=小数部分 BCDMOV A,TEMPL ;整数部分ANL A,#0F0H ;取出高四位SWAP AMOV TEMPL,AMOV A,TEMPH ;取出低四位ANL A,#0FHSWAP AORL A,TEMPL ;重新组合MOV TEMP_ZH,ALCALL HEX2BCD1MOV TEMPL,AANL A,#0F0HSWAP AORL A,TEMPHC ;TEMPHC
43、LOW = 十位数 BCDMOV TEMPHC,AMOV A,TEMPLANL A,#0FHSWAP A ;TEMPLC HI = 个位数 BCDORL A,TEMPLCMOV TEMPLC,AMOV A,R4JZ TEMPC12ANL A,#0FHSWAP AMOV R4,AMOV A,TEMPHC ;TEMPHC HI = 百位数 BCDANL A,#0FHORL A,R4MOV TEMPHC,ATEMPC12: RET;* 二-十进制转换子程序 *HEX2BCD1: MOV B,#064H DIV AB MOV R4,A MOV A,#0AHXCH A,BDIV AB SWAP AORL
44、 A,BRETTEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H ; 小数部分码表DB 05H,05H,06H,06H,07H,08H,08H,09H;* 查询温度报警值子程序 *LOOK_ALARM: MOV DPTR,#M_ALAX2 ;指针指到显示信息区MOV A,#2 ;显示在第二行LCALL LCD_PRINT MOV A,#0C6HLCALL TEMP_BJ1MOV A,TEMP_TH ;加载 TH 数据MOV LCD_X,#3 ;设置显示位置LCALL SHOW_DIG2H ;显示数据MOV A,#0CEHLCALL TEMP_BJ1MO
45、V A,TEMP_TL ;加载 TL 数据MOV LCD_X,#12 ;设置显示位置LCALL SHOW_DIG2L ;显示数据RETM_ALAX1: DB “ LOOK ALERT CODE“,0M_ALAX2: DB “TH: TL: “,0TEMP_BJ1: LCALL WCOMMOV DPTR,#BJ2 ;指针指到显示信息区MOV R1,#0MOV R0,#2 BBJJ2: MOV A,R1MOVC A,A+DPTRLCALL WDATAINC R1DJNZ R0,BBJJ2RETBJ2: DB 00H,“C“;* LCD 显示子程序 *SHOW_DIG2H: MOV B,#100DIV ABAD