《单片机课程设计报告基于c51DS18B20lcd1602的温度检测系统.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告基于c51DS18B20lcd1602的温度检测系统.doc(41页珍藏版)》请在三一办公上搜索。
1、单片机课程设计报告题目: 温度检测系统设计者1: * 负责任务:硬件与部分软件 专业班级/学号: 07应用电子(4)班 * 设计者2: * 负责任务:Protel画板与部分软件 专业班级/学号: 07应用电子(4)班 * 指导教师1: * 指导教师2: *答辩时间: 2010-01-11 一、选题的背景1、说明选题的来源、意义和目的1.1、来源在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。温度无时无刻不在,同样也时时刻刻都在变化,为了让人们能更直观的看出此时此刻此地的实时温度,我就利用了单片机来完成这一功能。1.2、意义温度的检测与控
2、制在现代经济与社会中有举足轻重的地位,与我们的生活息息相关,密不可分,越发占有一席之地。例如在储粮仓库、智能楼宇、空调控制及其他的工农业生产和科学研究中应用广泛。在温度的检测与控制方面,DS18B20小型温度检测系统及其数字温度传感器有许多突出的优点,其通过单总线与单片机连接,系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度检测,因此对于我们来设计并研究基于DS18B20的温度检测系统有主要的现实意义,从一方面讲这不仅对于工农业的发展,更对于国防的巩固与建设起到重要的作用;另一方面,本设计能够在一定程度上提高自己的单片机开发能力。1.3、目的(1)本实验要实现的是通过DS18B20温度
3、传感器采集温度并在LCD上显示,并学会使用单片机控制DS18B20此类单总线器件,并对数字温度传感器DS18B0进行时序分析。 (2)更进一步了解LCD1602的应用。(3)掌握单片机与PC的远程通信。2、课题承担人员及分工说明*:(1)主要负责电路板的制作、焊接与调试。(2)电路的仿真。(3)温度主要程序的编写与调试。*:(1)Protel画板,材料的收集。(2)串口的调试与程序编写。(3)VB界面的设计和上位机程序的编写。二、课题总体设计说明1、说明总体开发计划和课题所达到的功能目标和技术指标1.1、总体开发计划1.1.1、基本功能(1)以数字传感器DS1820作为前端采集温度,经过单片机
4、处理后,将外部的温度显示在液晶屏上。(2)可用通过独立式按键来设定温度的上限值和下限值,当坏境温度超过上限值或低于下限值时蜂鸣器会自动报警,并在液晶屏上提示温度大于上限值或温度小于下限值。(3)当单片机检测到DS18B20存在时会在在LCD1602上显示“DS18B20 Succes”,反之则显示“DS18B20 is Wrong,TEMP is No on”。1.1.2、扩展功能以数字传感器DS1820作为前端采集温度,经过单片机处理后,再通过串口通信,把实时温度值、上限值和下限值显示在用VB语言编辑的计算机软件的界面上并显示出实时温度的变化曲线,当实时温度超过所设定的上限值和下限值时会在用
5、VB语言编辑的计算机软件的界面上提示当前温度超过上限值或下限值,模拟实现设备与计算机的通信,通过计算机对设备的温度检测以及实时监控。1.2、课题所达到的功能目标和技术指标(1)能在LCD1602上准确的显示出实时温度;(2)独立式按键能设置报警温度的上限值、下限值和查看所设定的上限值、下限值;(3)当温度大于上限值或低于下限值时蜂鸣器会报警;(4)通过串口和PC机连接,能够把实时温度值、上限值和下限值显示在用VB语言编辑的计算机软件的界面上并显示出实时温度的变化曲线,当实时温度超过所设定的上限值和下限值时会在用VB语言编辑的计算机软件的界面上提示当前温度超过上限值或下限值。总之,课题所达到的功
6、能和技术指标与前期计划的一样。2、计划课题总体设计方案,比较几个备选方案,确定最终方案(1)本系统的温度检测有两套方案方案一:采用AD590,使用AD590作为温度传感器,需要进行电流电压变换,电压放大以及A/D转换。方案二:采用DS18B20作为温度传感器进行温度测量。DS18B20可以满足从-55摄氏度到+125摄氏度测量范围,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。另外采用外加电源供电对DS18B20的VDD引脚供电。它的好处是无须MOSFET,而且在温度转换期间总线可自由搭载其它器件。它试用于对性能要求不高
7、,成本严格控制的应用,是经济型产品。它具有线性好、精度适中、灵敏度高、体积小和使用方便等优点,得到广泛应用。因为AD590需要模拟转数字电路,精确度低,测温点数少对线阻有要求,电路繁多,成本也较高,故本系统采用方案二。(2)本系统的显示有两套方案方案一:数码管显示方案二:液晶显示采用1602字符型LCD,它是一种专门用于显示字母、数字、符号等点阵式LCD。其有显示质量高、数字接口、功耗低、体积小等优点。因为数码管只能显示数字和简单的字母,LCD可以显示字符,图形等,并能更形象的体现出字符与图像。故本系统采用方案二。(3)按键的选择方案一:行列式按键方案二:独立式按键独立式按键电路配置灵活,硬件
8、结构简单,但每个按键必须占用一根I/O口线。在按键数量较多时,I/O口浪费较大。故只在按键数量不多时,采用这种按键。因为本系统只用到4个按键且I/O口够用,所以采用方案二。(4)单片机的选择本系统采用了51单片机,其体积小巧,携带方便,价格便宜。且USB接口通讯及供电,通讯速度快,无须外接电源。51单片机有一个全双工的串通信口,非常适合与电脑进行通信。三、硬件设计说明1、硬件总体设计方案1.1、硬件设计目标本系统中通过温度传感器DS18B20的数据线DQ与主控芯片51单片机的P3.3相连接,DS18B20将采集到的数据送给单片机,经过单片机出来后,显示在8位数据线与单片机P0口的液晶LCD上。
9、蜂鸣器经过三极管9012的驱动后接到单片机的P3.7,来实现当实时温度大于下限或高于上限的报警。4个按键K1K4接到单片机的P1.0P1.4,来实现对上限值和下限值的查看与设定。串口经过MAX232的电平转换后R1 OUT和T1 IN接到单片机的RXD与TXD来实现与用VB语言编辑的计算机软件的界面间的通信。液晶LCD的RS、E分别接到单片机的P2.0P2.2来实现单片机控制液晶的读写命令和数据的控制。1.2、硬件功能模块划分主控芯片显示模块控制模块温度检测模块通信模块(1)AT89S51:实现对整个系统的控制。(2)DS18B20、LCD1602:温度传感器DS18B20的数据线DQ与主控芯
10、片51单片机的P3.3相连接,DS18B20将采集到的数据送给单片机,经过单片机处理后,显示在8位数据线与单片机P0口的液晶LCD上。(3)按键输入:对报警温度上限值TH和下限值TL的设置。(4)串口通信:实现与与用VB语言编辑的计算机软件的界面间的通信。1.3、主控芯片和关键元器件的选型、接口和连接方式定义1.3.1、主控芯片和关键元器件的选型(1)主控芯片:AT89S51(2)温度采集:DS18B20 (3)按键:独立式按键(K1K4)(4)显示:LCD1602(5)串口:通过MAX232与单片机的10脚11脚相连(6)报警:蜂鸣器1.3.2、接口和连接方式定义(1)液晶LCD1602的数
11、据和指令选择控制端RS接到单片机的P2.0,读写控制接到单片节的P2.1,数据读写控制位E接到单片机的P2.2,8位数据线DB0DB7接到单片机的P0口。(2)4个按键K1K4分别接到单片机的P1.0P1.3。(3)蜂鸣器接到单片机的P3.7。(4)DS18B20的DQ接到单片机的P3.3.2、硬件单元设计(1)主控电路:实现对整个系统的控制(2)串口通信电路:串口经过MAX232的电平转换后R1 OUT和T1 IN接到单片机的RXD与TXD来实现与用VB语言编辑的计算机软件的界面间的通信。(3)液晶LCD1602、DS18B20电路:温度传感器DS18B20的数据线DQ与主控芯片51单片机的
12、P3.3相连接,DS18B20将采集到的数据送给单片机,经过单片机处理后,显示在8位数据线与单片机P0口的液晶LCD上。(4)按键、蜂鸣器电路:按键K1用来查看所设置的上限温度TH、下限温度TL和设置上限温度TH、下限温度TL增加或减少的切换,K2用来设置上限温度TH,K3用来设置下限温度TL和查看上限温度和下限温度的退出,K4是设置好上限温度和上限温度的确定键;蜂鸣器用来当实时温度大于TH或TL的报警。四、软件设计说明1、软件总体设计方案1.1、软件设计目标(1)结构合理程序应该采用结构模块化设计。这不仅有利于程序的进一步扩充,而且也有利于程序的修改和维护。在程序编程时,要尽量使得程序的层次
13、分明。易于阅读和理解,同时还可以简化程序减小程序对于内存的使用量,当程序中有经常需要加以修改或变化的参数时,应该设计成独立的参数传递群序,避免程序的频繁修改。(2)操作性能好操作性能好是指使用方便。这点是、对数据采集系统来说是很重要的。在开发程序时,应该考虑如何降低对操作人员专业知识的要求。(3)系统应设计一定的检测程序例如状态检测利于诊断程序,以便系统发生故障时容易确定故障部位,对于重要的参数要定时存储,以防止因掉电而丢失数据。(4)提高程序的执行速度。1.2、软件功能模块划分子程序名标号参数读取温度子程序RE_TEMP累加器A温度数据处理子程序SET_DATA无按键扫描子程序P_KEY无设
14、定报警值TH、TL子程序SET_ALARMR5菜单显示子程序LCD_PRINT无显示信息区子程序LOOK_ALARM累加器ALCD的第二行显示高温度子程序SHOW_LINE2H30HLCD的第二行显示低温度子程序SHOW_LINE2L30H温度值比较子程序TEMP_COMP无显示高、温度及加热标记子程序TEMP_BJ3R0、R1报警上下限写入暂存器子程序WR_THL无报警值拷贝到EEROM子程序WRITE_E2无报警值拷贝回暂存器子程序RE_THL无处理温度BCD码子程序CON_TEMPR4显示区BCD码温B度刷新子程序DISP_BCD70H、71H、72H、73HDS18B20复位初始化子程
15、序RESET_1820无写入DS18B20子程序WRITE_1820A读出DS18B20子程序READ_182025H、26H、27H、28HLCD1602显示子程序SET_LCD无LCD初始化子程序INIT_LCD无LCD显示子程序CONV无写指令子程序WR_COMM无写数据子程序WR_DATA无清楚LCD字符子程序CLR_LINE无鸣响子程序SPK_B2无延时子程序DELAY无显示“OK”信息子程序XS_S无显示“ERROR”信息子程序XS_WRONG无显示温度标记“C”子程序TEMP_BJ无自定义字符子程序SECT_DATAR3串口发送子程序SEND1无2、软件设计2.1、主程序主程序首
16、先设置堆栈为5FH,设置定时器工作方式T1为方式2,设置串口方式。接着开始启动定时器,调用LCD初始化子程序,调用DS18B20复位子程序去判断DS18B20是否存在,如果存在调用显示“success”子程序,接着调用上下限写入暂存器子程序,把EEROM里的温度报警值拷贝回暂存器,调用读取温度子程序,调用处理显示子程序,调用实际温度值与标记温度值比较子程序,调用按键扫描子程序后返回到调用读取温度子程序;如果DS18B20不存在,则调用显示“wrong”信息子程序后返回到调用DS18B20复位子程序。(1)流程图(2)重要代码2.2、键扫描子程序按键扫描子程序首先判断按键K1是否按下,如果按下就
17、掉用鸣响子程序,接着判断K1是否放开,直到K1放开,存M-ALAX表,调用显示字符子程序,然后去判断K3是否按下,直到K3按下,调用鸣响子程序,调用显示“OK”信息子程序,最后放回;如果K1没有按下去判断K2是否按下,如果没按下就跳到返回,如果有按下就调用鸣响子程序,然后去判断K3是否放开直到K3放开才存TA1表,接着调用显示字符子程序,调用设定报警TH、TL子程序,调用报警上下限写入暂存器子程序,调用报警值拷贝EEROM子程序,最后跳到调用显示“OK”信息子程序。(1)流程图(2)重要代码2.3、LCD显示子程序LCD显示子程序开始先让LCD初始化,接着光标定位,显示字符,最后放回。(1)流
18、程图开 始LCD 初始化光标定位显示字符结 束(2)重要代码五、软硬件调试说明1、硬件性能测试(1)LCD 测试:通过单片机小系统将所需要的字符送给LCD,LCD能正常显示出所送内容,且LCD的亮度可调。(2)按键与蜂鸣器:通过单片机小系统使蜂鸣器受按键的控制,即按下按键蜂鸣器响,放开即停。(3)串口:先用串口调试助手,让单片机发出简单的字符,串口调试助手能正常接收到数据即可。再将串口与VB相连接。注意:串口硬件电路图的连接关键所在,首先串口是通过MAX232再与单片机连,在这MAX232的外围电路就相当重要,其外围要连接4个电解电容最好都用10UF的注意极性不要连反了。其次串口的发送、接收要
19、与MAX232的相对应。当然单片机的发送、接收也同样要与MAX232的相对应。最关键的是波特率的设置,单片机的波特率一定要与计算机的串口一样。(4)硬件调试时存在的问题:串口的PC_RXD与PC_TXD接反,芯片MXA232的16脚没有接+5V的电源,15脚没有接地。(5)解决办法:查阅串口原理图连接的相关资料,修改电路板。(6)硬件的最终调试结果如下图1、图2、图3、图4所示。图1、当实时温度超大于限值时的报警图2、用串口与用VB语言编的界面相连接时当实时温度大于上限温度的报警图3、当实时温度超小于限值时的报警图4、用串口与用VB语言编的界面相连接时当实时温度小于上限温度的报警2、软件性能测
20、试(1)软件性能测试时用Proteus将画好的仿真图调人用Keil编译后的Temp.hex文件,开始仿真,测试每个按键的功能是否以及实时温度和上下限报警是否与预期计划的一致。(2)软件性能测试结果如下图:(3)软件性能测试存在的问题:实时温度的百位数字一致闪烁。(4)解决办法:由于考虑平时的室温根本不会超过100摄氏度,做一将软件中的百位地址73H直接赋0。六、课题开发总结1、总结整个课题的任务完成情况,是否与预期规划的相符合,设计出来的作品性能如何、优缺点本系统完成的与预期计划相吻合,预期所有功能基本实现,作品性能好,突出的优点是本作品的硬件电路做的相当美观,且电路相当稳定,不仅实现了LCD
21、的显示同样也很好的在VB6.0人机界面上绘制出温度变化曲线,根据我们设定的上限报警温度和下线报警温度,判断当前温度有无高温报警或低温报警,如果温度超限,则给出相应的报警信息。并达到了远程功能。2、硬件宏观上的设计要点,达到的性能指标,存在的问题硬件的设计要点,达到的性能指标与计划预期的一样,没有存在什么问题,可以说此硬件做的相当完美。3、软件宏观上的设计要点,达到的性能指标、开发编译工具和方法、存在的问题(1)软件设计要点,达到的性能指标几乎达到计划预期的,在设计这个系统的过程还学会了串口调试工具。(2)整个电路的设计仿真过程中除了运用了单片机相关软件外还利用了以下软件Multisim8:用于
22、电路的设计与仿真串口调试助手与模拟串口:用于串口的调试与仿真VB6.0:用于数据的显示与显示温度变化的曲线Protel:电路板的设计七、用户操作说明第一步:将电路板上的串口与电脑的串口相连接;第二步:将电路板接上+5V的电源(此时电源指示灯会点亮,会在LCD1602上显示实时温度,如图1所示);第三步:在VB界面上点击打开串口(此时会在VB界面上显示实时温度,上限温度,下限温度和实时温度变化的曲线,如图2所示)。附:本系统有四个控制按键功能如下K1:用于查看上下限温度与温度加减切换K2:用于上限温度的调节K3:用于下限温度的调节,并兼查看上下限温度时的返回K4:设定好上限温度与下限温度时的确定
23、键如,当要调上限温度时:首先按下K2,再按K2时上限温度就加1,如果要减1就按下切换按键K1,再按K2即变为减。八、参考资料书名出版社编者单片机初级教程北京航空航天大学何立民单片机应用实训教程清华大学出版社张永枫单片机典型外围器件及应用实例电子工业学出版社求是科技单片机原理及应用电子工业学出版社张迎新单片机应用实现教程西安电子科技大学出版社张永枫九、附件1、硬件设计的总电路原理图、PCB版图1.1、原理图1.2、PCB图2、元器件清单(器件名称、型号、在原理图中的编号)器件名称型号原理图中的编号器件名称型号原理图中的编号电阻1KR1、R2三级管9012Q104.7KR8、R9晶振12MY110
24、KR4R6温度传感器DS18B20U3200R3液晶LCD1602U2电容10uFC6C9单片机AT89S51U120PC2、C3MAX232U2_MAX23222uFC1、C4串口JP4104C5蜂鸣器BELL排阻103P0_Pull按键RES、K1K43、硬件电路板外观图片、PROTEUS仿真效果图3.1、硬件电路板外观图片正面背面3.2、PROTEUS仿真效果图;数字温度计汇编语言源程序如下:;*温度值存放单元*TEMP_ZH EQU 24H ;实时温度值存放单元TEMPL EQU 25H ;低温度值存放单元TEMPH EQU 26H ;高温度值存放单元TEMP_TH EQU 27H ;
25、高温报警值存放单元TEMP_TL EQU 28H ;低温报警值存放单元TEMPHC EQU 29H ;存十位数的BCD码TEMPLC EQU 2AH ;存个位数的BCD码;*按键输入引脚定义*K1 EQU P1.0K2 EQU P1.1K3 EQU P1.2K4 EQU P1.3SPK EQU P3.7;蜂鸣器ZF EQU 22H.1X EQU 2FH;设置显示位置;*LCD控制引脚*RS EQU P2.0RW EQU P2.1E EQU P2.2FLAG EQU 21H.0;温度传感器标志位KEY_UD EQU 21H.1DQ EQU P3.3;温度传感器数据采集口; *主程序*ORG000
26、0HLJMPMAIN ORG 0023HORG30HMAIN:MOVSP,#5FH MOV TMOD ,#20H;定时器T1为方式2(自动再装入8位计数器) MOVTH1,#0F3H;设置定时器初值, MOVTL1,#0F3H MOV PCON,#00H MOV SCON,#50H;串口工作方式1,10为为1帧,REN=1允许接收 SETB TR1;定时器启动 MOV TEMP_TH,#27MOV TEMP_TL,#20ACALL SET_LCD ;LCD初始化设置子程序TOOP:ACALL RESET_1820;调用18B20复位子程序 JNB FLAG,TOOP1;DS1820不存在,则跳
27、转ACALL XS_S ;调用显示SUCCES信息子程序ACALL WR_THL;将报警上下限写入暂存寄存器子程序ACALL RE_THL;把E2ROM里温度报警值拷贝回暂存器JMP TOOP2TOOP1: ACALL XS_WRONG;显示WRONG信息 SJMP TOOP ;返回继续判断TOOP2:ACALL RE_TEMP ;调用读取温度数据子程序 ACALL SET_DATA ;调用处理显示温度数据子程序ACALL TEMP_COMP;实际温度值与标记温度值比较子程序ACALL P_KEY ;调用按键扫描子程序JMP TOOP2 ;循环;*读取温度数据子程序*RE_TEMP:JNB F
28、LAG,TOOP1 ;判断DS18B20是否存在?ACALL RESET_1820 ;18B20复位子程序MOV A,#0CCH ;跳过ROM匹配ACALL WRITE_1820MOV A,#44H ;发出温度转换命令ACALL WRITE_1820ACALL RESET_1820;调用复位子程序MOV A,#0CCH ;跳过ROM匹配ACALL WRITE_1820MOV A,#0BEH ;发出读温度命令ACALL WRITE_1820ACALL READ_1820 ;调用读取子程序RET;*温度数据处理显示子程序*SET_DATA:ACALL CONV_TEMP;处理温度BCD码子程序AC
29、ALL DISP_BCD;显示区BCD码温度值刷新子程序ACALL CONV;LCD显示子程序MOV A,#0CBH;设定第二行起始地址ACALL TEMP_BJ;显示温度标记ACALLzhfuRET;*按键扫描子程序*P_KEY: ;按键K1处理JB K1, PK1;K1键未按,则跳转到PK1处ACALL SPK_BZ;K1键按下,发出一声响声JNB K1, $ ;等按键放开MOV DPTR, #M_ALAX1;存M_ALAX1表MOV A, #1ACALL LCD_PRINT ;显示字符ACALL LOOK_ALARM;显示信息区子程序JB K3, $ ;等待K3按下(返回)ACALL S
30、PK_BZ ;发出一声响声JMP PK2 ;转到标号PK2处PK1:;按键K2处理JB K2, PK3 ;K2键未按,则跳转到PK3处ACALL SPK_BZ;K2键按下,发出一声响声JNB K2, $ ;等键放开MOV DPTR,#TA1 ;存#TA1表MOV A, #01ACALL LCD_PRINT ;显示字符ACALL LOOK_ALARM;调用显示信息区子程序ACALL SET_ALARM ;设定报警值TH、TLACALL WR_THL;将设定的TH,TL值写入DS18B20内ACALL WRITE_E2;调用报警值拷贝E2ROM子程序PK2:ACALL XS_S ;显示OK信息子程
31、序PK3:RETTA1: ;菜单表DB SET ALERT DATA,0H;*设定报警值TH、TL子程序*SET_ALARM:A0:JB K1, A2;按下K1程序向下运行ACALL SPK_BZ ;蜂鸣器响一声JNB K1, $ ;等待放开CPL KEY_UD ;UP/DOWN标记反向A2:JB KEY_UD, A3 ;20H.1=1,UP,跳转到A3JMP A8 ;20H.1=0,DOWN,跳转到A8;TH值调整(增加)A3:JB K2, A5;按下K2键,程序向下运行ACALL SPK_BZ ;蜂鸣器响一声INC TEMP_TH ;TH值调整(增加)MOV A, TEMP_TH ;TH值
32、送入ACJNE A, #120, A4;TH值增到120,程序向下运行MOV TEMP_TH, #0;TH值清0A4:ACALL LOOK_ALARM ;调用显示信息区子程序MOV R5, #10ACALL DELAY ;调用延时程序JMP A3 ;循环;TL值调整(增加)A5: JB K3, A7;按下K3键程序向下运行ACALL SPK_BZ ;蜂鸣器响一声INC TEMP_TL ;TL值增加1MOV A, TEMP_TL ;TL值送入ACJNE A, #119, A6;比较,若A=99,程序向下运行MOV TEMP_TL, #00H;TL值清0A6: ACALL LOOK_ALARM;调
33、用显示信息区子程序MOV R5, #10ACALL DELAY ;调用延时程序JMP A5 ;程序跳转到A5,循环;确定调整OKA7:JB K4, A0;按下K4键,程序向下运行ACALL SPK_BZ;蜂鸣器响一声JNB K4, $ ;等放开RET;TH值调整(减少)A8: JB K2, A10 ;按下K2键,程序向下运行ACALL SPK_BZ ;蜂鸣器响一声DEC TEMP_TH ;TH值减1MOV A, TEMP_TH ;TH值送入ACJNE A, #0FFH,A9;比较,若A=0FF,程序向下运行JMP A12 ;跳转到A12A9: ACALL LOOK_ALARM ;调用显示信息区
34、子程序MOV R5, #10ACALL DELAY ;调用延时子程序JMP A0 ;跳转到A0;TL值调整(减少)A10:JB K3, A13;按K3键,程序向下运行ACALL SPK_BZ ;蜂鸣器响一声DEC TEMP_TL ;TL值减1MOV A, TEMP_TL ;TH值送入ACJNE A, #0FFH,A11 ;比较,若A=0FFH,程序向下运行JMP A12;转移到A12A11:ACALL LOOK_ALARM;调用显示信息区子程序MOV R5, #10ACALL DELAY ;调用延时子程序JMP A0 ;转移到A0A12:CPL 20H.1;UP/DOWN标记反向JMP A3
35、;跳转到A3,TH值调整(增加)A13:JMP A7;跳转到A7,确定调整OKRET ;子程序返回;*菜单显示子程序* ;在LCD的第一行或第二行显示字符LCD_PRINT:CJNE A,#1,LINE2 ;判断是否为第一行LINE1:ACALL CLR_LINE ;清除该行字符数据MOV A,#80H ;设置LCD的第一行地址ACALL WR_COMM ;写入命令JMP FILLLINE2:ACALL CLR_LINE;清除该行字符数据MOV A,#0C0H ;设置LCD的第二行地址ACALL WR_COMM;写入命令FILL:CLR AMOVC A,A+DPTR;由消息区取出字符CJNE
36、A,#0,LC1;判断是否为结束码RETLC1:ACALL WR_DATA ;写入数据INC DPTR ;指针加1JMP FILL ;继续填入字符;*显示信息区子程序*LOOK_ALARM:MOV DPTR,#M_ALAX2;存表MOV A, #2 ;显示在第二行ACALL LCD_PRINT;调用显示字符子程序MOV A,#0C6H;显示起始地址第二行第7位ACALL TEMP_BJ;调用显示温度标记子程序MOV A, TEMP_TH ;加载TH数据MOV X, #3 ;设置位置ACALL SHOW_LINE2H ;显示数据;MOV A, #0CEH;设定显示起始地址为第二行第15位ACAL
37、L TEMP_BJ;调用显示温度标记子程序MOV A,TEMP_TL ;加载TL数据MOV X, #12 ;设置位置ACALL SHOW_LINE2L ;显示数据RETM_ALAX1:DBLOOK TH,&,TL DATA,0HM_ALAX2:DBTH: TL: ,0H;*在LCD的第二行显示高温数字*SHOW_LINE2H:MOV B, #100 ;设置被除数,B为百位数DIV AB;除法运算,结果A存商数,B存余数ADD A,#30H ;低半字节加30得到ASCII码PUSH B ;B放入堆栈暂存起来MOV B,X ;设置LCD显示的位置ACALL LCDP2 ;由LCD显示出来;POPB ;B由堆栈取出来MOVA, #0AH ;A赋值10XCHA,B ;A,B数据互换,B为十位数DIV AB;除法运算,结果A存入商数,B存余数ADD A, #30H ;转换为字符INC X ;LCD显示位位置加1PUSH B ;B放入堆栈暂存起来MOV B,X ;设置LCD显示的位置ACALL LCDP2 ;由LCD显示出来;POP B ;B由堆栈取出来INC X ;LCD显示位位置加1MOV A,B ;B为个位数MOV B,X ;设置LCD显示的位置ADD A, #30H ;转换为字符ACALL LCDP2 ;由LCD显示出来RET ;*-在LCD的第二行显示低