DS18B20温度检测器汇编Word文档下载推荐.docx
- 文档编号:20020083
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:19
- 大小:443.57KB
DS18B20温度检测器汇编Word文档下载推荐.docx
《DS18B20温度检测器汇编Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DS18B20温度检测器汇编Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
2.1芯片介绍1
2..1.1DS18B20概述1
2.1.2AT89C51介绍2
2.2系统结构框图3
2.3程序原理叙述3
3.电路设计3
3.1硬件设计3
3.1.1单片机最小系统电路4
3.1.2温度采集模块5
3.2软件设计5
3.2.1流程框图6
3.2.2程序设计6
4、系统测试15
5、总结16
.参考文献17
1设计要求及方案选择
1.1设计要求
1制作完成温度检测系统
2温度检测精度1度
3显示时间日期
1.2方案选择
方案一:
采用热敏电阻,热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的,在温度测量系统中,也常采用单片温度传感器,比如AD590,LM35等。
但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使测温系统的硬件结构较复杂。
要用到复杂的算法,一定程度上也增加了软件实现的难度。
方案二:
采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。
便于单片机处理及控制,节省硬件电路。
且该芯片的物理化学性很稳定,此元件线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C512构成的温度装置,它直接输出温度的数字信号到微控制器。
每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。
综上分析,我们选用第二种方案。
2理论分析与设计
2.1芯片介绍
2..1.1DS18B20概述
DS18B20是Dallas公司继DS1820后推出的一种改进型智能数字温度传感器,与传统的热敏电阻相比,只需一根线就能直接读出被测温度值,并可根据实际需求来编程实现9~12位数字值的读数方式。
DS18B20封装形式及引脚功能
图2-1-1DS18B20封装形式和引脚功能
如图2-1-1所示,DS18B20的外形如一只三极管,引脚名称及作用如下:
GND:
接地端。
DQ:
数据输入/输出脚,与TTL电平兼容。
VDD:
可接电源,也可接地。
因为每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。
采用数据总线供电方式时VDD接地,可以节省一根传输线,但完成数据测量的时间较长;
采用外部供电方式则VDD接+5V,多用一根导线,但测量速度较快
2.1.2AT89C51介绍
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
。
小管脚(40脚)的AT89C51单片机。
如图2-1-2所示:
图2-1-2AT89C51单片机
2.2系统结构框图
系统主要包括数据采集模块,单片机控制模块,显示模块,驱动电路五个部分。
系统框图如图2-2-1所示。
图2-2-1系统结构框图
2.3程序原理叙述
其中温度采集模块负责利用DS18B20传感器实时采集温度数据,并将采集到的温度数据传输到单片机控制模块,单片机控制模块将检测到的数据进行处理后送到数码管显示模块进行显示。
3.电路设计
3.1硬件设计
3.1.1单片机最小系统电路
在课题设计的温度控制系统设计中,控制核心是AT89C51单片机,该单片机为51系列增强型8位单片机,它有32个I/O口,片内含4KFLASH工艺的序存储器,便于用电的方式瞬间擦除和改写,而且价格便宜,其外部晶振为12M一个指令周期为1μS。
使用该单片机完全可以完成设计任务,其最小系统主
包括:
复位电路、震荡电路以及存储器选择模式,如图3-2-1所示
图3-1-2单片机最小电路
3.1.2温度采集模块
在硬件完成后,为了使作品能够实现预定的功能和效果,因此需要对环境温度进行采集.在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接如图3-1-3所示.
图3-1-2温度传感器接口
3.1.3温度显示模块
(1)采用LCD1602液晶显示
工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
(2)采用数码管显示
LED数码管的主要特点如下:
(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。
(2)发光响应时间极短(<
0.1μs),高频特性好,单色性好,亮度高。
(3)体积小,重量轻,抗冲击性能好。
(4)寿命长,使用寿命在10万小时以上,甚至可达100万小时。
成本低。
因此它被广泛用作数字仪器仪表、数控装置、计算机的数显器件。
由于被实验设计难度较低,且要求不多,选择数码管显示简易易懂。
图3-1-2数码管结构图
3.2软件设计
3.2.1流程框图
图3-2-1程序流程框图
4.系统仿真
4.1开发环境
Keil开发环境是德国知名公司Keil开发的嵌入式微控制器软件开发平台,也是目前ARM嵌入式单片机开发的主流工具。
启动界面如图所示,并且在调试程序、软件仿真方面有比较强大的功能。
在该开发工具中链中包含了指令模拟器,用户可以通过使用该功能来模拟“纯粹”的代码,不需要外部硬件平台的支持也可以在软件平台上模拟代码运行,基本界面框架如下图所示。
4.2构建工程
1创建工程文件
在KeilMDK开发环境中,用户可以通过选择“NewProject”下拉菜单创建一个新的工程。
此时,系统会弹出一个对话框,要求用户为新建的工程起一个名字。
在这里可以创建一个名为“TEST”文件夹。
在工程文件夹里主要存放工程项目的所有文件。
2选择芯片
在创建完存放工程文件代码的文件夹后,用户可以根据实际需要选择相应的芯片。
3新建文件及添加源代码文件
在建立工程项目文件后,用户根据需要在工程项目内添加源程序代码。
通过菜单“File”|“New”或者单击工具栏上的“新建文件”按钮,就可已在项目工程窗口右侧打开一个文本编辑窗口,用户可以在该窗口输入程序代码及头文件。
4最后是编译仿真。
结果如图。
5.代码实现
//proteus仿真论坛:
#defineucharunsignedchar
#defineuintunsignedint
#defineDQP3_7
#include<
AT89X51.H>
uintsec;
uintmin=50;
uinthour=9;
uintday=22;
uintmonth=6;
uintyearl=15;
uintyearh=20;
uinttcnt;
uintcursor=0;
uchara=0xff;
ucharcodeSeg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay(uintt)
{
uinti;
while(t--)
{for(i=0;
i<
125;
i++);
}
voidTdelay(unsignedinti)
while(i--);
voidKdelay()
uchari,j;
for(i=100;
i>
0;
i--)
for(j=248;
j>
j--);
voidInit_DS18B20(void)
unsignedcharx=0;
DQ=1;
Tdelay(8);
DQ=0;
Tdelay(80);
Tdelay(14);
Tdelay(20);
//读一个字节
ReadOneChar(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i--)
{
dat>
>
=1;
if(DQ)
dat|=0x80;
Tdelay(4);
}
return(dat);
//写一个字节
WriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=8;
i>
i--)
DQ=dat&
0x01;
Tdelay(5);
//读取温度
ReadTemperature(void)
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
WriteOneChar(0xBE);
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<
<
=8;
t=t|a;
tt=t*0.0625;
t=tt*10+0.5;
return(t);
voiddisplay(ucharL1,ucharL2,ucharL3,ucharL4,ucharL5,ucharL6,ucharL7,ucharL8,ucharL9,ucharL10,ucharL11,ucharL12,ucharL13,ucharL14,ucharL15,ucharL16)
P2=0x7F;
P0=L1;
delay
(1);
//yearh
P2=0xBF;
P0=L2;
if(cursor==6){P2=0xDF|a;
P0=L3;
}else{P2=0xDF;
}//yearl
if(cursor==6){P2=0xEF|a;
P0=L4;
}else{P2=0xEF;
if(cursor==5){P2=0xF7|a;
P0=L5;
}else{P2=0xF7;
}//month
if(cursor==5){P2=0xFB|a;
P0=L6;
}else{P2=0xFB;
if(cursor==4){P2=0xFD|a;
P0=L7;
}else{P2=0xFD;
}//day
if(cursor==4){P2=0xFE|a;
P0=L8;
}else{P2=0xFE;
P2=0xFF;
if(cursor==3){P1=0x7F|a;
P0=L9;
}else{P1=0x7F;
}//hour
if(cursor==3){P1=0xBF|a;
P0=L10;
}else{P1=0xBF;
if(cursor==2){P1=0xDF|a;
P0=L11;
}else{P1=0xDF;
}//min
if(cursor==2){P1=0xEF|a;
P0=L12;
}else{P1=0xEF;
if(cursor==1){P1=0xF7|a;
P0=L13;
}else{P1=0xF7;
}//sec
if(cursor==1){P1=0xFB|a;
P0=L14;
}else{P1=0xFB;
P1=0xFD;
P0=L15;
//temp
P1=0xFE;
P0=L16;
P1=0xFF;
main()
{
TMOD=0x02;
//设置模式为定时器T0的模式2(8位自动重装计数初值的计数值)
TH0=0x06;
//设置计数器初值,靠TH0存储重装的计数值X0=256-250=6
TL0=0x06;
TR0=1;
//启动T0
ET0=1;
//开启定时器T0中断允许
EA=1;
//开启中断总控制
while
(1)
if(P3_0==0)
Kdelay();
cursor++;
if(cursor>
=7){cursor=0;
if(P3_1==0)
if(cursor==1){sec++;
if(sec==60)sec=0;
if(cursor==2){min++;
if(min==60)min=0;
if(cursor==3){hour++;
if(hour==24)hour=0;
if(cursor==4){day++;
if(day==31)day=0;
if(cursor==5){month++;
if(month==12)month=0;
if(cursor==6){yearl++;
if(yearl==100)yearl=0;
if(cursor==7){yearh++;
if(yearh==30)yearh=20;
if(P3_2==0)
if(cursor==1){sec--;
if(cursor==2){min--;
if(cursor==3){hour--;
if(cursor==4){day--;
if(cursor==5){month--;
if(cursor==6){yearl--;
if(cursor==7){yearh--;
i=ReadTemperature();
display(Seg[yearh/10],Seg[yearh%10],Seg[yearl/10],Seg[yearl%10],Seg[month/10],Seg[month%10],Seg[day/10],Seg[day%10],Seg[hour/10],Seg[hour%10],Seg[min/10],Seg[min%10],Seg[sec/10],Seg[sec%10],Seg[i/100],Seg[i/10%10]);
voidt0(void)interrupt1using0//t0的中断程序
tcnt++;
if(tcnt==4000)//定时器的定时计数,4000次250us为1秒
tcnt=0;
P3_3=~P3_3;
a=~a;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
min=0;
hour++;
if(hour==24)
hour=0;
day++;
if(month==2&
&
((yearl==0&
yearh%4==0)||(yearl!
=0&
yearl%4==0))&
day==30)day=1;
elseif(month==2&
day==29)day=1;
elseif((month==4||month==6||month==9||month==11)&
day==31)day=1;
elseif(day==32)day=1;
if(day==1)
month++;
if(month==13)
month=1;
yearl++;
if(yearl==100)
yearl=0;
yearh++;
if(yearh==100)
yearh=20;
5、总结
本设计是以温度采集及控制过程设计为总目标,以AT89C51单片机最小应用系统为总控制中心,辅助设计有温度采样电路、A/D转换接口、加热电路、LED数码管动态串行显示器等。
本设计的重点、难点是:
(1)要掌握温度传感器的原理、结构、应用等;
(2)考虑从非电量信号到电量信号的电路实现原理以及与单片机的接口;
(3)熟悉MCS-51编程的技术,实现单片机对温度的调节控制;
(4)整体电路的仿真调试。
本次设计优点:
采用的单片机AT89C51性价比高;
热敏电阻温度传感器转化温度的方法非常简洁且精度高、测试范围较广。
由于时间及精力所限,对温度控制系统做了整体设计,具体实现了其中的温度显示和时间日期显示,看起来更直观。
.参考文献
[1]郭天祥.51单片机C语言教程入门、提高、开发、拓展全攻略.北京:
电子工业出版社,2009
[2]姜志海、黄玉清、刘连鑫.单片机原理及应用.北京:
[3]林刚.常用电子元器件.北京:
机械工业出版社,2004.8.
[4]谭浩强,C程序设计[M].清华大学出版社,1998,1
[5]夏路易、石宗义,电路原理图与电路板设计教程Protel99SE[M].北京希望电子出版社,2002
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 温度 检测器 汇编