温度测量设计报告.docx
- 文档编号:17750115
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:27
- 大小:100.28KB
温度测量设计报告.docx
《温度测量设计报告.docx》由会员分享,可在线阅读,更多相关《温度测量设计报告.docx(27页珍藏版)》请在冰点文库上搜索。
温度测量设计报告
摘要
随着技术的进步,单片机在电子产品中的应用已经越来越广泛,并且在很多电子产品中也将其用到温度检测和温度控制。
本次设计是一个基于AT89C51单片机的测温系统,该系统使用了美国DALLAS公司生产的DS18B20作为温度传感器,利用液晶12864进行显示,使用键盘进行上下限报警温度的设置,实现了最简单的温度检测系统。
该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
关键词:
单片机DS18B20温度传感器
目录
1课程设计意义-------------------------------------------------------
2方案论证-------------------------------------------------------------
1.1方案1----------------------------------------------------------------------
1.2方案2----------------------------------------------------------------------
3单片机温度控制系统总体设计及原理------------------------
2.1系统的主要功能----------------------------------------------------------
2.2系统的工作原理----------------------------------------------------------
2.3系统的总原理图----------------------------------------------------------
2.3系统的主要技术指标----------------------------------------------------
4温度控制系统的硬件设计---------------------------------------
3.1温度采集模块电路-------------------------------------------------------
3.11数字温度传感器18B20的工作原理----------------------------
3.12数字温度传感器18B20的工作电路-----------------------------
3.2显示电路----------------------------------------------------------------
3.3控制电路----------------------------------------------------------------
3.4报警电路----------------------------------------------------------------
5温度控制系统的软件设计---------------------------------------
4.1主程序流程图-------------------------------------------------------------
4.2读出温度子程序----------------------------------------------------------
4.3温度转换命令子程序----------------------------------------------------
4.4计算温度子程序----------------------------------------------------------
4.5显示子程序----------------------------------------------------------------
4.51显示当前温度子程序--------------------------------------------------
4.52显示上下限温度子程序-----------------------------------------------
4.6键盘扫描控制子程序---------------------------------------------------
6总结与体会--------------------------------------------------------
7致谢-----------------------------------------------------------------
8参考文献-----------------------------------------------------------
附:
总程序
1课程设计意义
本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。
特别是对单片机的系统设计有很大帮助。
本课程设计由一个人完成,在锻炼了自己的同时也增强了自己的独立科学创新的精神。
2方案论证
2.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。
而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。
2.2方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。
3单片机温度控制系统总体设计及原理
3.1系统的主要功能
控制器采用单片机AT89C51,温度传感器采用DS18B20,用3位LED液晶12864以并口传送数据实现温度显示,增加四个独立键盘调节温度上下限,报警采用蜂鸣器。
3.2系统的工作原理
3.3系统的总原理图
3.4系统的主要技术指标
1、基本测温范围–55°C~+125°C(–67°F~+257°F)。
2、测温精度误差小于0.5°C。
3、三位LED液晶12864温度显示范围0°C~+125°C。
4、上下限报警温度显示精度为1°C。
3温度控制系统的硬件设计
3.1温度采集模块电路
3.11数字温度传感器18B20的工作原理
1.DS18B20的主要特性
(1)电压范围:
3.0~5.5V
(2)独特的单线接口方式。
(3)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
(4)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
(5)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
(6)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
2.DS18B20的外形和内部结构
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
3高速暂存存储器
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
4.DS18B20暂存寄存器分布
寄存器内容
字节地址
温度值低位(LSByte)
0
温度值高位(MSByte)
1
高温限值(TH)
2
低温限值(TL)
3
配置寄存器
4
保留
5
保留
6
保留
7
CRC校验值
8
ROM指令表
指令
约定代码
功能
读ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。
为操作各器件作好准备。
跳过ROM
0CCH
忽略64位ROM地址,直接向DS1820发温度变换命令。
适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
表6:
RAM指令表
指令
约定代码
功能
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。
结果存入内部9字节RAM中。
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器
48H
将RAM中第3、4字节的内容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中内容恢复到RAM中的第3、4字节。
读供电方式
0B4H
读DS1820的供电模式。
寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
3.12数字温度传感器18B20的工作电路
在总图中,由DS18B20,电阻组成,DS18B20的1引脚接地,2引脚通过电阻接VCC,3引脚与P3.2相连。
3.2显示电路
在总图中,通过三个液晶12864进行温度显示,为了节约I/0端口,利用锁存器进行片选,锁存器的输入端数据来自P0口。
3.3控制电路
在总图中,由四个独立键盘进行上下限温度的控制,键3按下一次显示上限温度,再按下一次显示当前温度;键4按下一次显示下限温度,再按一次显示当前温度;在键3按下的前提下,键1按下表示上限温度加1,键2按下表示下限温度减1;在键4按下的前提下,键1按下表示上限温度加1,键2按下表示下限温度减1
3.4报警电路
在总图中,在利用蜂鸣器报警,输入引脚为P2.3,低电平时蜂鸣器叫,且LED闪烁。
4温度控制系统的软件设计
4.1主程序流程图
中断服务程序流程图
主程序流程图
4.2读出温度子程序
uintget_temp()//读取寄存器中存储的温度数据
{
uchara,b;
//uinttemp;
floatf_temp;
dsreset();
delay
(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread();//读低8位
b=tempread();//读高8位
temp=b;
temp<<=8;//两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625;//温度在寄存器中为12位分辨率位0.0625°
temp=f_temp*10+0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
returntemp;//temp是整型
}
4.3温度转换命令子程序
voidtempchange(void)//
{
dsreset();
delay
(1);
tempwritebyte(0xcc);//写跳过读ROM指令
tempwritebyte(0x44);//写温度转换指令
}
4.4计算温度子程序
uintget_temp()//读取寄存器中存储的温度数据
{
uchara,b;
floatf_temp;
dsreset();
delay
(1);
tempwritebyte(0xcc);//向DS18B20写入一个字节的函数
tempwritebyte(0xbe);
a=tempread();//读低8位
b=tempread();//读高8位
temp=b;
temp<<=8;//两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625;//温度在寄存器中为12位分辨率位0.0625°
temp=f_temp*10+0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
returntemp;//temp是整型
}
4.5显示子程序
显示当前温度和上下限温度的显示函数之所以不同是因为当前温度值精确到0.5摄氏度,而上下限温度精确到1度。
4.51显示当前温度子程序
voiddisplay(ucharnum,uchardat)
{
uchari;
dula=0;
P0=table[dat];
dula=1;
dula=0;
P1=0XFF;
wela=0;
i=0XFF;
i=i&(~((0X01)<<(num)));
P0=i;
}
voiddis_tempnow(uintt)
{
uchari;
i=t/100;
display(0,i);
delay(6);
i=t%100/10;
display(1,i+10);
delay(6);
i=t%100%10;
display(2,i);
delay(4);
}
4.52显示上下限温度子程序
voiddisplay(ucharnum,uchardat)
{
uchari;
dula=0;
P0=table[dat];
dula=1;
dula=0;
P1=0XFF;
wela=0;
i=0XFF;
i=i&(~((0X01)<<(num)));
P0=i;
}
voiddis_temp(uchart)
{
uchari;
i=t/100;
display(0,i);
delay(6);
i=t%100/10;
display(1,i);
delay(6);
i=t%100%10;
display(2,i);
delay(4);
}
4.6键盘扫描控制子程序
voidkeyscan()
{
if(key3==0)
{
delay(10);
if(key3==0)
flag=!
(flag);
while(!
key3);
}
if(key4==0)
{delay(10);
if(key4==0)
set=!
(set);
while(!
key4);
}
if(key1==0)
{
delay(10);
if((key1==0)&&(flag==0))
{
high++;
}
if((key1==0)&&(set==0))
{
low++;
}
while(!
key1);
}
if(key2==0)
{
delay(10);
if((key2==0)&&(flag==0))
{
high--;
}
if((key2==0)&&(set==0))
{
low--;
}
while(!
key2);
}
}
6总结与体会
在这次设计中,我学会了很多东西,例如如何使用数字温度传感器,如何进行液晶12864扫描,以及键盘扫描。
在设计的过程中,尤其是编程时,我也走了很多弯路,例如,在设置预报警温度时,我曾试图从DS18B20中的九字节RAM中读取和写入上下限温度,但效果不好且不稳定,后来上网查并咨询老师,才了解到这种方法并不适用。
所以,有时候遇到问题也应及时与别人交流,这样才能少走弯路,提高效率。
7致谢
谢谢在这次实训中无私提供帮助的各位老师以及提供好的想法的同学们。
8参考文献
【1】《数字电子技术基础》,阎石主编
【2】郭天祥视屏教程
【3】马忠梅,张凯,等.单片机的C语言应用程序设计(第四版)北京航空航天大学出版社
附:
总程序
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharm;
sbitlcdrs=P1^0;
sbitlcdrw=P1^1;
sbitlcden=P1^2;
sbitbuzzer=P3^4;
sbitp07=P0^7;
sbitp00=P0^0;
sbitp01=P0^1;
sbitp02=P0^2;
sbitp03=P0^3;
ucharcodet0[]="wendu:
";
ucharcodet1[]="h:
l:
";
ucharcodewendu[]="0123456789-";//利用一个温度表解决温度显示乱码
chari=15,j=0;
ucharcodeduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//此数组为!
!
!
1~9!
!
!
ucharcodewei[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
//温度传感器定义
sbitDQ=P3^3;//定义ds18B20总线IO
voiddelay1(intz)
{
intx,y;
for(x=10;x>0;x--)
for(y=z;y>0;y--);
}
voidjianp()
{
if(p00==0)
{
delay1(5);
if(p00==0)
{
while(p00==0);
i++;
}
}
if(p01==0)
{
delay1(5);
if(p01==0)
{
while(p01==0);
i--;
}
}
if(p02==0)
{
delay1(5);
if(p02==0)
{
while(p02==0);
j++;
}
}
if(p03==0)
{
delay1(5);
if(p03==0)
{
while(p03==0);
j--;
}
}
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############液晶显示模块######################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
voiddelay(ucharz)
{
ucharx,y;
for(x=1000;x>1;x--)
for(y=z;y>1;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchardate)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(m=0;m<16;m++)
{
write_date(t0[m]);
delay(0);
}
write_com(0x80+0x40);
for(m=0;m<16;m++)
{
write_date(t1[m]);
delay(0);
}
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############液晶显示模块end###################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//**********************************************
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###########DS18B20温度读取模块##################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
voidtmpDelay(intnum)//延时函数
{
while(num--);
}
/******************************************************************************/
voidInit_DS18B20()//初始化ds1820
{
unsignedcharx=0;
DQ=1;//DQ复位
tmpDelay(8);//稍做延时
DQ=0;//单片机将DQ拉低
tmpDelay(80);//精确延时大于480us
DQ=1;//拉高总线
tmpDelay(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
tmpDelay(20);
}
/******************************************************************************/
unsignedcharReadOneChar()//读一个字节
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
tmpDelay(4);
}
return(dat);
}
/******************************************************************************/
voidWriteOneChar(unsignedchardat)//写一个字节
{
unsignedchari=0;
for(m=8;m>0;m--)
{
DQ=0;
DQ=dat&0x01;
tmpDelay
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 测量 设计 报告