数字式温度计设计说明书.docx
《数字式温度计设计说明书.docx》由会员分享,可在线阅读,更多相关《数字式温度计设计说明书.docx(22页珍藏版)》请在冰豆网上搜索。
数字式温度计设计说明书
学习情境三
数字式温度计
制作与调试说明书
电子1034班
组别:
第四组
组员:
XXXXXX
2012年3月8日
目录
一、工作任务-3-
二、总体设计思路-3-
2.1整体功能说明-3-
2.2总体框图-3-
三、硬件设计-3-
3.1硬件模块组成-3-
3.2各模块说明-3-
1)主控制器-3-
2)显示驱动与显示电路-4-
3)测温模块-4-
4)报警电路-4-
5)复位电路-5-
四、软件设计-5-
4.1程序结构-5-
4.2各模块说明及流程图-6-
1)主程序流程图-6-
2)读出温度子程序流程图-6-
3)显示数据刷新子程序流程图-7-
4)计算温度子程序流程-7-
5)温度转换命令子程序流程图-8-
4.3程序清单-8-
五、调试过程-13-
5.1调试方法与步骤-13-
5.2调试结果-13-
六、附件-14-
一、工作任务
开发完成一个简易的数字式温度计。
二、总体设计思路
2.1整体功能说明
开发完成一个简易的数字式温度计。
测温范围在-55~125℃,误差在±0.5℃以内。
温度测量间隔时间选择1~2s。
通过键盘扩展(行列式或独立式按键),有温度上下限值及温度报警功能。
在数字式温度计的制作中主要以51单片机(AT89C51)来控制,用温度传感器检测外界的温度,软件的显示子程序用四位一体数码管显示出来,精确到1位小数点,在超出测温范围时,进行报警功能。
2.2总体框图
三、硬件设计
3.1硬件模块组成
本电路由单片机,测温电路,复位电路,报警电路,显示驱动与显示电路等组成了数字式温度计。
3.2各模块说明
1)主控制器:
单片机AT89C51具有低电压和小体积等特点,两个端口刚好满足系统的设计需要痕适合便携手持式产品的设计使用。
2)显示驱动与显示电路:
采用共阳四位LED数码管,用三极管做驱动
3)测温模块:
DS18B20温度传感器是智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
4)报警电路:
运用直流的蜂鸣器,发光二极管组成,用于电路在超限的情况下发出光报警,也可通过取反来实现电路的闪烁报警。
5)复位电路:
采用按键手动复位电路,外接电容电阻与点动开关。
四、软件设计
4.1程序结构
软件设计分为主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序
4.2各模块说明及流程图
1)主程序流程图
说明:
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值温度测量每1s进行一次。
这样可以在1s之内测量一次被测温度。
2)读出温度子程序流程图
读出温度子程序的主要功能是读出RAM中的9字节。
在读出时须进行CRC校验,校验有错时不进行温度数据的改写。
3)显示数据刷新子程序流程图
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。
4)计算温度子程序流程
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。
5)温度转换命令子程序流程图
温度转换命令子程序主要是发温度转换开始命令。
当采用12位分辨率时,转换时间约为750ms。
在本程序设计中,采用1s显示程序延时法等待转换的完成。
4.3程序清单
;****************************************************
;常数定义
;***************************************************
TIMELEQU0E0H;20MS,定时器0时间常数
TIMEHEQU0B1H;
TEMPHEADEQU36H;
;***************************************************
;工作内存定义
;***************************************************
BITSTDATA20H
TIME1SOKBITBITST.1
TEMPONEOKBITBITST.2
TEMPLDATA26H
TEMPHDATA27H
TEMPHCDATA28H
TEMPLCDATA29H
;*************************************************
;引脚定义
;**************************************************
TEMPDINBITP3.4
;**************************************************
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT_0
ORG000BH
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
AJMPT_B
ORG0013H
AJMPINT_1
ORG0030H
MAIN:
MOVTMOD,#00H
MOVTH0,#63H
MOVTL0,#18H
MOVR5,#100
SETB07H
SETBIT0
SETBIT1
SETBEX0
SETBEX1
SETBET0
SETBEA
SETBTR0
LCALLREADTEMP
LOOP:
LCALLCF
LCALLDIS
AJMPLOOP
T_B:
MOVTH0,#63H
MOVTL0,#18H
DJNZR5,LOOP8
MOVR5,#100
LCALLREADTEMP
LCALLREADTEMP1
CALLCONVTEMP
LOOP8:
RETI
INT_0:
CLR05H
INT_1:
JB05H,
;***************************************
;子程序区
;***************************************
;RESETDS18B20
;***************************************
INITDS1820:
SETBTEMPDIN;
NOP;
NOP;
CLRTEMPDIN;
MOVR6,#0A0H;DELAY480us
DJNZR6,$
MOVR6,#0A0H
DJNZR6,$;
SETBTEMPDIN;
MOVR6,#32H;DELAY70us
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
;;处理温度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;整数部分
ANA,#0F0H;
SWAPA;
MOVTEMPL,A;
MOVA,TEMPH;
;
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;
CalculateCRC-8Values.UsesTheCCITT-8Polynomial,ExpressedAs
;X^8+X^5+X^4+1
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;
DIS:
MOVR1,#70H
MOVR2,#11111110B
LD0:
MOVP0,#00H
MOVA,@R1
MOVDPTR,#TABLE
DB0FFH
DB0BFH
;DB36H
;DB0A1H
;DB86H
;DB8eH
DELAY:
MOVR3,#030H
LOOP0:
MOVR4,#00FH
DJNZR4,$
DJNZR3,LOOP0
RET
CF:
MOVA,29H
ANLA,#0FH
MOV73H,A
MOVA,29H
ANLA,#0F0H
SWAPA
MOV72H,A
MOVA,28H
ANLA,#0FH
MOV71H,A
MOVA,28H
ANLA,#0F0H
SWAPA
MOV70H,A
RET
END
MOVCA,@A+DPTR
MOVP0,A
MOVA,R2
JNBACC.2,NB
SETBP0.7
AJMPBN
NB:
CLRP0.7
BN:
MOVP2,A
LCALLDELAY
INCR1
MOVA,R2
JNBACC.3,LD1
RLA
MOVR2,A
AJMPLD0
LD1:
RET
ORG0A00H
TABLE:
DB0c0H
DB0f9H
DB0a4H
DB0b0H
DB99H
DB92H
DB82H
DB0f8H
DB80H
DB90H
五、调试过程
5.1调试方法与步骤
1、程序调试
数字式温度计的源程序编写完之后,我们使用软件和Protel共同来调试源程序的争取与否。
2、仿真
硬件设计的内容使用Protel软件,来画出主控模块,采集模块,显示模块和报警模块五个模块来组成完整的仿真图。
3、电路板调试
用万用表检查电路板各部分接线,检查是否已焊接正确,检查完成之后,用仿真器与电路板相连,加入+5V电压,下载软件程序并正确编译,在电路板上观察LED的显示变化,记录室温的变化
5.2调试结果
能准确测量室温,并一秒定时更新一次。
LED显示DS18B20的当前温度19.2摄氏度。
显示当前室温,显示温度LED可随室温的升高而逐渐升高,温度到达上限时,蜂鸣器会发出报警声音提示,若温度到了所设定的最低温度以下,也会发出警报声。
本次设计实现了低功耗高精度便携式数字温度计的设计。
DS18B20传感器精度高、互换性好;它直接将温度数据进行编码,可以只是使用一根电缆传输数据,通信方便,传输距离远且抗干扰性好;与用传统温度传感器组成的多点测温系统相比可节省大量电缆。
而且系统得以简化,系统扩充维护十分方便。
DS18B20可以广泛用于工厂工业过程、大型粮仓、酿酒厂、食品加工厂的温度检测以及宾馆、仪器仪表室等处的温度检测与控制。
六、附件
序号
名称
标号
数值
型号
数量
1
电容
C1
10uf
电解电容
1
2
电容
C2、C3
22pf
瓷片电容
2
3
发光二极管
DS1~DS2
2
4
电阻
R1~R4,R6~R10,R14
510
碳膜电阻
10
R5,R11~R13,R15
1K
5
R16
10K
1
R17
4.7K
1
5
三极管
Q2~Q5
8550
PNP
5
6
按键
S1~S3
独立式按键
3
7
单片机
U1
40管脚
1
8
四位LED显示器
U2
12管脚
1
9
温度传感器
U3
3管脚
18B20
1
10
蜂鸣器
LS1
TMB12A05
1
11
晶振
Y1
12HZ
KCS12..000
1
元器件清单
原理图
PCB图