单片机课程设计数字温度计.docx

上传人:b****5 文档编号:6788232 上传时间:2023-01-10 格式:DOCX 页数:26 大小:558.23KB
下载 相关 举报
单片机课程设计数字温度计.docx_第1页
第1页 / 共26页
单片机课程设计数字温度计.docx_第2页
第2页 / 共26页
单片机课程设计数字温度计.docx_第3页
第3页 / 共26页
单片机课程设计数字温度计.docx_第4页
第4页 / 共26页
单片机课程设计数字温度计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

单片机课程设计数字温度计.docx

《单片机课程设计数字温度计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字温度计.docx(26页珍藏版)》请在冰豆网上搜索。

单片机课程设计数字温度计.docx

单片机课程设计数字温度计

单片机课程设计报告

 

数字温度计

 

2009年6月15日

 

摘要

随着电子技术的进步和发展,单片机的应用已经普及到我们生活、工作、科研等各个领域,其技术日趋成熟和完善。

本设计是一个基于AT89S52单片机,采用“一线总线”数字化温度传感器DS18B20的测温系统。

采用WAVE6000集成调试软件编写汇编程序实现温度的转化、数值计算以及数码管显示当前温度功能,并且可以通过按键设置高低温报警温度,对应配置报警器和报警指示灯。

数码管显示采取动态扫描的方法,简化了硬件电路;温度调整运用中断处理,保证了报警温度调整的实时性。

本设计可以方便快捷的实现温度的采集和显示,具有精度高、测温范围宽、体积小、功耗低等优点,适用于我们日常生活和工、农业生产中的温度测量,也可以作为温度处理模块嵌入其它系统中,作为其他主系统的扩展电路。

DS18B20与AT89S52结合实现最简温度检测系统,结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。

关键词:

一线总线动态扫描中断处理报警温度

 

目录

1概述3

1.1设计目的与意义3

1.2设计任务及要求3

2系统总体方案及硬件设计4

2.1数字温度计设计方案论证:

4

2.1.1方案一4

2.1.2方案二4

2.1.3方案三4

2.2选用方案的设计思路4

2.2.1主控芯片5

2.2.2显示电路5

2.2.3报警温度调整电路5

2.2.4报警电路5

2.2.5温度传感器5

2.3DS18B20温度传感器与单片机的接口电路6

2.4系统整体硬件电路7

3软件设计9

3.1主程序9

3.2读温度子程序10

3.3报警温度调整子程序11

3.4显示子程序12

4实验仿真13

4.1温度显示13

4.2报警温度调节15

5课程设计体会17

参考文献17

附件1:

源程序代码18

附件2:

系统原理图27

 

1概述

随着电子技术水平的不断提高,单片机在日常生活中的应用也越来越广泛,它所给人类带来的方便也是有目共睹的,其中数字温度计就是一个典型的例子。

随着人们对它的要求越来越高,要为现代人的生活、工作以及科研提供更为方便的设施还需要从单片机技术和更优越的温度传感器入手,一切向着数字化控制,智能化控制方向发展。

我们设计的数字温度计与传统的温度计相比,具有读数直观、方便,测温范围广,测温准确等优点,其输出温度采用数码管显示。

主要应用于对测温精度和测温范围要求比较高的场所,也可在科研实验室使用。

该设计主控芯片使用AT89S52单片机,测温传感器使用“一线总线”数字化温度传感器DS18B20,使用4位共阴极LED数码管以动态扫描方式,实现温度显示,能准确达到以上要求。

1.1设计目的与意义

综合利用所学单片机知识完成一个单片机应用系统设计并仿真实现所要求的功能,从而加深对单片机软硬件知识的理解和对相关传感器的原理和使用方法的掌握,获得进一步的应用实践经验,为走出校门从事单片机应用的相关工作打下基础。

该设计同时也是我们对所学理论知识进行的检测和验证,理论与实践相结合,探索知识的真理殿堂,不拘泥于课本,培养自己发现问题并独立解决问题的能力。

1.2设计任务及要求

1)基本范围-50℃-110℃

2)精度误差小于0.5℃

3)LED数码直读显示

4)扩展功能

5)可以任意设定上下限报警温度

 

