数字式温度计设计说明书.docx
《数字式温度计设计说明书.docx》由会员分享,可在线阅读,更多相关《数字式温度计设计说明书.docx(19页珍藏版)》请在冰点文库上搜索。
数字式温度计设计说明书
学习情境三
数字式温度计
制作与调试说明书
电子1034班
组别:
07
组员:
高腾郑东发
2012年3月8日
目录
1、设计课题………………………………………………………(3)
二、设计要求………………………………………………………(3)
2.1基本技术要求……………………………………………………(3)
2.2工作形式…………………………………………………………(3)
三、总体设计思路…………………………………………………(3)
3.1功能性能要求……………………………………………………(3)
3.2总体框图…………………………………………………………(4)
四、设计实现………………………………………………………(4)
4.1硬件模块…………………………………………………………(4)
1)模块说明………………………………………………………………(5)
2)原理图…………………………………………………………………(6)
3)PCB图…………………………………………………………………(6)
4.2软件模块…………………………………………………………(6)
1)流程图及各个模块说明………………………………………………(9)
2)程序清单………………………………………………………………(14)
五、调试过程………………………………………………………(14)
5.1试验时间及方法…………………………………………………(14)
5.2需要设备…………………………………………………………(15)
5.3调试记录…………………………………………………………(15)
5.4存在的不足………………………………………………………(15)
6、实训小结………………………………………………………(15)
一、设计课题
利用相关软硬件实现可直接观测的数字式温度计
二、设计要求
1.基本技术要求
开发完成一个简易的数字式温度计。
1)要求以51单片机为主控制器,以数字式温度传感器DS18B20为传感元件,以LED数码管作为显示器件实时显示测量温度(十进制数)。
数字式温度计测温范围在-55~125℃,误差在±0.5℃以内。
温度测量间隔时间选择1~2s。
2)要求完成硬件的设计与制作、软件的设计与制作、系统联调;完成开发过程中涉及的所有技术文档;最后进行成果演示(要求用PPT)。
3)通过键盘扩展(行列式或独立式按键),实现温度上下限值的设定及温度报警功能。
4)对温度采样值实现数字滤波(可自行选择算法)。
5)通过硬件或软件方法实现时间显示。
6)用PPT演示设计成果,包括设计思路、设计实现、调试结果及存在不足等,时间为20分钟,以小组为单位。
2.工作形式
以工作小组的形式完成本次设计。
工作小组由2人构成。
三、总体设计思路
1.功能性能要求:
数字式温度计测温范围在-55~125℃,误差在±0.5℃以内。
温度测量间隔时间选择1~2s,通过键盘扩展(行列式或独立式按键),有温度上下限值及温度报警功能。
2.总体框图:
4、设计实现
(1)硬件模块
1.模块说明:
按照任务书上的要求确定系统主要有三个模块组成:
主控制器,显示模块,测温模块
1)主控制器:
单片机AT89C51具有低电压和小体积等特点,两个端口刚好满足系统的设计需要很适合便携手持式产品的设计使用。
2)显示模块:
采用共阳四位LED数码管,用三极管做驱动
3)测温模块:
DS18B20温度传感器是智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
2.原理图
3.PCB图
(2)软件模块
1.流程图及各个模块说明
1)软件流程图
2)2)各模块流程图
3)读出温度子程序流程图
4)显示数据刷新子程序流程图
5)计算温度子程序流程
6)温度转换命令子程序流程图
2、程序清单
;***********************************************************************
;常数定义
;***********************************************************************
TIMELEQU0E0H;20MS,定时器0时间常数
TIMEHEQU0B1H;
TEMPHEADEQU36H;
;
;*************************************************************
;工作内存定义
;*************************************************************
BITSTDATA20H
TIME1SOKBITBITST.1
TEMPONEOKBITBITST.2
TEMPLDATA26H
TEMPHDATA27H
TEMPHCDATA28H
TEMPLCDATA29H
;
;
;*************************************************************
;引脚定义
;*************************************************************
;
TEMPDINBITP3.7;
;
;
;**********************************************************
;**********************************************************
;子程序区
;**********************************************************
;RESETDS18B20
;**********************************************************
INITDS1820:
SETBTEMPDIN;
NOP;
NOP;
CLRTEMPDIN;
MOVR6,#0A0H;DELAY480us
DJNZR6,$
MOVR6,#0A0H
DJNZR6,$;
SETBTEMPDIN;
MOVR6,#32H;DELAY70us
DJNZR6,$;
MOVR6,#3CH
LOOP1820:
MOVC,TEMPDIN;
JCINITDS1820OUT;
DJNZR6,LOOP1820
MOVR6,#064H;DELAY200us
DJNZR6,$;
SJMPINITDS1820;
RET;
;
INITDS1820OUT:
SETBTEMPDIN;
RET;
;
;
;**********************************************************
;读DS18B20的程序,从DS18B20中读出一个字节的数据
;**********************************************************
READDS1820:
MOVR7,#08H;
SETBTEMPDIN;
NOP;
NOP;
READDS1820LOOP:
CLRTEMPDIN;
NOP;
NOP;
NOP;
SETBTEMPDIN;
MOVR6,#07H;DELAY15us
DJNZR6,$;
MOVC,TEMPDIN;
MOVR6,#3CH;DELAY120us
DJNZR6,$;
RRCA;
SETBTEMPDIN;
DJNZR7,READDS1820LOOP;
MOVR6,#3CH;DELAY120us
DJNZR6,$;
RET;
;
;
;**********************************************************
;写DS18B20的程序,从DS18B20中写一个字节的数据
;**********************************************************
WRITEDS1820:
MOVR7,#08H;
SETBTEMPDIN;
NOP;
NOP;
WRITEDS1820LOP:
CLRTEMPDIN;
MOVR6,#07H;DELAY15us
DJNZR6,$;
RRCA;
MOVTEMPDIN,C;
MOVR6,#34H;DELAY104us
DJNZR6,$;
SETBTEMPDIN;
DJNZR7,WRITEDS1820LOP;
RET;
;
;
;**********************************************************
;READTEMP
;**********************************************************
READTEMP:
LCALLINITDS1820;
MOVA,#0CCH;
LCALLWRITEDS1820;SKIPROM
MOVR6,#34H;DELAY104us
DJNZR6,$;
MOVA,#44H;
LCALLWRITEDS1820;STARTCONVERSION
MOVR6,#34H;DELAY104us
DJNZR6,$;
RET;
;
READTEMP1:
LCALLINITDS1820;
MOVA,#0CCH;
LCALLWRITEDS1820;SKIPROM
MOVR6,#34H;DELAY104us
DJNZR6,$;
MOVA,#0BEH;
LCALLWRITEDS1820;SCRATCHPAD
MOVR6,#34H;DELAY104us
DJNZR6,$;
MOVR5,#09H;
MOVR0,#TEMPHEAD;
MOVB,#00H
READTEMP2:
LCALLREADDS1820;
MOV@R0,A;
INCR0;
READTEMP21:
LCALLCRC8CAL;
DJNZR5,READTEMP2;
MOVA,B;
JNZREADTEMPOUT;
MOVA,TEMPHEAD+0;
MOVTEMPL,A;
MOVA,TEMPHEAD+1;
MOVTEMPH,A;
READTEMPOUT:
RET;
;
;
;**********************************************************
;处理温度BCD码子程序
;**********************************************************
CONVTEMP:
MOVA,TEMPH;
ANLA,#80H;
JZTEMPC1;
CLRC;
MOVA,TEMPL;
CPLA;
ADDA,#01H;
MOVTEMPL,A;
MOVA,TEMPH;-
CPLA;
ADDCA,#00H;
MOVTEMPH,A;TEMPHCHI=符号位
MOVTEMPHC,#0BH;
SJMPTEMPC11;
;
TEMPC1:
MOVTEMPHC,#0AH;+
TEMPC11:
MOVA,TEMPHC
SWAPA
MOVTEMPHC,A
MOVA,TEMPL;
ANLA,#0FH;乘0.0625
MOVDPTR,#TEMPDOTTAB;
MOVCA,@A+DPTR;
MOVTEMPLC,A;TEMPLCLOW=小数部分BCD
;
MOVA,TEMPL;整数部分
ANLA,#0F0H;
SWAPA;
MOVTEMPL,A;
MOVA,TEMPH;
ANLA,#0FH;
SWAPA;
ORLA,TEMPL;
LCALLHEX2BCD1;
MOVTEMPL,A;
ANLA,#0F0H;
SWAPA;
ORLA,TEMPHC;TEMPHCLOW=十位数BCD
MOVTEMPHC,A;
MOVA,TEMPL;
ANLA,#0FH;
SWAPA;TEMPLCHI=个位数BCD
ORLA,TEMPLC;
MOVTEMPLC,A;
MOVA,R7;
JZTEMPC12;
ANLA,#0FH;
SWAPA;
MOVR7,A;
MOVA,TEMPHC;TEMPHCHI=百位数BCD
ANLA,#0FH;
ORLA,R7;
MOVTEMPHC,A;
TEMPC12:
RET;
;
;**********************************************************
;小数部分码表
;**********************************************************
TEMPDOTTAB:
DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB06H,07H,08H,08H,09H,09H
;
;**********************************************************
;单字节16进制转BCD
;**********************************************************
HEX2BCD1:
MOVB,#064H;16进制->BCD
DIVAB;B=A%100
MOVR7,A;R7=百位数
MOVA,#0AH;
XCHA,B;
DIVAB;B=A%B
SWAPA;
ORLA,B;
RET;
;
;****************************************************************************
;CalculateCRC-8Values.UsesTheCCITT-8Polynomial,ExpressedAs
;X^8+X^5+X^4+1
;****************************************************************************
CRC8CAL:
PUSHACC;
MOVR7,#08H;NumberBitsInByte
CRC8LOOP1:
XRLA,B;CalculateCRC
RRCA;MoveToCarry
MOVA,B;GetTheLastCRCValue
JNCCRC8LOOP2;SkipIfData==0
XRLA,#18H;UpdateTheCRCValue
CRC8LOOP2:
RRCA;PositionTheNewCRC
MOVB,A;StoreTheNewCRC
POPACC;GetTheRemainingBits
RRA;PositionTheNextBit
PUSHACC;SaveTheRemainingBits
DJNZR7,CRC8LOOP1;RepeatFor8Bits
POPACC;
RET
五、调试过程
1、试验时间及方法
试验时间:
2.26-3.8
方法:
先万用表检查硬件连接是否正常,正负极电源是否短路,硬件没问题后。
再在程序中测试软件,没问题后再把硬件和软件连接起来一起调试,先测试显示部分,没问题后再全部调试,直至没问题为止。
2、需要设备
万用表,仿真器
3、调试记录
3.5号检查硬件电路,发现短路,最后将可疑部位重新点焊后排除故障。
3.7号联调,程序与硬件不融合,显示有问题,经过一系列改动后显示正常。
4、存在的不足
硬件:
由于硬件电路焊接上的不完美,显示时存在一定的误差,且因为修改的问题导致电路板不太干净。
软件:
设计时考虑不够周到。
六、实训小结
为期四周的实训眨眼就结束了,在这说长不长,说短也不短的日子里,我曾因为玩手机和电脑被老师批评过,也曾和同学努力攻关技术难关并为所获得的成果而兴奋不已,在这段时间里我和组员郑东发学会了如何相互配合,相对合理的利用自己以及对方的时间来达成实训要求,一句话,没有付出就没有收获,除了实训时所学到的技术,这也会对我们产生弥足深远的影响。