基于AT89C51单片机的数字温度计.docx

上传人:b****1 文档编号:13353923 上传时间:2023-06-13 格式:DOCX 页数:33 大小:827.69KB
下载 相关 举报
基于AT89C51单片机的数字温度计.docx_第1页
第1页 / 共33页
基于AT89C51单片机的数字温度计.docx_第2页
第2页 / 共33页
基于AT89C51单片机的数字温度计.docx_第3页
第3页 / 共33页
基于AT89C51单片机的数字温度计.docx_第4页
第4页 / 共33页
基于AT89C51单片机的数字温度计.docx_第5页
第5页 / 共33页
基于AT89C51单片机的数字温度计.docx_第6页
第6页 / 共33页
基于AT89C51单片机的数字温度计.docx_第7页
第7页 / 共33页
基于AT89C51单片机的数字温度计.docx_第8页
第8页 / 共33页
基于AT89C51单片机的数字温度计.docx_第9页
第9页 / 共33页
基于AT89C51单片机的数字温度计.docx_第10页
第10页 / 共33页
基于AT89C51单片机的数字温度计.docx_第11页
第11页 / 共33页
基于AT89C51单片机的数字温度计.docx_第12页
第12页 / 共33页
基于AT89C51单片机的数字温度计.docx_第13页
第13页 / 共33页
基于AT89C51单片机的数字温度计.docx_第14页
第14页 / 共33页
基于AT89C51单片机的数字温度计.docx_第15页
第15页 / 共33页
基于AT89C51单片机的数字温度计.docx_第16页
第16页 / 共33页
基于AT89C51单片机的数字温度计.docx_第17页
第17页 / 共33页
基于AT89C51单片机的数字温度计.docx_第18页
第18页 / 共33页
基于AT89C51单片机的数字温度计.docx_第19页
第19页 / 共33页
基于AT89C51单片机的数字温度计.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于AT89C51单片机的数字温度计.docx

《基于AT89C51单片机的数字温度计.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的数字温度计.docx(33页珍藏版)》请在冰点文库上搜索。

基于AT89C51单片机的数字温度计.docx

基于AT89C51单片机的数字温度计

目录

目录2

1.绪论3

1.1课题研究背景及意义3

1.2课题研究的内容3

2.数字温度计的系统概论5

2.1系统的功能5

2.2温度计的分析5

3.设计方案和要求6

3.1设计任务和要求6

3.2元器件的选取6

3.3系统最终设计方案7

4.硬件设计8

4.1总体设计结构图8

4.2硬件电路概述8

4.2.1最小系统8

4.2.2输入电路设计11

4.2.3输出电路设计12

5.硬件仿真15

6.实物制作18

6.1电路板焊接18

6.2电路板调试19

7.小结20

附录21

1.参考文献21

2.原理图22

3.元器件清单23

4.软件程序24

5.实物图30

1.绪论

1.1课题研究背景及意义

单片机技术作为计算机技术的一个分支,广泛地应用于工业控制,智能仪器仪表,机电一体化产品,家用电器等各个领域。

“单片机原理与应用”在工科院校各专业中已作为一门重要的技术基础课而普遍开设。

学生在课程设计,毕业设计,科研项目中会广泛应用到单片机知识,而且,进入社会后也会广泛接触到单片机的工程项目。

鉴于此,提高“单片机原理及应用”课的教学效果,让学生参与课程设计实习甚为重要。

单片机应用技术涉及的内容十分广泛,如何使学生在有限的时间内掌握单片机应用的基本原理及方法,是一个很有价值的教学项目。

为此,我们进行了“单片机的学习与应用”方面的课程设计,锻炼学生的动脑动手以及协作能力。

单片机课程设计是针对模拟电子技术,数字逻辑电路,电路,单片机的原理及应用课程的要求,对我们进行综合性实践训练的实践学习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课设报告等实践内容。

通过此次课程设计实现以下三个目标:

第一,让学生初步掌握单片机课程的试验、设计方法,即学生根据设计要求和性能约束,查阅文献资料,收集、分析类似的相关题目,并通过元器件的组装调试等实践环节,使最终硬件电路达到题目要求的性能指标;第二,课程设计为后续的毕业设计打好基础,毕业设计是系统的工程设计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐引向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。