2系统总体方案及硬件设计

2.1数字温度计设计方案论证:

2.1.1方案一

由于本设计是测温电路,可以使用热敏电阻等器件利用其感温效应,在把随温度变化的电压或电流采集过来进行A/D转换之后,再利用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦,而且热敏电阻的线性度不高,测量精度。

2.1.2方案二

直接使用数字温度传感器来测温,可以使用“一线总线”数字化温度传感器DS18B20。

此传感器可以直接读取被测温度值,只需进行简单转换,就可以得到所测环境的温度值。

显示电路采用串口移位静态显示方式,采用串入并出移位芯片74LS164和数码管来实现温度的显示。

2.1.3方案三

也是直接使用数字温度传感器DS18B20来测温,但显示电路采用动态扫描的方式来实现,电路简单,容易实现,节约成本。

比较以上三种方案,很容易看出,采用方案三,硬件电路比较简单,软件设计也不难,是为最佳选择,故采用方案三。

2.2选用方案的设计思路

数字温度计电路设计总体设计方框图如图2-1所示,主控芯片采AT89S52,温度传感器采用DS18B20,用4位LED数码管以动态扫描方式实现温度显示,报警温度调整采用独立按键,报警电路由蜂鸣器和报警指示灯组成。

图2-1系统总体框图

2.2.1主控芯片

AT89S52价格便宜、体积小,很适合便携手持式产品的设计,4个IO端口和2个外部中断完全能满足本设计的需要。

2.2.2显示电路

显示电路采用4位共阴LED数码管,从P0口输出段码,接470Ω上拉电阻,用P2口的P2.4-P2.7脚来输出数码管动态扫描位选信号。

2.2.3报警温度调整电路

采用独立键盘,分别用外部中断0和1来调整高温报警温度和低温报警温度,在中断中查询加减按键的动作来调整温度,进入中断后,清EA,然后将与中断1即P3.3脚相连的按键作为确定键使用。

2.2.4报警电路

采用蜂鸣器来发出报警声音,超高亮发光二极管作为报警指示灯,由于AT89S52的驱动能力较弱,所以蜂鸣器要加三极管驱动,报警灯外接上拉电阻,单片机用灌电流方式点亮它,可获得较高的亮度!

2.2.5温度传感器

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它可根据实际要求通过简单的编程实现9~12位的分辨率的设定。

DS18B20的性能特点如下:

●零待机功耗;

●温度以9或12位数字;

●用户可定义报警设置;

●可通过数据线供电,电压范围为3.0~5.5V;

●独特的单线接口,仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在一条线上,轻松实现传感器网络组建;

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件。

DS18B20内部高速暂存RAM为8字节的存储器,前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20温度转换得时间比较长,而且分辨率越高,所需要得温度数据转换时间越长。

具体得分辨率转换为相应精度得温度数值所需时间如表2-1所示。

们的设计采用12位精度,因此对18B20操作时要对时序根据表2-1来调整。

当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节中。

单片机可以通过单线接口读出该数据,读数据时低8位在先,高8位在后,数据格式以0.0625℃/LSB形式表示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。

表2-1DS18B20温度转换时间表

R1

R0

分辨率/位

温度最大转换时间

0

0

9

93.75

0

1

10

187.5

1

0

11

375

1

1

12

750

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作按协议进行。

操作协议为:

初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

1、初始化:

单总线的所有处理均从初始化开始。

初始化过程是主机通过向作为从机的DS18B20芯片发一个具有一定时间宽度的初始化脉冲实现的。

初始化后,才可进行读写操作。

2、ROM操作命令:

总线主机检测到DS18B20的存在便可以发出ROM操作命令。

ROM操作命令如表2-2所示:

表2-2ROM操作命令

指令

代码

ReadROM(读ROM)

[33H]

MatchROM(匹配ROM)

[55H]

SkipROM(跳过ROM)

[CCH]

SearchROM(搜索ROM)

[F0H]

Alarmsearch(告警搜索)

[ECH]

3、存储器操作:

存储器操作命令如表2-3所示:

4、时序:

主机使用时间隙(timeslots)来读写DS18B20的数据位和写命令字的位。

