单片机课程设计温度检测报警器

单片机课程设计温度检测报警器
单片机课程设计温度检测报警器

摘要

随着现代信息化技术的飞速发展和传统工业改造的逐步实现,能独立工作的温度检测系统已广泛应用于各种不同的领域。本文介绍了一个基于AT89C52单片机和数字温度传感器DS18B20的测温系统,并用LED数码管显示温度值,易于读数。系统电路简单、操作简便,系统具有可靠性高、成本低、功耗小等优点。

关键字:AT89C52;DS18B20;LED数码管

目录

1.问题描述 (1)

2.设计思想 (1)

3.硬件设计 (1)

3.1主要构成电路 (1)

3.2单片机最小系统设计 (2)

3.3温度检测电路 (3)

3.4显示电路 (4)

3.5报警电路 (4)

4.软件设计及程序编写 (5)

5.仿真分析 (6)

6.课程设计总结 (6)

参考文献 (7)

附录I系统原理图 (8)

附录II元器件清单 (8)

附录III系统PCB板图 (9)

附录IV源程序 (10)

C语言部分 (10)

汇编部分 (14)

1 问题描述

设计一个温度检测报警器,用2位LED 数码管显示出当前环境温度值;温度范围为85o C~90o C ,精确度为±1 o C ;当温度值小于85o C 或大于90o C 报警。

2 设计思想

本系统由主控制部分、温度采集部分、数据显示部分和蜂鸣器报警部分等四部分组成。系统主控部分采用的主控芯片是AT89C52单片机,通过对温度采集部分采集的数据进行数据处理后,控制数据的显示。当温度达到预设报警值时,单片机发送控制命令报警。数据采集部分主要通过温度传感器实时的采集当前环境温度,然后传给主控部分的单片机。

3 硬件设计

3.1主要构成电路

按单路温度检测报警器的功能要求,决定采用如图1所示的模块组成系统,主要包括单片机控制器、温度检测电路、LED 数码管显示电路、报警电路。

图3.1 温度检测报警器系统组成框图

片机

温度检测

显示

蜂鸣报警

3.2单片机最小系统设计

目前的单片机开发系统只能够仿真单片机,却没有给用户提供一个通用的最小系统。由设计的要求,只要做很小集成度的最小系统应用在一些小的控制单元。其应用特点是:

(1)全部I/O口线均可供用户使用。

(2)内部存储器容量有限(只有4KB地址空间)。

(3)应用系统开发具有特殊性。

图 3.2 最小系统图

单片机最小系统如图3.2所示,其中有4个双向的8位并行I/O端口,分别记作P0、P1、P2、P3,都可以用于数据的输出和输入,P3口具有第二功能为系统提供一些控制信号。时钟电路用于产生MCS-51单片机工作所必须的时钟控制信号,内部电路在时钟信号的控制下,严格地按时序指令工作。MCS-51内部有一个用于构成振荡器的高增益反向放大器,该高增益反向放大器的输入端为芯片的引脚XTAL1,输出端为XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成了一个稳定的自激振荡器。电路中的微调电容通常选择为30pF左右,该

电容的大小会影响到振荡器频率的高低、振荡器的稳定性和起振的快速性。晶体的振荡频率为12MHz。

把EA脚接高电平,单片机访问片内程序存储器,但在PC值超过0FFFH (4Kbyte地址范围)时,将自动转向执行外部程序存储器内的程序。

MCS-51的复位是由外部的复位电路来实现。采用最简单的外部按键复位电路。按键自动复位是通过外部复位电路的来实现的。

3.3温度检测电路

温度检测电路主要任务是把温度信号转换为电信号,转换的方法有很多,在本实验中。

我采用了温度传感器DS18B20芯片,DQ口线要接4.7KΩ左右的上拉电阻连接单片机的P3.7管脚。

图 3.3 温度传感电路图

DS18B20的性能特点:

采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值,测温范围为-55℃-+125℃,测量分辨率为0.0625℃,适配各种单片机或系统机。

