单片机温度传感器设计报告.docx
- 文档编号:5932202
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:28
- 大小:246.85KB
单片机温度传感器设计报告.docx
《单片机温度传感器设计报告.docx》由会员分享,可在线阅读,更多相关《单片机温度传感器设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
单片机温度传感器设计报告
单片机温度传感器设计报告
泰州职业技术学院
电子与信息工程系
课程名称:
51单片机开发
课题名称:
用1602LCD与DS18B20设计的温度报警器
班级:
10信息
课题小组成员:
林淑云朱翠竹
刘苏慧
指导老师:
蔡菁
摘要
现代社会是信息社会,随着现代农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度,所以对于温度的测量控制具有十分重要的意义。
随着全球温度的普遍升高,高温火灾更是无处不在:
电气线路短路、过载、接触电阻过大等引发高温火灾;静电产生高温火灾;雷电等强电入侵导致高温火灾;最主要是机房内电脑、空调等用电设备长时间工作,导致设备老化,空调发生故障,而不能降温。
因此,机房内所属的电子产品发热快,在短时间内机房温度升高超出设备正常温度,导致系统瘫痪或产生火灾,这时温度报警系统就会发挥应有的功能。
本课题介绍的就是利用温度传感DS18B20制作的温度报警器,自动测量当前环境温度。
由单片机AT89C52控制,并通过1602LCD显示,若当前环境温度超过此温度,系统发出报警。
一、系统总体设计要求
二、系统硬件设计
三、系统程序设计
四、调试与性能分析
五、源程序清单
六、心得体会
一、系统总体设计要求
1.
本设计采用集成温度传感器的的s18b20,设计一个数字显示的温度报警器。
定安全温度值范围为20°C~30°C(可根据具体需要在程序中进行调整),对在这一范围内的温度变化采集后送入A/D转换器,A/D转换器的模拟电压范围为0~5V。
例如传感器采集的温度为25°C,则对应液晶显示器的显示值为25°C。
而温度高出30°C或者低于20°C时,不在安全温度范围之内,喇叭会进行报警、二极管发光显示
2总体设计框图
本设计采用AT89C52作为主控芯片,蜂鸣器作为输出设备产生报警声,LCD1602能够实时的显示当前的的温度。
其中P3.3和P3.2外接按键,P0口用作LCD输出数据端口,P2.3接蜂鸣器端口。
详细原理图见附件
设计框图如图一所示。
二、系统硬件设计
1主控芯片
设计中所采用主控芯片为AT89C52。
因其价格便宜,在市场上已经很成熟,各个方面都能够满足设计要求故选择它。
其采用标准双列直插式引脚DIP-40大规模集成电路封装。
它的引脚排列如下图二所示
图二AT89C52的引脚排列
引脚介绍:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3口管脚备选功能:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INT0(外部中断0)
P3.3INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2、液晶模块显示原理:
在智能控制系统中越来越多的使用了液晶显示屏LCD。
LCD是一种介于液体和固体之间热力学的中间稳定相,它本身不会发光,是利用外部光的反射原理进行显示。
液晶显示功耗小,字形美观,在系统中可用集成电池来供电。
字符型液晶显示模块是一种专门用于字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2,40*行等的模块,下面以1602字符型液晶显示器为例介绍其用法:
1.1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示:
2.1602液晶模块内部的控制器共11条指令:
(1).清屏指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
清显示
0
0
0
0
0
0
0
0
0
1
功能:
<1>清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H;
<2>光标归位,即将光标撤回液晶显示屏的左上方;
<3>将地址计数器(AC)的值设为0。
(2).光标归位指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
光标返回
0
0
0
0
0
0
0
0
1
*
功能:
<1>把光标撤回到显示器的左上方;
<2>把地址计数器(AC)的值设置为0;
<3>保持DDRAM的内容不变。
(3).进入模式设置指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
置输入模式
0
0
0
0
0
0
0
1
I/D
S
功能:
设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:
位名
设置
I/D
0=写入新数据后光标左移
1=写入新数据后光标右移
S
0=写入新数据后显示屏不移动
1=写入新数据后显示屏整体右移1个字符
(4).显示开关控制指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
显示开/关控制指令
0
0
0
0
0
0
1
D
C
B
功能:
控制显示器开/关、光标显示/关闭以及光标是否闪烁。
参数设定的情况如下:
位名
设置
D
0=显示功能关
1=显示功能开
C
0=无光标
1=有光标
B
0=光标闪烁
1=光标不闪烁
(5).设定显示屏或光标移动方向指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
功能:
使光标移位或使整个显示屏幕移位。
参数设定的情况如下:
S/C
R/L
设定情况
0
0
光标左移1格,且AC值减1
0
1
光标右移1格,且AC值加1
1
0
显示器上字符全部左移一格,但光标不动
1
1
显示器上字符全部右移一格,但光标不动
(6).功能设定指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
置功键
0
0
0
0
1
DL
N
F
*
*
功能:
设定数据总线位数、显示的行数及字型。
参数设定的情况如下:
位名
设置
DL
0=数据总线为4位
1=数据总线为8位
N
0=显示1行
1=显示2行
F
0=5×7点阵/每字符
1=5×10点阵/每字符
(7).设定CGRAM地址指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
功能:
设定下一个要存入数据的CGRAM的地址。
(8).设定DDRAM地址指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
置数据存贮器地址
0
0
1
显示数据存贮器地址
功能:
设定下一个要存入数据的CGRAM的地址。
(9).读取忙信号或AC地址指令
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
读忙标志或地址
0
1
BF
计数器地址
功能:
<1>读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;
<2>读取地址计数器(AC)的内容。
(10).数据写入DDRAM或CGRAM指令一览
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
写数到DDRAM或CGRAM
1
0
要写的数据内容
功能:
<1>将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;
<2>将使用者自己设计的图形存入CGRAM。
(11).从CGRAM或DDRAM读出数据的指令一览
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
从CGRAM或DDRAM读数
1
1
读出数据内容
功能:
读取DDRAM或CGRAM中的内容。
3.1602LCD基本操作时序:
读状态
输入
RS=L,RW=H,E=H
输出
D0~D7=状态字
写指令
输入
RS=L,RW=L,E=高脉冲,D0~D7=指令码
输出
无
读数据
输入
RS=H,RW=H,E=H
输出
D0~D7=数据
写数据
输入
RS=H,RW=L,E=高脉冲,D0~D7=数据
输出
无
3、DS18B20温度传感器介绍
传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小[8]。
1.DS18B20的特性[9]
(1)适应电压范围更宽,电压范围:
3.0~5.5V,寄生电源方式下可由数据线供。
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。
(8)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2.DS18B20内部结构及DS18B20的管脚排列
64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。
不同的器件地址序列号不同。
DS18B20内部结构主要由四部分组成:
64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。
DS18B20的引脚定义:
(1)DQ为数字信号输入/输出端
(2)GND为电源地
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)
(4)NC空
三、系统程序设计
//名称:
用1602LCD与DS18B20设计的温度报警器(含ROMCODE,温度上下限显示)
//说明:
本例将报警器温度设为高:
70摄氏度,低-20摄氏度,当DS18B20感知温度达到此临界值时,对应的LCD闪烁,且发出报警声音。
//本例还可以单独显示DS18B20的ROMCODE及报警温度上下限。
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}
sbitHI_LED=P2^3;
sbitLO_LED=P2^6;
sbitDQ=P3^2;
sbitBEEP=P1^5;
sbitRS=P1^0;
sbitRW=P1^1;
sbitEN=P1^2;
sbitk1=P3^5;
sbitk2=P3^4;
sbitk3=P3^6;
ucharcodeRomCodeStr[]={"--ROMCODE--"};
ucharRomCode[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
ucharcodeTemp_Disp_Title[]={"CurrentTemp:
"};
ucharCurrent_Temp_Display_Buffer[]={"TEMP:
"};
ucharcodeTemperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};
ucharcodeAlarm_Temp[]={"ALARMTEMPHiLo"};
ucharAlarm_HI_LO_STR[]={"Hi:
Lo:
"};
uchartemp_data[2]={0x00,0x00};
uchartemp_alarm[2]={0x00,0x00};
uchardisplay[5]={0x00,0x00,0x00,0x00,0x00};
uchardisplay1[3]={0x00,0x00,0x00};
ucharcodedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
charAlarm_Temp_HL[2]={20,-20};
ucharCurrentT=0;
ucharTemp_Value[]={0x00,0x00};
ucharDisplay_Digit[]={0,0,0,0};
bitHI_Alarm=0,LO_Alarm=0;
bitDS18B20_IS_OK=1;
uintTime0_Count=0;
voidDelayXue(intx)
{
uchari;
while(x--)for(i=0;i<200;i++);
}
//
//
ucharBusy_Check()
{
ucharLCD_Status;
RS=0;
RW=1;
EN=1;
DelayXue
(1);
LCD_Status=P0;
EN=0;
returnLCD_Status;
}
voidWrite_LCD_Command(ucharcmd)
{
while((Busy_Check()&0x80)==0x80);
RS=0;
RW=0;
EN=0;
P0=cmd;EN=1;DelayXue
(1);EN=0;
}
voidWrite_LCD_Data(uchardat)
{
while((Busy_Check()&0x80)==0x80);
RS=1;
RW=0;
EN=0;
P0=dat;EN=1;DelayXue
(1);EN=0;
}
voidSet_LCD_POS(ucharp)
{
Write_LCD_Command(p|0x80);
}
voidInitialize_LCD()
{
Write_LCD_Command(0x38);
DelayXue
(1);
Write_LCD_Command(0x01);
DelayXue
(1);
Write_LCD_Command(0x06);
DelayXue
(1);
Write_LCD_Command(0x0c);
DelayXue
(1);
}
voidWrite_NEW_LCD_Char()
{
uchari;
Write_LCD_Command(0x40);
for(i=0;i<8;i++)
Write_LCD_Data(Temperature_Char[i]);
}
voidDelay(uintnum)
{
while(--num);
}
//初始化DS18B20
ucharInit_DS18B20()
{
ucharstatus;
DQ=1;Delay(8);
DQ=0;Delay(90);
DQ=1;Delay(8);
status=DQ;
Delay(100);
DQ=1;
returnstatus;//初始化成功时返回0
}
//读一字节
ucharReadOneByte()
{
uchari,dat=0;
DQ=1;_nop_();
for(i=0;i<8;i++)
{
DQ=0;dat>>=1;DQ=1;_nop_();_nop_();
if(DQ)dat|=0x80;Delay(30);DQ=1;
}
returndat;
}
//写一字节
voidWriteOneByte(uchardat)
{
uchari;
for(i=0;i<8;i++)
{
DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;
}
}
//读取温度值
voidRead_Temperature()
{
if(Init_DS18B20()==1)//DS18B20故障
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xcc);//跳过序列号
WriteOneByte(0x44);//启动温度转换
Init_DS18B20();
WriteOneByte(0xcc);//跳过序列号
WriteOneByte(0xbe);//读取温度寄存器
Temp_Value[0]=ReadOneByte();//温度低8位
Temp_Value[1]=ReadOneByte();//温度高8位
Alarm_Temp_HL[0]=ReadOneByte();//报警温度TH
Alarm_Temp_HL[1]=ReadOneByte();//报警温度TL
DS18B20_IS_OK=1;
}
}
//设置DS18B20的温度报警值
voidSet_Alarm_Temp_Value()
{
Init_DS18B20();
WriteOneByte(0xcc);//跳过序列号
WriteOneByte(0x4e);//将设定的温度报警值写入DS18B20
WriteOneByte(Alarm_Temp_HL[0]);//写TH
Wri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 温度传感器 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)