2.3DS18B20温度传感器与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源;另一种是寄生电源供电方式。

本设计采用第一种供电方式,为保证在有效的DS18B20时钟周期内提供足够的电流,可在信号线与电源线之间接上拉电阻,接口电路如图2-2所示。

表2-3存储区操作命令

指令

代码

WriteScratchpad(写暂存存储器)

[4EH]

ReadScratchpad(读暂存存储器)

[BEH]

CopyScratchpad(复制暂存存储器)

[48H]

ConvertTemperature(温度变换)

[44H]

RecallEPROM(重新调用)

[B8H]

ReadPowersupply(读电源)

[B4H]

图2-2DS18B20与单片机的接口电路

2.4系统整体硬件电路

系统整体硬件电路包括:

传感器数据采集电路,温度显示电路,上下限报警温度调整电路和报警电路,如图2-3所示。

图中有4个独立式按键可以分别调整温度计的上下限报警温度,蜂鸣器可以在被测温度超出上下限范围内时,发出报警鸣叫声音,同时报警指示灯超高亮发光二极管将被点亮。

图中画出来的是上电复位电路,实际电路将采用按健加上电复位电路,使用比较方便,在程序跑飞时,可以手动复位,这样就不用重启单片机电源,就可以实现复位。

显示电路采用动态扫描方式,这样不仅使用单片机端口较少,而且外围电路也比较简单。

图2-3系统整体硬件电路

 

3软件设计

系统程序主要包括主程序,读温度子程序,报警温度调整子程序和显示子程序。

3.1主程序

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值,其程序流程如图3-1所示。

图3-1主程序流程图

3.2读温度子程序

读出温度子程序的主要功能是读出温度转换之后RAM中的前2个字节中暂存的温度值,其程序流程图如图3-2所示。

图3-2读温度流程图

3.3报警温度调整子程序

报警温度调整子程序主要是对按键的处理,具体流程如图3-3所示。

图3-3报警温度调整流程图

3.4显示子程序

显示子程序要先判断要显示的是18B20采集到的温度值还是报警温度值,再计算出温度值的百位(若温度值大于99°C)、十位和个位并扫描显示,如图3-4。

图3-4显示流程图

4实验仿真

4.1温度显示

由于18B20的测温范围是-55~125°C,所以当温度为负值时,第一位数码管用来显示温度的负号,如图4-1所示。

图4-1

当温度值的十位数字为0时,不显示,如图4-2所示。

图4-2

温度值为正且小于100°C时,第一位数码管也是用来显示符号,为正时不显示,如图4-3。

图4-3

当温度值大于等于100°C时,第一位数码管用来显示温度的百位数字,如图4-4。

图4-4

4.2报警温度调节

调节高温报警温度时,先按下高温调节按键,进入高温调节模式,此时4位数码管的第一位当报警温度小于100°C时不显示,大于等于100°C时显示百位数字,第二位显示报警温度的十位数字,第三位显示报警温度的个位,第四位显示“H”,表示处于高温报警温度调节状态。

按下加一键后报警温度值会加一并且数码管闪亮一次显示更新的高温报警温度值,按下减一键时执行同样操作。

直到按下确定键,才退出设定状态。

高温报警温度调节状态如图4-5所示。

调节低温报警温度时,先按下低温调节按键,进入低温调节模式,数码管显示和高温调节时相似,只是第四位显示“L”,表示处于低温报警温度调节状态。

按键操作也和高温调节时相同。

低温报警温度调节状态如图4-6所示。

在此值得一提的是低温调节按键和确认键是复用的,也就是说如果按下低温调节按键后再按一次,就会直接退出低温设定状态。

另外低温调节按键还具有关报警电路的功能,当所测温度值超出上下限报警温度时,蜂鸣器响同时报警指示灯亮,此时连续按下2次确认键即可关掉报警,再连续按下2次确认键就又进入了报警状态。

图4-5高温报警温度调节

图4-6低温报警温度调节

 

5课程设计体会

经过将近三周的学习与实践,终于成功的完成了我的数字温度计的设计,它的各方面的性能基本上都已达到课程设计要求。

