数字式温度计设计说明书.docx

上传人:b****7 文档编号:11325310 上传时间:2023-02-26 格式:DOCX 页数:22 大小:432.87KB
下载 相关 举报
数字式温度计设计说明书.docx_第1页
第1页 / 共22页
数字式温度计设计说明书.docx_第2页
第2页 / 共22页
数字式温度计设计说明书.docx_第3页
第3页 / 共22页
数字式温度计设计说明书.docx_第4页
第4页 / 共22页
数字式温度计设计说明书.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数字式温度计设计说明书.docx

《数字式温度计设计说明书.docx》由会员分享,可在线阅读,更多相关《数字式温度计设计说明书.docx(22页珍藏版)》请在冰豆网上搜索。

数字式温度计设计说明书.docx

数字式温度计设计说明书

 

学习情境三

数字式温度计

制作与调试说明书

电子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图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1