第三,培养学生勤于思考乐于动手的习惯,同时通过设计并制作单片机类产品,使学生能够自己不断地学习接受新知识(如在本课设题目中存在智能测温器件DS18B20,就是课堂环节中不曾提及的“新器件”),通过多人的合作解决现实中存在的问题,从而不断地增强学生在该方面的自信心及兴趣,也提高了学生的动手能力,对学生以后步入社会参加工作打下一定良好的实践基础。

1.2课题研究的内容

本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机喜爱的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进行一一介绍,该系统可以方便的是实现温度采集和显示,并可以根据需要任意设定上下限报警温度,它使用起来方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工农业生产中的温度测量,也可以当做温度处理模块嵌入其他系统中,作为其他主系统的辅助扩展。

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

本设计首先是确定目标,气候是各个功能模块的设计,再在Proteus软件上进行仿真,修改,仿真。

本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。

 

2.数字温度计的系统概论

2.1系统的功能

此数字温度计是基于51单片机,18B20,四位数码管,led发光二级管,按键等阻容元件设计制作而成,系统工作稳定,能够很好的测量出温度值,并显示。

此系统带有温度报警指示功能。

2.2温度计的分析

元件设计的意义:

关于按键:

共设计了4个独立按键,一个为进入调整上下限的功能键,一个为加,一个为减,另一个为确定设置键,按下调整键进入上限设置,右边红色二极管亮,设置完上限按确定键,延时并且蜂鸣器响1下,绿二极管亮,自动进入下限设置。

设置完下限按确定键蜂鸣器响2下,进入温度正常显示状态。

关于发光二极管:

共设计了三个发光二极管,一个为电源指示,另外两个分

别为上下限指示或温度报警指示。

当进入调整上限时红色的亮,进入下限时绿色的亮。

当正常显示温度时,温度高于上限红色的亮,低于下限时绿色的亮。

关于蜂鸣器:

作为报警或者调整上下限时提示用,当前温度高于上限或者低

于下限蜂鸣器鸣响!

从上限设置跳到下限设置时,蜂鸣器响一下,确定下限设置时蜂鸣器响两下。

关于数码管:

当温度为正时,显示温度值,温度为负时,最高位显示“-”,

温度数据精确到小数点后一位。

系统采用5v直流供电,通电前注意电源正负极,以及电源接口是否匹配。

3.设计方案和要求

3.1设计任务和要求

1、基本范围15℃——42℃

2、精度误差小于0.5℃

3、LED数码直读显示

4、可以任意设定温度的上下限报警功能.

3.2元器件的选取

单片机芯片的选取:

方案一:

采用89C51芯片作为硬件核心,利用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:

采用AT89C51单片机与MCS-51系列单片机相比有两大优势:

第一,片内程序存储器采用闪存,使程序的写入更加方便;第二,提供了更小尺寸的芯片,使整个硬件电路的体积更小,且管脚数目为20个,与MCS-51相比减少一倍,使理解更容易。

综上所述:

本课设中单片机芯片采用AT89C51。

温度传感器的选取:

方案一:

采用热敏电阻传感器。

利用热敏电阻随温度变化而显著变化,能直接将温度的变化转换为能量的变化,进而制成温度计。

但是其测温传感器比较复杂,而且不易通过编制程序来控制测温精度,增大系统设计的难度。

方案二:

采用DS18B20温度传感器。

DS18B20的内部3脚(或8脚)封装;使用特有的温度测量技术,将被测温度转换成数值信号;3.0~5.5V的电源供电方式和寄生电源供电方式;ROM由64位二进制数字组成,共分为8个字节;RAM由9个字节的高速暂存器和非易失性电擦写ROM组成。

综上所述:

温度传感器选取智能测温器件DS18B20。

3.3系统最终设计方案

综上各方案所述,对此次课设的方案选定:

采用AT89C51作为主控制系统;1602液晶显示模块芯片作为温度数据显示装置;而智能温度传感器DS18B20器件作为测温电路主要组成部分。

至此,系统最终方案确定。

4.硬件设计

4.1总体设计结构图

图4-1总体设计结构图

4.2硬件电路概述

4.2.1最小系统