在本次设计过程中,我发现了很多的问题,而这些问题是在只学习课本知识时所不能遇到的,比如说由于AT89S52的端口驱动能力较弱,用P0口送段码时要接上拉电阻,数码管的位选端理论上采用三极管驱动才能使数码管的亮度比较可观,可是在实际操作中,接上三极管驱动后出现了亮度不均匀的现象,而且很容受到干扰,去掉三极管驱动电路之后,显示正常,而且亮度也能满足要求,这就是理论与实践的差别。

我在大量搜集资料的基础上,结合向同学和老师请教的策略,把遇到的问题都一一解决了,这使我增长了不少知识。

尤其在用汇编语言编写单片机程序方面,我终于迈出了坚实的一步。

从这次的课程设计中,我真真切切的体会到了理论与实践的差距,所以在以后的学习中,我会更加注意理论联系实际,多亲自动手操作。

把我所学的理论知识运用到实践当中去,在实践中检验理论知识,以此来加深对其的理解和掌握。

这是我在这次课程设计中的最大收获。

参考文献

[1]余发山,王福忠,单片机原理及应用技术,徐州:

中国矿业大学出版社,2008,

[2]王为青,邱文勋,51单片机应用开发案例精选,北京:

人民邮电出版社,2007.8,145-158

[3]DS18B20pdf:

附件1:

源程序代码

;温度检测

TEMPER_LEQU29H;温度低8位

TEMPER_HEQU28H;温度高8位

FLAG0EQU35H;温度调整状态标志

FLAG1EQU36H;是否检测到18b20标志位

FLAG2EQU37H;报警标志位

FLAG3EQU38H;高低温调整标志位

FLAG4EQU39H;闪烁标志位

F_BITEQU20H;符号位

A_BITEQU21H;数码管个位

B_BITEQU22H;数码管十位

X_BITEQU23H;小数位

H_TEMEQU24H;高温报警

L_TEMEQU25H;低温报警

DQBITP2.2;18B20数据线

ORG0000H

LJMPMAIN

ORG0003H

LJMPKEY_H

ORG0013H

LJMPKEY_L

ORG0050H

MAIN:

MOVSP,#57H

MOVTCON,#00H;定义中断方式

SETBEX0

SETBEX1

SETBEA

MOV24H,#35;送高温报警初值

MOV25H,#15;送低温报警初值

CLRFLAG2

MAIN0:

LCALLGET_TEMPER;读转换温度

MOVA,28H

ANLA,#0F0H

JZZHENG;判断符号位

CLRC

MOVA,29H

CPLA

INCA

MOV29H,A

MOVA,28H

CPLA

JNCAAA

INCA

AAA:

MOV28H,A

MOVF_BIT,#10

AJMPBBB

ZHENG:

MOVF_BIT,#11

BBB:

MOVA,29H

ANLA,#0FH

MOVDPTR,#NUMTAB2;查表求得小数位值

MOVCA,@A+DPTR

MOVX_BIT,A

MOVA,29H

MOVC,40H

RRCA

MOVC,41H

RRCA

MOVC,42H

RRCA

MOVC,43H

RRCA

JBFLAG2,ABOVE;若报警标志位为1,关报警

CJNEA,24H,BUD;若报警标志位为0,则判断是否

BUD:

JCBELOW;报警

SETBP2.0

CLRP2.1

AJMPDDD

BELOW:

CJNEA,25H,BUD0

BUD0:

JNCABOVE

SETBP2.0

CLRP2.1

AJMPDDD

ABOVE:

CLRP2.0

SETBP2.1

DDD:

MOV29H,A

CLRFLAG0

LCALLDISPLAY;调用显示子程序

AJMPMAIN0;循环处理

;DS18B20复位初始化

INIT_18B20:

SETBDQ

NOP

CLRDQ

MOVR1,#3

TSR1:

MOVR0,#107

DJNZR0,$

DJNZR1,TSR1

SETBDQ

NOP

NOP

NOP

MOVR0,#25

TSR2:

JNBDQ,TSR3

DJNZR0,TSR2

LJMPTSR4

TSR3:

SETBFLAG1

LJMPTSR5

TSR4:

CLRFLAG1

LJMPTSR7

