基于DS18B20的数字温度计设计.docx
- 文档编号:7215257
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:20
- 大小:248.21KB
基于DS18B20的数字温度计设计.docx
《基于DS18B20的数字温度计设计.docx》由会员分享,可在线阅读,更多相关《基于DS18B20的数字温度计设计.docx(20页珍藏版)》请在冰点文库上搜索。
基于DS18B20的数字温度计设计
基于DS18B20的数字温度计设计
一、课程设计目的
1.培养学生文献检索的能力,如何利用Internet检索需要的文献资料。
2.培养学生综合分析问题、发现问题和解决问题的能力。
3.培养学生综合运用知识的能力和工程设计的能力。
4.培养学生理论联系实际的能力。
5.提高学生课程设计报告撰写水平。
二、设计内容、技术条件和要求
1设计内容
数字温度计的设计要能实现温度的实时采集与显示,以AT89S51单片机为核心芯片,使用DS18B20数字温度传感器采集环境温度,并通过一组4位共阴极数码管将温度显示出来,也可用LM1602液晶显示屏。
方案一:
使用按钮控制温度的采集与显示。
方案二:
使用定时控制温度的采集与显示,时间间隔1S。
2设计要求
•设计单片机最小系统(包括复位按钮、晶振电路等);
•DS18B20应用电路设计。
•按键电路设计。
•可使用实验室的实验箱实物实现,也可使用仿真软件Proteus实现。
•绘制实现本设计内容的硬件电路(原理图),系统的组成框图。
•编写本课程设计内容的软件设计(包含程序流程图和对程序注释)。
三、总体设计思想
本设计以检测温度并显示温度提供上下限报警为目的,按照系统设计功能的要求,确定系统由5个模块组成:
主控器[4]、测温电路,报警电路,按键电路及显示电路。
系统以DS18B20为传感器用以将温度模拟量转化为电压数字量以总线传入单片机,以AT89S51为主芯片,在主芯片对DS18B20传入的温度值进行处理,由单片机程序控制,将经处理后的温度由LM1602液晶显示屏显示出来。
复位按键电路
外部晶振电路
中断电路
图3-1数字温度计设计总体的原理图
四、硬件设计
1、硬件设计图见附件。
2、单片机复位电路工作原理及设计。
硬件图如下
图一
原理是通过使复位端经电阻与Vcc电源接通而产生按键复位电平,保证复位信号高电平持续时间大于2个机器周期。
3、单片机晶振电路工作原理及设计
硬件图如下
图二
晶振电路是提供系统时钟信号。
为了各部分的同步应当引入公用的外部脉冲信号作为振荡脉冲。
电容选择在10~30pF之间,因为电容的大小影响振荡器振荡的稳定性和起振的速度。
4、按键电路将按键的一段与单片机I/O口链接,一段与地链接,当按键按下时可以由单片机内的程序检测到。
按键采用普通的按钮按键。
图三
5、LED数码管或LM1602显示屏的设计及应用。
1、硬件接线图如下
图四
2、LM1602L采用标准的16脚接口分布如下
LCD1602模块的管脚分布功能
管脚号
管脚名称
状态
管脚功能
1
Vss
电源地
2
Vdd
电源正极
3
V0
液晶显示偏压信号
4
RS
输入
寄存器选着
5
RW
输入
读、写操作
6
E
输入
使能信号
7
DB0
三态
数据总线0(LSB)
8
DB1
三态
数据总线
9
DB2
三态
数据总线
10
DB3
三态
数据总线
11
DB4
三态
数据总线
12
DB5
三态
数据总线
13
DB6
三态
数据总线
14
DB7
三态
数据总线(MSB)
15
LEDA
输入
背光+5V
16
LEDK
输入
背光地
3、指令
1)Cleardisplay清显示
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
0
1
清显示指令将空位字符码20H送入全部DDRAM地址中,使DDRAM中的内容全部清除,显示消失;地址计数器AC=0,自动增1模式;显示归位,光标或者闪烁回到原点(显示屏左上角);但并不改变移位设置模式。
2)Returnhome归位
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
1
*
归位指令置地址计数器AC=0;将光标及光标所在位的字符回原点;但DDRAM中的内容并不改变。
3)Entrymodeset设置输入模式
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
1
I/D
S
I/D:
字符码写入或者读出DDRAM后DDRAM地址指针AC变化方向标志:
I/D=1,完成一个字符码传送后,光标右移,AC自动加1;
I/D=0,完成一个字符码传送后,光标左移,AC自动减1;
S:
显示移位标志:
S=1,将全部显示向右(I/D=0)或者向左(I/D=1)移位;
S=0,显示不发生移位;
S=1时,显示移位时,光标似乎并不移位;此外,读DDRAM操作以及对CGRAM的访问,不发生显示移位。
4)Displayon/offcontrol显示开/关控制
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
1
D
C
B
D:
显示开/关控制标志:
D=1,开显示;D=0,关显示;
关显示后,显示数据仍保持在DDRAM中,立即开显示可以再现;
C:
光标显示控制标志:
C=1,光标显示;C=0,光标不显示;
不显示光标并不影响模块其它显示功能;显示5X8点阵字符时,光标在第八行显示,显示5X10点阵字
符时,光标在第十一行显示;
B:
闪烁显示控制标志:
B=1,光标所指位置上,交替显示全黑点阵和显示字符,产生闪烁效果,Fosc=250kHz
时,闪烁频率为0.4ms左右;通过设置,光标可以与其所指位置的字符一起闪烁。
5)Cursorordisplayshift光标或显示移位
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
1
S/C
R/L
*
*
光标或显示移位指令可使光标或显示在没有读写显示数据的情况下,向左或向右移动;运用此指令可以实现显示的查找或替换;在双行显示方式下,第一行和第二行会同时移位;当移位越过第一行第四十位时,光标会从第一行跳到第二行,但显示数据只在本行内水平移位,第二行的显示决不会移进第一行;倘若仅执行移位操作,地址计数器AC的内容不会发生改变。
S/C
R/L
说明
0
0
光标向左移动,AC自动减1
0
1
光标向右移动,AC自动加1
1
0
光标和显示一起向左移动,AC值不变
1
1
光标和显示一起向右移动,AC值不变
6)Functionset功能设置
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
1
DL
N
F
*
*
功能设置指令设置模块数据接口宽度和LCD显示屏显示方式,即MPU与模块接口数据总线为4位或者是8位、LCD显示行数和显示字符点阵规格;所以建议用户最好在执行其它指令设置(读忙标志指令除外)之前,在程序的开始,进行功能设置指令的执行;
DL:
数据接口宽度标志:
DL=1,8位数据总线DB7~DB0;DL=0,4位数据总线DB7~DB4,DB3~DB0不用,使用此方式传送数据,需分两次进行;
N:
显示行数标志:
N=1,两行显示模式;N=0,单行显示模式;
F:
显示字符点阵字体标志:
F=1:
5X10点阵+光标显示模式;F=0:
5X7点阵+光标显示模式。
7)SetCGRAMaddressCGRAM地址设置
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
1
ACG5
ACG4
ACG3
ACG2
ACG1
ACG0
CGRAM地址设置指令设置CGRAM地址指针,它将CGRAM存储用户自定义显示字符的字模数据的首地址ACG5~ACG0送入AC中,于是用户自定义字符字模就可以写入CGRAM中或者从CGRAM中读出。
8)SetDDRAMaddressDDRAM地址设置
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
ADD6
ADD5
ADD4
ADD3
ADD2
ADD1
ADD0
DDRAM地址设置指令设置DDRAM地址指针,它将DDRAM存储显示字符的字符码的首地址ADD6~ADD0送入AC中,于是显示字符的字符码就可以写入DDRAM中或者从DDRAM中读出;值得一提的是:
在LCD显示屏一行显示方式下,DDRAM的地址范围为:
00H~4FH;两行显示方式下,DDRAM的地址范围为:
第一行00H~27H,第二行40H~67H。
9)Readbusyflagandaddress读忙标志BF和AC
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
当RS=0和R/W=1时,在E信号高电平的作用下,BF和AC6~AC0被读到数据总线DB7~DB0的相应位;
BF:
内部操作忙标志,BF=1,表示模块正在进行内部操作,此时模块不接收任何外部指令和数据,直到BF=0为止;
AC6~AC0:
地址计数器AC内的当前内容,由于地址计数器AC被CGROM、CGRAM和DDRAM的公用指针,因此当前AC内容所指区域由前一条指令操作区域决定;同时,只有BF=0时,送到DB7~DB0的数据AC6~AC0才有效。
10)WritedatatoCGRAMorDDRAM写数据到CGRAM或DDRAM
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
0
D7
D6
D5
D4
D3
D2
D1
D0
写数据到CGRAM或DDRAM指令,是将用户自定义字符的字模数据写到已经设置好的CGRAM的地址中,或者是将欲显示字符的字符码写到DDRAM中;欲写入的数据D7~D0首先暂存在DR中,再由模块的内部操作自动写入地址指针所指定的CGRAM单元或者DDRAM单元中。
11)ReaddatafromCGRAMorDDRAM从CGRAM或DDRAM中读数据
指令码:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
1
D7
D6
D5
D4
D3
D2
D1
D0
从CGRAM或DDRAM中读数据指令,是从地址计数器AC指定的CGRAM或者DDRAM单元中,读出数据D7~D0;读出的数据D7~D0暂存在DR中,再由模块的内部操作送到数据总线DB7~DB0上;需要注意的是,在读数据之前,应先通过地址计数器AC正确指定读取单元的地址。
6、DS18B20温度传感器
1、DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
⏹独特的单线接口仅需要一个端口引脚进行通信;
⏹实际应用中不需要外部任何元器件即可实现测温;
⏹可通过数据线供电,电压范围为3.0~5.5V;
⏹在DS18B20中的每个器件上都有独一无二的序列号;
⏹温度以9或12位数字量读出;
⏹报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
⏹负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能工作。
2、工作原理如下
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。
其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。
3、内部构造如下
4、硬件接线图如下
7、AT89S51单片机引脚资源、引脚分配。
1、单片机组要参数
40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
如下图所示:
简单介绍如下:
1、电源:
⑴VCC-芯片电源,接+5V;
⑵VSS-接地端;
2、时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
3、控制线:
控制线共有4根,
1ALE/PROG:
地址锁存允许/片内EPROM编程脉冲
1ALE功能:
用来锁存P0口送出的低8位地址
2PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
2PSEN:
外ROM读选通信号。
3RST/VPD:
复位/备用电源。
1RST(Reset)功能:
复位信号输入端。
2VPD功能:
在Vcc掉电情况下,接备用电源。
4EA/Vpp:
内外ROM选择/片内EPROM编程电源。
1EA功能:
内外ROM选择端。
2Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4、I/O线:
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
⏹有4个8位并行I/O口,共32条端线:
P0、P1、P2和P3口。
每一个I/O口都能用作输入或输出。
⏹用作输入时,均须先写入“1”;用作输出时,P0口应外接上拉电阻。
⏹P0口的负载能力为8个LSTTL门电路;P1~P3口的负载能力为4个LSTTL门电路。
⏹在并行扩展外存储器或I/O口情况下,P0口用于低8位地址总线和数据总线(分时传送),P2口用于高8位地址总线,P3口常用于第二功能
端口
第二名称
第二功能
P3.0
RXD
串行口输入端
P3.1
TXD
串行口输出端
P3.2
INT0
外部中断0请求输入端
P3.3
INT1
外部中断1请求输入端
P3.4
T0
定时/计数器0外部信号输入端
P3.5
T1
定时/计数器1外部信号输入端
P3.6
WR
外RAM写选通信号输出端
P3.7
RD
外RAM读选通信号输出端
硬件图如下
图五
⏹LM1602的数据中线接AT89S51的P2口;
⏹LM1602的RS接P3.0口,RW接P3.1口,E端接P3.2口;
⏹晶振电路接XTAL1和XTAL2;
⏹复位电路接RST;
⏹DS18B20接P3.7口;
六、实验总结
通过这次课程设计,使我认识到理论联系实际的重要性,在实践中扩展了知识面,不但掌握了本专业的相关知识,而且对其他专业的知识也有所了解,从各方面提高了自身的综合素质。
经过这次一个较完整的产品设计和制作过程,对于将来学习和工作也是有所裨益的。
在课程设计过程中,遇到了很多的问题通过查阅资料最终得以解决了,这个过程让我受益匪浅。
七、主要参考文献
1、何立民.单片机高级教程.第1版.北京:
北京航空航天大学出版社,2001
2、MCS—51单片机应用设计张毅刚修林成胡振江编
3、MCS—51单片微型计算机原理与开发王树勋王朝玉张新发编
4、徐爱钧KEILCxV7.0单片机高级语言编程与uVision2应用实践,北京,电子工业出版社,2004
5、李全利、仲伟峰、徐军,单片机原理及应用,北京:
清华大学出版社,2006
附录1参考程序
#include
/*****************************************/
#defineLCD_DBP2
#defineucharunsignedchar
#defineuintunsignedint
uintt0,t1;
ucharstr[]={"2012-06-13"};//显示日期
uchartemp1[11];//存放分解ASCII码温度数据
sbitLCD_RS=P3^0;
sbitLCD_RW=P3^1;
sbitLCD_E=P3^2;
sbitQS=P3^7;//DS18B20数据引脚
sbitINTR=P3^3;//中断
/******定义函数****************/
voidLCD_init(void);//初始化函数
voidLCD_write_command(ucharcommand);//写指令函数
voidLCD_write_data(uchardat);//写数据函数
voidLCD_set_xy(ucharx,uchary);//写地址函数
voidLCD_disp_string(ucharx,uchary,uchar*p);//显示字符串
voiddelay_n40us(uintn);//延时函数
//*******初始化函数***************
voidLCD_init(void)
{
LCD_write_command(0x38);//设置8位格式,2行,5x7
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
LCD_write_command(0x06);//设定输入方式,增量不移位
LCD_write_command(0x01);//清除屏幕显示
delay_n40us(100);
}
//********写指令函数************
voidLCD_write_command(uchardat)
{
LCD_DB=dat;
LCD_RS=0;//指令
LCD_RW=0;//写入
LCD_E=1;//允许
LCD_E=0;
delay_n40us
(1);
}
//********写数据函数*************
voidLCD_write_data(uchardat)
{
LCD_DB=dat;
LCD_RS=1;//数据
LCD_RW=0;//写入
LCD_E=1;//允许
LCD_E=0;
delay_n40us
(1);
}
//*******字符位置函数*********
voidLCD_set_xy(ucharx,uchary)
{
ucharaddress;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
}
//*******字符串显示*********
voidLCD_disp_string(ucharx,uchary,uchar*p)//显示字符串
{LCD_set_xy(x,y);
while(*p)
{LCD_write_data(*p);
p++;
}
delay_n40us
(1);
}
//********延时函数***************
voiddelay_n40us(uintn)
{uinti;
ucharj;
for(i=n;i>0;i--)
for(j=0;j<2;j++);
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
//DS18B20的程序
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/******************时钟延时*************************************/
voiddelay(intus)
{ints;
for(s=0;s } /******************DS18B20的复位*************************************/ ucharow_reset(void) { ucharflag; QS=0;//拉低电平 delay(30);//延时500us左右 QS=1;//释放总线 delay(3);//等待DS18B20回应 flag=QS;//采样总线信号 delay(20);//等待 return(flag); } /******************读位*************************************/ ucharread_bit(void) { uinti; QS=0;//拉低总线 QS=1;//释放总线 for(i=0;i<3;i++);//延时15us左右 return(QS);//返回QS的值 } /******************写位*************************************/ voidwrite_bit(charbitval) { QS=0;//拉低总线 if(bitval==1)QS=1;//写数据 delay(5);//延时 QS=1; } /******************读字节****
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DS18B20 数字 温度计 设计