晶振电路

晶振采用12MHz,分别接入到X1与X2端中。

同时在晶振两端各接一个22pF

的电容,每个电容的另一端再接入到地。

图4-2晶振电路

 

复位电路

复位电路采用的是上电复位。

如图所示,在RST复位输入引脚上接一电容至

Vcc端,下接一个电阻到底。

线路上接一按钮,通过按下按钮,复位电路通

过电容给RST一个短暂的高电平信号。

达到复位状态。

图4-3复位电路

单片机

本设计采用的单片机是AT89C51。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

图4-4AT89C51引脚图

 

电源电路

78系列集成稳压器是常用的固定输出电压的集成稳压器。

它的内部含有限流保护,采用了噪声低,温度漂移小的基准电压源,工作稳定可靠。

78系列集成稳压器为三端器件:

1脚为输入端,2脚为接地端,3脚为输出端,使用十分方便。

78系列集成稳压器典型应用电路如下,这是一个输出5V直流电压的稳压电源电路。

IC采用集成稳压器7805,C1,C2分别为输入端和输出端的滤波电容,RL为负载输出电阻。

当输出电流较大时,7805应配上散热板。

图4-5电源电路

4.2.2输入电路设计

按键电路

关于按键:

共设计了4个独立按键,一个为进入调整上下限的功能键,一个为加,一个为减,另一个为确定设置键,按下调整键进入上限设置,右边红色二极管亮,设置完上限按确定键,延时并且蜂鸣器响1下,绿二极管亮,自动进入下限设置。

设置完下限按确定键蜂鸣器响2下,进入温度正常显示状态。

图4-6按键电路

 

测温电路

测温电路方面,我们选择的温度传感器是DS18B20.这是美国DALLAS半导体公司最新推出的一种改进型只能温度传感器,不同于传统的热敏电阻,DS18B20能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字读书方式。

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

另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD端接地。

由于单线制只有一根线,因此发送接口必须是三态的。

这里我们把温度传感器的DQ端与P23相接,以P23作为温度输入口。

温度传感器VCC端接电源,GND端接地端。

如下图所示

图4-7测温电路

4.2.3输出电路设计

显示电路

关于发光二极管:

共设计了三个发光二极管,一个为电源指示,另外两个分别为上下限指示或温度报警指示。

当进入调整上限时红色的亮,进入下限时绿色的亮。

当正常显示温度时,温度高于上限红色的亮,低于下限时绿色的亮。

LED发光二极管的压降一般为1.5~2.0V,其工作电流一般取10~20mA为宜。

电阻R=U/I,计算得出范围在250Ω--500Ω间,在这里取470Ω。

图4-8温度上下限报警灯

图4-9电源指示灯

 

关于数码管:

显示温度,温度数据精确到小数点后一位。

数码管使用条件:

a、段及小数点上加限流电阻b、使用电压:

段:

根据发光颜色决定;小数点:

根据发光颜色决定c、使用电流:

静态:

总电流80mA(每段10mA);动态:

平均电流4-5mA峰值电流100mA。

静态电阻R=U/I=5V/10mA=500Ω

为了使数码管正常工作,所需电流应大于静态电流值,故电阻要小于静态电阻,故取470Ω。

图4-10数码管

5.硬件仿真

1.设置温度上限为42度,温度下限为15度。

上限温度

下限温度

2.如图所示。

此时温度为38度,温度在规定范围内,绿灯指示,不报警。

3.如图所示。

此时温度为45度,超过上限温度,红灯指示并报警。

4如图所示。

此时温度为10度,低于下限温度,红灯指示并报警。

6.实物制作

6.1电路板焊接

1、元器件在电路板插装的要求:

①元器件在电路板插装的顺序是先低后高,先小后大,先轻后重,先易后难,先一般元器件后特殊元器件,且上道工序安装后不能影响下道工序的安装。

②元器件插装后,其标志应向着易于认读的方向,并尽可能从左到右的顺序读出。

③有极性的元器件极性应严格按照图纸上的要求安装,不能错装。

④元器件在电路板上的插装应分布均匀,排列整齐美观,不允许斜排、立体交叉和重叠排列;不允许一边高、一边低,也不允许引脚一边长、一边短。