CPU对DS18B20的访问流程:

先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。

如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

3.4显示电路

在单片机接到模数转换器输入的信号后,通过单片机控制从P0口输出到共阴的两位LED数码管显示。

图 3.4 数码管显示电路图

3.5报警电路

在本设计中采用单频音报警电路,适合在单片机应用系统中使用,P3.6接蜂鸣器,当P3.6输出是高电平“1”时,蜂鸣器停止鸣响,当输出为低电平“0”时,蜂鸣器报警鸣响。

图 3.5 蜂鸣器报警电路图

4 软件设计及程序编写

本设计程序系统主要程序也是由四部分组成的:单片机控制部分、温度检测部分、LED 数码管显示部分和蜂鸣器报警部分,其主程序执行可以通过以下的流程图来证实:

图4.1主流程图

开始

关闭蜂鸣器 Y

N

DS18B20测温

<85℃ 或>90℃

蜂鸣报警

LED 数码管显示温度

结束

程序编写

ORG 0000H

DQ EQU P3.7

TEMPER_L EQU 29H;用于保存读出温度的低8 位 TEMPER_H EQU 28H;用于保存读出温度的高8 位 ZHENG EQU 30H

DIS_DUAN EQU P0

DIS_1 EQU 21H ;十位段码存储位置

DIS_2 EQU 20H ;个位段码存储位置

MOV DIS_1,#0

MOV DIS_2,#0

MAIN:

ACALL GET_TEMPER;调用读温度子程序

ACALL CHULI

ACALL BEEP

ACALL DISPLAY ;调用数码管显示子程序

CPL P1.0

AJMP MAIN

BEEP:

MOV A,ZHENG

CLR C

CJNE A,#90,SOUND1

NOSOUND:

SETB P3.6

RET

SOUND1:

JB CY,SOUND2

CLR P3.6

RET

SOUND2:

MOV A,ZHENG

CLR C

CJNE A,#85,SOUND3

AJMP NOSOUND

SOUND3:

JNB CY,NOSOUND

CLR P3.6

RET

INIT_18B20:

SETB DQ

NOP

CLR DQ

MOV R0,#250 ;主机发出延时501微秒的复位低脉冲 DJNZ R0,$

SETB DQ ;然后拉高数据线

NOP

NOP

NOP

MOV R0,#25H

TSR2:

JNB DQ,TSR3 ;等待DS18B20 回应

DJNZ R0,TSR2

TSR3:

MOV R0,#117

TSR4:

DJNZ R0,TSR4 ;时序要求延时一段时

SETB DQ

RET

GET_TEMPER: ;读取温度值

SETB DQ

ACALL INIT_18B20;先复位DS18B20

TSS2:

MOV A,#0CCH ;跳过ROM 匹配

ACALL WRITE_18B20

MOV A,#44H ;发出温度转换命令

ACALL WRITE_18B20

ACALL DISPLAY

ACALL INIT_18B20;准备读温度前先复位

MOV A,#0CCH ;跳过ROM 匹配

ACALL WRITE_18B20

MOV A,#0BEH ;发出读温度命令

ACALL WRITE_18B20

ACALL READ_18B20;将读出的温度数据保存到28H/29H

RET

WRITE_18B20: ;写DS18B20 的子程序

MOV R2,#8 ;一共8 位数据

CLR C

WR1:

CLR DQ

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

READ_18B20: ;从DS18B20 中读出两个字节的温度数据

MOV R4,#2 ;将高位和低位2个字节从DS18B20 中读出

MOV R1,#29H ;低位存入29H,高位存入28H RE00:

MOV R2,#8 ;数据一共有8 位

RE01:

CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#9

RE10:

DJNZ R3,RE10

MOV C,DQ

MOV R3,#23

RE20:

DJNZ R3,RE20

RRC A

DJNZ R2,RE01

MOV @R1,A ;先读取地8位

DEC R1 ;29H-1=28H

DJNZ R4,RE00

RET

CHULI: ;处理将要显示的数字