TSR5:

MOVR0,#117

TSR6:

DJNZR0,TSR6

TSR7:

SETBDQ

RET

;读出转换后的温度

GET_TEMPER:

SETBDQ

LCALLINIT_18B20

JBFLAG1,TSS2

CLRDQ

RET

TSS2:

MOVA,#0CCH

LCALLWRITE_18B20

MOVA,#44H

LCALLWRITE_18B20

LCALLDISPLAY

LCALLINIT_18B20

MOVA,#0CCH

LCALLWRITE_18B20

MOVA,#0BEH

LCALLWRITE_18B20

LCALLREAD_18B20

RET

;写DS18B20

WRITE_18B20:

MOVR2,#8

CLRC

WR1:

CLRDQ

MOVR3,#5

DJNZR3,$

RRCA

MOVDQ,C

MOVR3,#21

DJNZR3,$

SETBDQ

NOP

DJNZR2,WR1

SETBDQ

RET

;读18b20的子程序

READ_18B20:

MOVR4,#2

MOVR1,#29H

RE00:

MOVR2,#8

RE01:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#8

RE10:

DJNZR3,RE10

MOVC,DQ

MOVR3,#21

RE20:

DJNZR3,RE20

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

;报警温度调整子程序

KEY_H:

ACALLD5MS

JBP3.2,OVER

PUSHACC

PUSHPSW

SETBRS0

CLREA

SETBFLAG0;置位温度调整标志位

SETBFLAG3;置位高温报警调整标志位

MOVA,24H

MOV30H,A

KEY_CH:

JBP3.4,JJ_H

ACALLD20MS

JBP3.4,JJ_H

INC24H

MOVA,24H

MOV30H,A

ACALLDISPLAY

JJ_H:

JBP3.5,QD_H

ACALLD20MS

JBP3.5,QD_H

DEC24H

MOVA,24H

MOV30H,A

ACALLDISPLAY

QD_H:

JBP3.3,KEY_CH

ACALLD5MS

JBP3.3,KEY_CH

CLRFLAG0;即将退出调整,清零调整状态位

CLRRS0

POPPSW

POPACC

SETBEA

OVER:

RETI

KEY_L:

ACALLD20MS

JBP3.3,OVER0

PUSHACC

PUSHPSW

SETBRS0

SETBFLAG0;置位温度调整标志位

CPLFLAG2;对报警标志位取反

CLRFLAG3;清零高温报警调整标志位

CLREA

MOVA,25H

MOV30H,A

KEY_CL:

JBP3.4,JJ_L

ACALLD20MS

JBP3.4,JJ_L

INC25H

MOVA,25H

MOV30H,A

ACALLDISPLAY

JJ_L:

JBP3.5,QD_L

ACALLD20MS

JBP3.5,QD_L

DEC25H

MOVA,25H

MOV30H,A

ACALLDISPLAY

QD_L:

JBP3.3,KEY_CL

ACALLD20MS

JBP3.3,KEY_CL

CLRFLAG0;即将退出调整,清零调整状态位

CLRRS0

POPPSW

POPACC

SETBEA

OVER0:

RETI

;显示子程序

DISPLAY:

JBFLAG0,JIAN;调整状态位为1,报警温度送显示处理

MOVA,29H;否则处理温度传感器读取的温度值

AJMPTEM

JIAN:

MOVA,30H

TEM:

CJNEA,#100,NX;若温度>=100°,符号位用来显示百位

NX:

JCNNN

MOVB,#100

DIVAB

MOVF_BIT,A

MOV29H,B

MOVA,29H

AJMPMM

NNN:

JNBFLAG0,MM

MOVF_BIT,#11;若符号位值为0,不显示

MM:

MOVB,#10

DIVAB

MOVB_BIT,A

MOVA_BIT,B

MOVR1,#200;循环显示200次

DPLOP:

MOVA,F_BIT

MOVDPTR,#NUMTAB1;查表显示

MOVCA,@A+DPTR

MOVP0,A

CLRP2.7

ACALLD1MS

SETBP2.7

MOVA,B_BIT

JNZCCC

MOVA,F

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

当前位置:首页 > 法律文书 > 调解书

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

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