二、插装元器件焊接规范:

1、电阻器的插装:

①、看电阻器上的色环(高精度金属膜电阻器)或电阻器上的标示字符排列顺序(高精度低温漂电阻器),确定电阻值是否正确,如有色环不全(字迹不清晰)或封装有破损的需更换器件;

②、弯脚插装,根据插装孔的实际间距对比电阻器的引脚,用镊子夹住引脚平移到合适位臵后快速将引脚弯下,以两引脚插装后能自行稳固为宜,同时使电阻离印制板面高度为2mm左右;

③、插装时注意电阻器的正反方向,正向应为从左到右前四个色环之间间隙较小,与第五个色环间隙相对较大(高精度低温漂电阻器的正反判断和集成电路相同);反之则为反向。

正确的插装方式应为正向插装;

④、若是纵向排列,则按色环排列,上面四个环间隙较小,第五个环与前四个色环间隙较大(高精度金属膜电阻器)或电阻器上的表示字符为从上到下排列(高精度低温漂电阻器)。

2、电容的插装:

①、看电容上的文字标识,确定使用产品与器件表无误,如有封装损坏、字迹模糊或断腿则需更换器件;

②、弯腿插装,根据插装孔的实际间距对比电容的引脚,用镊子夹住引脚平移到合适位臵后快速将引脚弯下,以两引脚插装后能自行稳固为宜,同时使电容离印制板面高度为2mm左右;

③、电容排列要保证其标识字方向一致,便于观测。

焊盘左右排列的电容应使标识字面朝操作者,焊盘上下排列的电容应使标识字面向操作者左边方向。

(电路板正面向上)

3、二极管的焊接

正确辨认正负极后按要求装入规定位臵,型号及标记要易看得见,焊接要求可参考电阻的要求。

4、集成电路器件的插装:

①、如器件引脚弯曲,则用镊子夹住弯曲引脚所在面所有引脚轻轻捏合以矫正;

②、如有引脚端裂或断则视为器件损坏,不予使用需更换新器件;

③、在进行插装的时候要注意器件的正反,面对器件时,器件上的标号字符应为由左到右排列。

6.2电路板调试

最小系统的电路不工作,首先应该确认电源电压是否正常。

用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。

接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。

如果补焊电源后最小系统还是不能工作,有可能是AT89C52单片机坏掉了,重新选择一个AT89C52单片机焊接。

如果是工作但是不能按需要的功能执行,也可用更换AT89C52单片机方法调试,但在此之前可以选择检查对应的模块是否有焊接问题,若没有再进行更换。

7.小结

这次设计,首次动手自己设计电路。

把以往所学的理论知识投入到实际应用当中,加强了对课本上面知识的了解。

在设计过程中,针对测温电路这方面,研究了很长一段时间。

一开始的选择是采用传统的热电阻,然后采集对应温度下的电流和电压,通过A/D电路进单片机处理来得出温度。

这种方案的精度虽然高很多,测温范围也广,但是电路的设计复杂了很多,在编程方面也复杂了很多。

后来参考相关资料,最终选定了以DS18B20作为温度传感器来设计测温电路,通过补偿提高精度。

在设计过程中,遇到了最大的问题就是对单片机芯片不熟。

各端口的作用搞不清,在设计过程中需要不断翻书查看。

通过这样,加固了对以前所学知识的了解。

经过两个星期的设计,通过不断翻查资料,不断学习,终于完成了这次的设计,并成功仿真。

不仅提高了我们的学习兴趣,也让我真正懂得,要理论联系实际,对于以前学习的东西,如果不真正自己动手做一回,是很难真正弄懂的,只有自己认认真真动手做一回,学以致用,才能算是真正搞懂。

 

附录

1.参考文献

[1]高伟.单片机原理及应用[M].北京:

国防工业出版社,2008年.

[2]蔡朝阳.单片机控制实习与专题制作[M].北京:

北航出版社,2006年.

[3]范力旻.《单片机原理及应用技术》.电子工业出版社.

[4]胡文金杨健.《单片机应用技术实训教程》.重庆大学出版社.

[5]杨加国.《单片机原理与应用及C51程序设计》.清华大学出版社,2006年.

[6]胡汉才.单片机原理与接口技术[M].北京:

