天津职业技术师范大学2012届本科生毕业设计
4.6 温度显示电路
4个七段共阴数码管分别与AT89S51芯片的P20、P21、P22、P23连接,组成单片机串口输出显示电路。
图4-6温度显示电路
上面各硬件电路共同组成单片机串口输出显示模块,并以此构成输出显示系统。
4.7 实物功能实现图
将实物安装上电池连接好之后,用手触摸传感器,出现以下的示数。如图4-7所示。
20
天津职业技术师范大学2012届本科生毕业设计
图4-7 实物功能实现图
四个数码管上显示的示数是:0226,是十六进制,将此转换为摄氏度,是这样计算的: (2*16*16+2*16+6*1 )* 0.0625=34.38℃
21
天津职业技术师范大学2012届本科生毕业设计
5 软件设计
5.1 系统主程序设计
系统程序主要包括主程序,读出温度子程序,复位应答子程序,写入子程序等。a.主程序:主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图5-1所示。通过调用读温度子程序把存入内存储中的整数部分与小数部分分开存放在不同的两个单元中,然后通过调用显示子程序显示出来。b.读出温度子程序:读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
开始 调用温度子程序 数字变换程序 显示程序
图5-1 主程序流程图
22
天津职业技术师范大学2012届本科生毕业设计
DS18B20复位,应答子程序 跳过ROM匹配命令 写入子程序 温度转换命令 写入子程序 显示子程序(延时) DS18B20复位,应答子程序 跳过ROM匹配命令 写入子程序 读温度命令程序 终止 图5-2 读出温度子程序
DS18B20的各个命令对时序的要求特别严格,所以必须按照所要求的时序才能达到预期的目的,同时,要注意读进来的是高位在后低位在前,共有12位数,小数4位,整数7位,还有一位符号位。
程序代码如下:
*************************************************** GET_TEMPER:
23
天津职业技术师范大学2012届本科生毕业设计
SETB P1.0
LCALL INIT_1820;先复位DS18B20 JB FLAG1,TSS2
RET ; 判断DS1820是否存在?若DS18B20不存在则返回 LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820;这里通过调用显示子程序实现延时一段时间,等待LCALL DISPLAY
LCALL INIT_1820;准备读温度前先复位 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820
LCALL READ_18200; 将读出的温度数据保存到35H/36H RET;写DS18B20的子程序(有具体的时序要求)
TSS2: MOV A,#0CCH ; 跳过ROM匹配
AD转换结束,12位的话750微秒
*********************************************************** c.温度显示程序:四位数码管显示部分:通过P00~P07与单片机串联。而数码 管选择连通部分通过P20~P23与单片机相连。这两部分与单片机均是串联,所 以,只有一位数码管在一个时刻被选中显示。又因为显示时间非常短暂(显示
1MS),肉眼无法读取,因此,在选通一路的情况下,增加了循环显示的功能
(250*4)。在数码管显示部分:通过对显示部分编码进行数字显示。
5.2 程序调试
软件调试环境: Keil uVision2
本系统的软件调试主要是两部分:DS18B20的温度采集部分的调试和四位LED数码管的显示调试。温度采集部分是一个重点,主要是对DS18B20是这个全新的温度传感器进行编程。此部分调试先把DS18B20送来的数据送入单片机一个固定的储存单元中,用LED显示,四路数据循环显示。
编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。然后是程序流程的检查,避免出现死循环。其中,包括跳转指令、选择、结束、中断指令的使用是否正确!最后是对系统进行功能检验,系统采集的数据是否正确,进行检查,以及一些功能键的使用是否正常。
24