;处理整数部分

MOV A,29H

SWAP A ;将TL的高四位和低四位互换

MOV R0,#50H

MOV @R0,A ;结果送R0

MOV A,28H

ANL A,#00000111B;去掉正负温度位

SWAP A ;高低4位互换

XCHD A,@R0 ;操作数的低半字节互换

MOV ZHENG,A ;将得到的整数部分

MOV A,ZHENG ;将整数部份拆分开来

MOV B,#10

DIV AB

MOV DIS_1,A

MOV DIS_2,B

RET

DISPLAY:

MOV R0,#4

DISLP1:

MOV R1,#50

DISLP2:

MOV DPTR,#TAB

MOV A,DIS_2 ;取个位数

MOVC A,@A+DPTR ;查个位数的7 段代码 MOV P0,A ;送出个位的7 段代码

CLR P2.0 ;开个位显示

ACALL D1MS ;显示1ms

SETB P2.0

MOV DPTR,#TAB

MOV A,DIS_1 ;取十位数

MOVC A,@A+DPTR ;查十位数的7 段代码 MOV P0,A ;送出十位的7 段代码

CLR P2.1 ;开十位显示

ACALL D1MS ;显示1ms

SETB P2.1

DJNZ R1,DISLP2

DJNZ R0,DISLP1

RET

;1ms的延时

D1MS:

MOV R7,#80

DJNZ R7,$

RET

TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0BFH END

5 仿真分析

仿真电路图如图5.1:

图5.1 Protues 中的系统仿真图

根据实验的结果,系统基本能够达到设计的目标:仿真开始,通过DS18B20芯片检测当前环境温度并在2位8段数码管上显示测得的温度值,当温度<85 o

C

或>90o C 时报警。

6 课程设计总结

做了近两周的单片机课程设计,我通过不断地摸索与大量地查阅有关资料,终于完成了快热式家用电热水器的设计,虽然不是很理想,但基本上达到了要求。

本次课程设计不是很顺利,由于我之前单片机学的不太好,在设计过程中遇到了很多阻力,幸亏有老师和同学们的热情指导和帮助,使得我最终基本实现了题目的要求,真的很感谢他们帮助。

这次的课程设计让我感触很深,它让我感受到只学习理论知识有些东西是很难理解的,更谈不上掌握。设计中用到了很多有关模拟电子和数字电子的知识,这让我有了一次温故知新的机会,也让我知道了自己的不足之处,在以后的学习中,要理论联系实际,单片机的学习更是如此,编程能力只有在多读多写之后才能提高。

虽然以前做过几次课程设计,但这次课程设计真的让我学到了很多,长进了很多,真的感觉蛮欣慰的。当然,我能完成这次的课程设计与老师和同学们的关心和帮助是离不开的,再次感谢他们!

参考文献

[1] 李泉溪.单片机原理与应用实例仿真[M].北京:北京航空航天大学出版社,2009.

[2] 江世明.基于Proteus的单片机应用技术[M].北京:电子工业出版社,2009.

[3] 周润景,张丽娜. 基于Proteus的电路及单片机系统设计与仿真[M]. 北京:北京航空航天大学出版社,2006.

[4] 张友德.单片微型计算机原理、应用与实验[M].上海:复旦大学出版社,2003.

附录I 系统原理图

附录II 元器件清单

Used Part Type Designator Footprint

2 1K R2 R

3 RES

1 4.7K R6 RES

1 7SEG-MPX

2 7SEG1 7SEG-MPX2

1 10K R4 RES

1 10k R1 RESPACK-8

1 10uF C

2 CAP-ELEC

1 12MHz C4 CRYSTAL

2 30pF C1 C

3 CAP

1 74HC573 U

2 DIP18

1 100 R5 RES

1 AT89C5

2 U1 DIP40

1 BUTTON B1 BUTTON

1 BUZZER B

2 BUZZER

1 DS18B20 U3 DS18B20

1 PNP P1 PNP

附录III 系统PCB板图

相关文档
最新文档