清华大学出版社,1998年.

[7]郭培源.电子电路及电子器件.高等教育出版社,2003年.

[8]张齐朱宁西.单片机应用系统设计实验(C51).电子工业出版社,2013年.

2.原理图

3.元器件清单

序号

名称

数量

规格型号

1

电阻

10

470

2

电阻

5

4.7k

3

电阻

1

3k

4

电阻

1

10k

5

电阻

1

1k

6

电容

1

100uf

7

电容

1

10uf

8

电容

1

104pf

9

电容

1

22pf

10

三极管

5

8550

11

按键

4

12

DC电源座子

1

13

晶振

1

12M

14

LED发光二极管

2

红色

15

LED发光二极管

1

绿色

16

数码管

1

17

温度传感器

1

DS18B20

18

蜂鸣器

1

19

单片机

1

Stc89c51

20

芯片座子

1

Dip40

21

万能板

1

4.软件程序

Main.h

#ifndefMAIN_H_

#defineMAIN_H_

#include

#defineucharunsignedchar

#defineuintunsignedint

voiddelay1m(uintx);//延时函数声明

voidsmg_scan();//显示函数声明

uintread_temperature();//读取温度数据函数声明

voidconvert(uintdat);//转换函数声明

voidalarm_function();//报警函数声明

#endif

18B20.C

#include"main.h"

#include

#definenops();{_nop_();_nop_();_nop_();_nop_();}//定义空指令

sbitDQ=P2^3;//18b20数据端

sbitred=P2^1;

bitflag;//温度正负标记,0正,1负

//============================时基为1ms的延时函数

voiddelay1ms(uinta)

{

while(a--);

}

//============================18b20复位函数===============

voidrst_18b20()

{

bitflag=1;

while(flag)

{

while(flag)

{

DQ=1;

delay1ms

(1);

DQ=0;//拉低总线

delay1ms(50);

DQ=1;

delay1ms(6);

flag=DQ;

}

delay1ms(40);

flag=~DQ;

}

DQ=1;

}

//==========================写一字节=================

voidwrite_byte(uchardat)

{

uchari;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();

DQ=0;

nops();//4us

DQ=dat&0x01;

delay1m(6);

dat>>=1;

}

DQ=1;

}

//==========================读一字节=================

ucharread_byte()

{

uchardat,i;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();

dat>>=1;

DQ=0;

nops();//4us

DQ=1;//释放总线准备读

nops();//4us

if(DQ)

dat|=0x80;

delay1m(6);

}

DQ=1;

return(dat);

}

//===========================读出温度高低八位===========

uintread_temperature()

{

uchara,b;

uinttemp;

rst_18b20();//复位18B20

write_byte(0xcc);//跳过ROM

write_byte(0x44);//启动温度转换

delay1m

(1);//延时等待

rst_18b20();//复位18B20

write_byte(0xcc);//跳过ROM

write_byte(0xbe);//发读命令

a=read_byte();//低字节

b=read_byte();//高字节

temp=(b<<8)|a;

if(0==(temp&0x8000))

{

flag=0;//正

}

elseif(0x8000==(temp&0x8000))

{

flag=1;//负

temp=~temp+1;

}

temp=temp*0.0625*10+0.5;//保留一位小数,4舍5入,扩大10倍,显示时加个小数点

return(temp);

}

Main.C

//上限要大于下限,上限最大120℃,下限最小1℃

//温度测量范围15℃···42℃,负温度时最高位显示“-”,正温度时直接显示温度

#include"main.h"

#defineledP0//数码管段选

sbits1=P1^0;sbits2=P1^1;sbits3=P1^2;sbits4=P1^3;//调整,+,-,确定,按下调整键进入上限设置,延时一小会自动进入下限设置

sbitred=P2^1;sbitgreen=P2^0;//上下限指示或者报警指示

sbitwei4=P2^7;sbitwei3=P2^6;sbitwei2=P2^5;sbitwei1=P2^4;//位选com4---com1

sbitalarm=P2^2;//蜂鸣器控制端

ucharcodedisplay[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f};//数码管驱动信号0---9,-,灭,点

ucharbuf[4]={10,10,10,10};//数码管显示数据

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2