单片机数字温度计.docx
《单片机数字温度计.docx》由会员分享,可在线阅读,更多相关《单片机数字温度计.docx(29页珍藏版)》请在冰点文库上搜索。
单片机数字温度计
第1章绪论
1.1、选题背景
单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。
由于单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。
单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。
单片机有两种基本结构形式:
一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。
另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。
本文讨论的单片机多功能定时器的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能强等特点。
不仅能满足所需要求,而且还有很多功能可供开发,有着广泛的应用领域。
20世纪80年代中期以后,Intel公司以专利转让的形式把8051内核技术转让给许多半导体芯片生产厂家,如ATMEL、PHILIPS、ANALOG、DEVICES、DALLAS等。
这些厂家生产的芯片是MCS-51系列的兼容产品,准确地说是与MCS-51指令系统兼容的单片机。
这些兼容机与8051的系统结构(主要是指令系统)相同,采用CMOS工艺,因而,常用80C51系列来称呼所有具有8051指令系统的单片机,它们对8051单片机一般都作了一些扩充,更有特点。
其功能和市场竞争力更强,不该把它们直接称呼为MCS-51系列单片机,因为MCS只是Intel公司专用的单片机系列型号。
MCS-51系列及80C51单片机有多种品种。
它们的引脚及指令系统相互兼容,主要在内部结构上有些区别。
目前使用的MCS-51系列单片机及其兼容产品通常分成以下几类:
基本型、增强型、低功耗型、专用型、超8位型、片内闪烁存储器型。
1.2、课题意义
在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。
早期常用的一些温度控制单元都使用模拟电路设计制作的,其测量温度值不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性能价格比的不断提高,新一代产品的应用也越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能。
小则可以用于家电控制,甚至可以用于儿童电子玩具。
它功能强大,体积小,质量轻,灵活好用,配以适当的接口芯片,可以构造各种各样、功能各异的微电子产品。
随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。
根据这种实际情况,设计了一个单片机多功能定时系统,它可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制,同时又可以进行温度测量。
它可以执行不同的温度报警,可以任意设置温度。
这种具有人们所需要的智能化特性的产品减轻了人的劳动,扩大了数字化的范围,为工业数字化提供了可能。
1.3、数字温度计的应用
数字温度计具有测量准确,一计多用等特点,在生活中已经得到广泛的应用。
虽然现在市场上已有现成的数字温度计出售,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,给工业生产带来了方便。
第2章方案选择
2.1方案一
采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成,热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。
通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。
数据采集部分则使用带有A/D通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在LCD电路上,就可以将被测温度显示出来。
热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D转换电路,感温电路比较麻烦。
2.2方案二
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
便于单片机处理及控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样,测温系统的结构就比较简单,体积也不大。
采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便,并用LCD显示。
2.3方案选定:
从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大、线路复杂。
方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。
第3章系统硬件设计
3.1系统结构图:
图3-1系统结构图
3.2系统原理图:
图3-2原理图
3.3、设计介绍
3.3.1、核心部分
本设计采用的处理器单片机, 单片机是早期Single Chip Microcomputer的直译,它反映了早期单片机的形态和本质。
然后,按照面向对象,突出控制功能,在片内集成了许多外围电路及外设接口,突破了传统意义上的计算机结构,发展成microcontroller的体系结构,目前国外已普遍称之为微控制器MCU(Microcontroller Unit)。
鉴于它完全作嵌入应用,故又称为嵌入式微控制器(Embedded Microcontrolle)。
大多数单片机采用哈佛(Harvard)结构体系,即数据存储空间与程序存储空间相互独立的结构体系。
它不同于一般通用计算机系统结构,即程序和数据共用一个空间的冯诺伊曼(Von Neumann)结构。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位
定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
图3-3AT89S52
引脚功能介绍
VCC:
电源
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻
辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,
P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验
时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个
TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入
口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2
的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能
P1.0T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5MOSI(在系统编程用)
P1.6MISO(在系统编程用)
P1.7SCK(在系统编程用)
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个
TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入
口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
引脚号第二功能
P3.0RXD(串行输入)
P3.1TXD(串行输出)
P3.2INT0(外部中断0)
P3.3INT0(外部中断0)
P3.4T0(定时器0外部输入)
P3.5T1(定时器1外部输入)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器写选通)
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门
狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上
的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址
的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或
时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,
ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使
能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而
在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器
读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
特殊功能寄存器。
图3-4电源电路图3-5时钟电路
图3-6复位电路
3.3.2、DS18B20传感器
本设计中用的传感器是DS18B20,DS18B20数字温度计以9位数字量的形式反映器件的温度值。
DS18B20通过一个单线接口发送或接收信息,因此在中央微处理器和DS18B20之间仅需一条连接线(加上地线)。
用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。
因为每个DS18B20都有一个独特的片序列号,所以多只DS18B20可以同时连在一根单线总线上,这样就可以把温度传感器放在许多不同的地方。
这一特性在HVAC环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。
图3-7DS18B20
表3-1引脚说明
16脚SSOP
PR35
符号
说明
9
1
GND
接地
8
2
DQ
数据输入/输出脚。
对于单线操作:
漏极开路
7
3
VDD
可选的
DS18B20(16脚SSOP):
所有上表中未提及的引脚都无连接。
表3-2温度/数据关系
温度℃
数据输出(二进制)
数据输出(十六进制)
+125
0000000011111010
00FA
+25
0000000000110010
0032
+1/2
0000000000000001
0001
0
0000000000000000
0000
-1/2
1111111111111111
FFFF
-25
1111111111001110
FFCE
-55
1111111110010010
FF92
DS18B20测温方法:
用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。
计数器被预置到对应于-55℃的一个值。
如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。
同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。
然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。
斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力。
这是通过改变计数器对温度每增加一度所需计数的值来实现的。
因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。
DS18B20内部对此计算的结果可提供0.5℃的分辨力。
温度以16bit带符号位扩展的二进制补码形式读出,表一给出了温度值和输出数据的关系。
数据通过单线接口以串行方式传输。
DS18B20测温范围-55℃~+125℃,以0.5℃递增。
如用于华氏温度,必须要用一个转换因子查找表。
注意DS18B20内温度表示值为1/2℃LSB,如下所示9bit格式:
MSBLSB
1
1
0
0
1
1
1
0
=-25°C
最高有效(符号)位被复制充满存储器中两字节温度寄存器的高MSB位,由这种“符号位扩
展”产生出了示于表一的16bit温度读数。
图3-8DS18B20测温电路
3.3.3、液晶1602显示
本设计采用液晶显示装置(1602液晶)即把温度信号显示在液晶显示器上,不仅结构简单清新可见,而且省电也容易控制。
数据的传输采用P0口进行控制,其引脚VSS接地,VEE接VCC,RS和RW、E是显示器的控制端分别由单片机的引脚P1.0、P1.1、P1.2进行控制。
1602液晶显示模块只留一个接口与外部通信,通过这个接口接收显示命令和数据,并按指令和数据的要求进行显示。
外部电路通过这个接口读出显示模块的工作状态和显示数据。
LCD显示模块一般带有内部显示RAM和字符发生器,只要输入ASCII码就可以进行显示。
LCD显示模块按功能显示可分为:
LCD段式显示模块、LCD字符型显示模块、LCD图形显示块三类。
液晶显示器因其功耗低、重量轻而成为便携式应用中的主流显示技术。
这里所用的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等。
液晶显示有点振式和字符式两种,在这里采用字符式液晶显示器1602来实现显示电路的功能。
由于1602液晶显示器是本身带有驱动模块的液晶屏,它只有并口线和一些控制线,与单片机的连接有两种不同的方法,直接访问方式和间接访问方式。
直接访问方式就是微处理器把液晶显示模块当作存储器或I/O设备直接挂在总线上,模块8位数据总线与微处理器的数据总线相连,用读操作 或写操作 信号与地址信号共同产生控制信号。
图3-9液晶1602
LCD显示电路
液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。
1602B可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。
该模块也可以只用D4-D7作为四位数据分两次传送。
这样的话可以节省MCU的I/O口资源。
各引脚的功能见表3-3。
表3-3LCD引脚功能
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
双向数据口
2
VDD
电源正极
10
D3
双向数据口
3
VL
对比度调节
11
D4
双向数据口
4
RS
数/命选择
12
D5
双向数据口
5
R/W
读/写选择
13
D6
双向数据口
6
E
模块使能端
14
D7
双向数据口
7
D0
双向数据口
15
BLK
背光源地
8
D1
双向数据口
16
BLA
背光源正极
从该模块的正面看,引脚排列从右向左为:
15脚、16脚,然后才是1-14脚。
VDD:
电源正极,4.5-5.5V,通常使用5V电压;
VL:
LCD对比度调节端,电压调节范围为0-5V。
接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;
RS:
MCU写入数据或者指令选择端。
MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;
R/W:
读写控制端。
R/W为高电平时,读取数据;R/W为低电平时,写入数据;
E:
LCD模块使能信号控制端。
写数据时,需要下降沿触发模块。
D0-D7:
8位数据总线,三态双向。
如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4-D7接口传送数据。
本充电器就是采用4位数据传送方式;
BLA:
LED背光正极。
需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;
BLK:
LED背光地端。
图3-10液晶1602的链接
第4章系统软件设计
4.1系统软件流程图
4.2、主程序(C语言)
voidmain()
{
init_play();//初始化显示
while
(1)
{
read_temp();//读取温度
ds1820disp();//显示
}
}
详见附录三
第5章综合调试
5.1、软件调试
打开程序调试软件keiluVision2,在里面新建一个工程,命名为:
。
接着新建文件DS18B20,编写相应程序。
编写好的各个程序进行编译与连接。
但若是在该过程中,看见我们编好的程序有错误,那么就根据他相应的提示来修改错误,直到该程序能够正确编译为止。
能够正常编译的程序说明没有什么问题了,此时我们在点击相关栏目,让它生成我们在硬件仿真时所需要的.HEX文件。
到此步,我们的软件调试就完成了。
5.2、软件测试
打开Proteus7Professional软件,按照方案所选的电路元件来设计整体电路,线把个芯片按一定的位置放好,然后对相应的对象进行连接,连接时需仔细,以免调试时发生错误。
做好之后把编程所生成的。
HEX文件加载到AT89C52中,运行仿真软件,查看运行效果。
如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。
图5-1软件测试成功图
5.3、硬件测试
根据原理图制作出实物后,把调试好的程序烧入到单片机AT89S52中。
并用它测试温度,看其能否根据外部温度变化,测试温度数值变化。
经过调试后,其能测试外界温度,但与实际温差有误差。
总结
通过本次毕业设计的制作,我较为全面地回顾了,大学三年所学的硬件知识与软件知识。
同时,单片机原理与应用及电子技术方面的相关知识,在这次毕业设计中得到了较好地实践。
在本次毕业设计中我也学到了很多东西,比如说:
我学会了使用Proteus7Professional软件进行硬件原理图的绘制、利用KILE软件对我设计的程序的检查与生成.HEX文件及遇到问题怎么解决等。
首先,在这次毕业设计中,在我遇到过很多我自己不理解的问题及书本上或是我以前没有看见过的知识点。
在面对这些问题时,我首先采用的是上网搜寻的方法来查看别人是否和我一样遇到过相类似的问题,并且查看一下别人是怎样解决这个问题的。
当别人有了解决它问题的方法时,我在根据别人的提示,想想自己的问题出在哪里,该怎么解决。
当我还是无法想到解决的办法是,我就带着自己的问题到图书馆查阅资料,如果我的问题还是没有解决,我就带着问题去问我们的指导老师,让他帮我解决。
采用这样的方法,我的很多问题都迎刃而解了!
其次,就是在本次毕业设计过程中,我不但努力解决自己遇到的问题,还积极帮助同学解决他们遇到的问题。
这样一来,我的知识得到了进一步的巩固,同学的问题也得到了相应的解决,我达到的一举双收的效果,我为此而感到高兴。
最后,让我觉得这次毕业设计的最大成果是:
我知道了将理论用到实际中时,会遇到很多的问题。
因此,在此时我们一定要先沉着的找出问题出现的原因,在对症下药,来解决问题。
我相信只要我们面对问题沉着、冷静,我们的问题都会被解决。
参考文献
[1]边春远、王志强《MCS-51单片机应用开发实用子程序》人民邮电出版社
[2]马忠梅、主编《单片机的C语言应用程序设计马忠梅》北京航空航天大学出版社
[3]李朝青、主编《单片机原理及接口技术》第3版北京航空航天大学出版社
[4]谭浩强《C语言程序设计》第四版清华大学出版
[5]马忠梅、张凯《单片机的C语言应用程序设计》北京航空航天大学出版社
[6]廖先芸《电子技术实践与实训》高等教育出版社
附录一:
元件清单
元件
规格
数量
硬质版
6*8cm
1
单片机
AT89S52
1
电容
10u
1
电容
30p
2
电容
220u
1
电容
104p
1
电阻
47欧
1
电阻
10k
2
排阻
4k7
1
电位器
10k
1
传感器
DS18B20
1
晶振
11.0592M
1
排针
20脚
1
脚座
40脚
1
液晶
1602
1
插槽
20脚
1
锡丝
圈
1
附录二:
C程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^2;//ds18b20与单片机相连
sbitRS=P1^0;
sbitRW=P1^1;
sbitEN=P1^2;
ucharcodestr1[]={"Temperature:
"};
ucharcodestr2[]={"Degree"};
uchardatadisdata[5];
uinttvalue;//温度值
uchartflag;//温度正负标志
/*************************lcd1602程序**************************/
voiddelay1ms(uintms)//延时1毫秒
{
uchara,b,c;
for(c=ms;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
voidwr_com(ucharcom)//写指令
{
delay1ms
(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms
(1);
EN=1;
delay1