单片机DS18B20课程设计.docx
- 文档编号:3879587
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:23
- 大小:267.44KB
单片机DS18B20课程设计.docx
《单片机DS18B20课程设计.docx》由会员分享,可在线阅读,更多相关《单片机DS18B20课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
单片机DS18B20课程设计
无线单片机及应用
课程设计报告
设计题目:
温度计
专业:
物联网工程
组别:
温度计个人组
学生姓名:
周根弟学号:
1121316123
起止日期:
2014年6月16日~2014年6月20日
指导教师:
邵鹤帅胡荣林
目录
1内容摘要3
2温度计的概述及设计要求4
2.1温度计的概述4
2.2设计任务及要求4
2.2.1基本任务4
2.2.2设计要求4
3硬件设计5
3.1单片机系统5
2.1.1功能控制5
3.1.2单片机系统电路原理图5
3.2数字温度传感器模块6
3.2.1DS18B20性能6
3.2.2DS18B20外形及引脚说明6
3.2.3DS18B20接线原理图7
3.3显示电路7
3.4声光报警电路8
3.5数据处理8
4软件设计9
4.1主程序模块9
4.2读温度值模块9
4.2.1读值模块10
4.2.2DS18B20初始化子程序流程图11
4.2.3DS18B20写字节和读字节子程序12
4.3中断模块12
4.4温度设定、报警模块13
4.5数码管驱动模块13
5源程序15
6总结体会20
7参考文献20
1内容摘要
目前,单片机已经在测控领域中获得了广泛的应用,它除了可以测量电信以外,还可以用于温度、湿度等非电信号的测量,能独立工作的单片机温度检测、温度控制系统已经广泛应用很多领域。
单片机是一种特殊的计算机,它是在一块半导体的芯片上集成了CPU,存储器,RAM,ROM,及输入与输出接口电路,这种芯片称为:
单片机。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便的优点,使它迅速的得到了推广应用,目前已成为测量控制系统中的优选机种和新电子产品中的关键部件。
单片机已不仅仅局限于小系统的概念,现已广泛应用于家用电器,机电产品,办公自动化用品,机器人,儿童玩具,航天器等领域。
本次课程设计,就是用单片机实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。
本次采用DS18B20数字温度传感器来实现基于51单片机的数字温度计的设计。
传统的温度计有反应速度慢、读数麻烦、测量精度不高、误差大等缺点而下面利用集成温度传感器AD590设计并制作了一款基于AT89C51的4位数码管显示的数字温度计,其电路简单,软硬件结构模块化,易于实现。
该数字温度计利用AD590集成温度传感器及其接口电路完成温度的测量并转换成模拟电压信号,经由模数转换器ADC0804转换成单片机能够处理的数字信号,然后送到单片机AT89C51中进行处理变换,最后将温度值显示在D2、D1共2位七段码LED显示器上。
系统以AT89C51单片机为控制核心,2位温度数据显示电路以及外围电源、时钟电路等组成。
本次设计完成一个最小系统的设计,系统电路简单、操作简便,系统具有可靠性高、成本低、功耗小等优点。
2温度计的概述及设计要求
2.1温度计的概述
数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。
其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C51单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LED数码管实现温度值显示。
利用集成温度传感器DS18B20设计并制作了一款基于AT89C51的2位数码管显示的数字温度计,其电路简单,软硬件结构模块化,易于实现。
2.2设计任务及要求
2.2.1基本任务
1.数字温度计利用DS18B20集成温度传感器及其接口电路完成温度的测量并转换成模拟电压信号,经由模数AD转换器转换成单片机能够处理的数字信号。
2.模拟电压信号送到单片机AT89C51中进行处理变换,最后将温度值显示在D2、D1共2位七段码LED显示器上。
3.系统以AT89C51单片机为控制核心,加上AT89C51测温电路、ADC模数转换电路、2位温度数据显示电路以及外围电源、时钟电路等组成。
2.2.2设计要求
1.5V供电;
2.温度采集采用DS18B20;
3.4位LED显示;
4.2个按键;
5.设计温度控制器原理图,学习用PROTEL画出该原理图,并用proteus进行仿真;
6.设计和绘制软件流程图,用C语言进行程序编写;焊接硬件电路,进行调试。
3硬件设计
3.1单片机系统
2.1.1功能控制
1.DS18B20数字温度传感器的初始化和读取温度值
2.LED数码管显示驱动与控制
3.按键识别和响应控制
4.温度设置和报警
5.温度值的存储和读取
3.1.2单片机系统电路原理图
图2单片机系统原理图
3.2数字温度传感器模块
3.2.1DS18B20性能
1.独特的单线接口仅需一个端口引脚进行通信
2.简单的多点分布应用
3.无需外部器件
4.可通过数据线供电
5.零待机功耗
6.测温范围-55~+125℃,以0.5℃递增
7.负压特性:
电源极性接反时,传感器不会因发热而烧毁,但不能正常工作
3.2.2DS18B20外形及引脚说明
图3DS18B20外形及引脚
1.GND:
地
2.DQ:
单线运用的数据输入/输出引脚
3.VD:
可选的电源引脚
3.2.3DS18B20接线原理图
单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。
图4DS18B20接线原理图
3.3显示电路
LED数码管显示采用动态扫描方式,能简化电路布线,节约单片机I/O端口。
段码和位码由单片机P0送出,分别用74HC673N锁存。
图9数码管驱动显示电路
3.4声光报警电路
当温度超过设定温度值时,实现声光报警,蜂鸣器鸣叫、8个发光二极管点亮。
蜂鸣器由单片机P2^3口控制,用三极管驱动,发光二极管接单片机P1口,由74HC673N锁存。
图10声光报警电路
3.5数据处理
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
图7字节分配
4软件设计
4.1主程序模块
主程序需要调用3个子程序,分别为:
1.实时温度显示子程序:
驱动数码管把实时温度值送出在LED数码管显示
2.温度设定、报警子程序:
设定报警温度值,当温度超过该值时产生报警,即驱动蜂鸣器鸣叫、8个发光二极管发光
主程序流程图:
定时器初始化、启动
显示实时温度
温度设定、报警
完成温度的复位
图12主程序流程图
4.2读温度值模块
读温度值模块需要调用4个子程序,分别为:
1.DS18B20初始化子程序:
让单片机知道DS18B20在总线上且已准备好操作
2.DS18B20写字节子程序:
对DS18B20发出命令
3.DS18B20读字节子程序:
读取DS18B20存储器的数据
4.延时子程序:
对DS18B20操作时的时序控制
4.2.1读值模块
数据转换处理
读取温度值高低位
跳过读序列号
DS18B20初始化
延时
启动温度转换
跳过读序列号
DS18B20初始化
返回
图13读温度值子程序流程图
4.2.2DS18B20初始化子程序流程图
DQ为低电平?
延时15~60ms
DQ拉高电平
延时>480ms
DQ复位0
稍延时
DQ置高电平
N
返回
Y
图14DS18B20初始化子程序流程图
4.2.3DS18B20写字节和读字节子程序
图15DS18B20写字节子程序流程图图16DS18B20读字节子程序流程图
4.3中断模块
中断采用T0方式1,初始值定时为50ms。
中断模块需调用两个子程序:
1.读温度值子程序:
定时读取温度值,实时更新温度值
2.记录温度值子程序:
定时记录温度值,供查询使用
把这两个子程序放在中断的原因是,不会因为调整报警温度或查询历史温度值而停止更新温度值和记录温度值。
中断模块流程图:
1秒?
计数值加1
定时器重置初值
读温度值
Y
记录温度值
N
图17中断模块流程图
4.4温度设定、报警模块
此模块跟温度查询模块类似,需要接受按键输入,进入模块界面后,按加减键分别上调和下调设定报警温度值,当实时温度值超过设定值时驱动蜂鸣器发声,并点亮8位发光二极管,实现声光报警。
4.5数码管驱动模块
本设计数码管通过锁存器接单片机P0口,采用动态扫描驱动7段LED数码管进行显示,需调用延时子程序以稳定显示。
模块流程图如下:
P0清零
关位选
送位码
开位选
P0置高
关段选
开段选
延时
关段选
送段码
返回
图20数码管驱动模块流程图
5源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
/*************************变量定义************************************/
sbitDQ=P2^2;//ds18b20端口
sbitbeep=P2^3;//蜂鸣器使能端
sbitdula=P2^6;//数码管段选使能
sbitwela=P2^7;//数码管位选使能
sbitalarm=P3^6;//设定报警功能键
ucharcodetabled[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0~9的七段数码管段码
0x40,0x63,0x39};//-c的段码
ucharcodetablew[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//1~8个数码管的位选码
uintcountmin;//计数变量
ucharalanum=30;//报警温度值,初始值为30摄氏度
/**********************函数声明***************************************/
voiddelay1(ucharMS);//动态扫描延时子程序
voiddelay(uchari);//DS18B20工作延时子程序
voidInit_DS18B20();//DS18B20初始化子程序
voidWriteOneChar(unsignedchardat);//向DS18B20写一字节数据
ucharReadOneChar(void);//向DS18B20读一字节数据
voidGetTemperature();//由DS18B20产生温度值
voidDisplay(ucharwei,ucharduan);//数码管驱动子程序
voidAlarm();//温度报警
voidShowtemperature(uchartt);//温度显示
/*********************主函数*******************************************/
voidmain()
{
TMOD=0x01;//定时器初始化,定时器0方式1
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
EA=1;//开中断
ET0=1;
TR0=1;//启动定时器
while
(1)
{
Showtemperature(temperature);//显示实时温度
Alarm();//温度设定、报警
}
}
/************************动态扫描延时函数********************************/
voiddelay1(ucharMS)
{
inti,j;
for(i=80;i>0;i--)
for(j=MS;j>0;j--);
}
/************************DS18B20工作延时函数*****************************/
voiddelay(uchari)
{
while(i--);
}
/*************************DS18B20初始化函数******************************/
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时大于480us
DQ=1;//拉高总线
delay(10);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(5);
while(!
x)
{
x=DQ;
}
}
/*************************读一个字节**************************************/
ucharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
/**************************写一个字节*************************************/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(5);
}
/*************************产生温度值***************************************/
voidGetTemperature()
{
uchartempL,tempH;//分别为数据低位和高位
uinttemp;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序列号的操作
WriteOneChar(0x44);//启动温度转换
delay(200);
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
tempL=ReadOneChar();//读出温度低位LSB
tempH=ReadOneChar();//读出温度高位MSB
temp=tempH*16+tempL/16;//tempL右移四位去掉小数位
temperature=temp&0xff;//测量0~50度,只取temp低八位
}
/**********************数码管驱动函数*************************************/
voidDisplay(ucharwei,ucharduan)
{
dula=0;
P0=0xff;
wela=1;
P0=tablew[wei];
wela=0;
P0=0;
dula=1;
P0=tabled[duan];
dula=0;
delay1
(1);
}
/**********************温度显示函数**************************************/
voidShowtemperature(uchartt)
{
Display(2,tt/10);//显示温度数值
Display(3,tt%10);
Display(4,11);//显示摄氏度单位
Display(5,12);
}
/***************************报警函数************************************/
voidAlarm()
{
bitflag;
if(alarm==0)
{
delay1(80);//延时消抖
if(alarm==0)
{
flag=1;
}
}
while(flag)
{
if(add==0)
{
delay1(z);//延时消抖
if(add==0)
{
alanum++;//add键按下,上调设定值
if(alanum==51)
{
alanum=0;//最大值为50摄氏度,显示
}
}
}
}
Showtemperature(alanum);
Display(0,10);//选中数码管的其他空闲位
Display(1,10);//区别于实时温度显示“-- --”
Display(6,10);
Display(7,10);
if(temperature>alanum)//此处设置报警可以保证调整设定值时即可及时报警
{
beep=0;//温度大于设定值,声光报警
P1=0;
}
else
{
beep=1;//温度不大于设定值即不报警
P1=0xff;
}
}
if(temperature>alanum)//此处设置报警即保证即使没有进入设置界面任然可以报警
{
beep=0;//温度大于设定值,声报警
P1=0;
}
else
{
beep=1;//温度不大于设定值即不报警
P1=0xff;
}
}
/***********定时器中断0,用于温度检测时间间隔和记录数据时间间隔**************/
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//50ms
countsec++;
countmin++;
if(countsec==20)//1s
{
countsec=0;
GetTemperature();//一秒钟更新一次温度值
}
Keeprecord();//定时记录温度值
}
6总结体会
经过将近一周的单片机课程设计,终于完成了我们的数字温度计课程设计,虽然课程设计做的不是特别好,但从心底里说,还是高兴的,因为我们收获了很多很多,这些在平常的学习当中是收获不到的,但高兴之余不得不静下来深思!
在本次课程设计的过程中,我们发现很多的问题,虽然以前还做过类似的课程设计,但这次设计真的让我学到了很多、长进了很多,单片机课程设计的重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过一些程序,但觉的要写好一个程序并不是一件简单的事,所以我们只能不断的调试不断的修改才能把程写的更好。
所以得出结论是:
有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握,实践才是硬道理,实践是检验真理的唯一标准。
并且电路板的焊接非常不理想,主要原因还是初次接触焊接,没有掌握焊接的技巧,而自己也没有向有经验的老师请教,这是这次实习的一大败笔。
通过这次的课程设计,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,这样我们才能更好的理解、掌握这些知识,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
7参考文献
[1]
[2] 周月霞,孙传友.DS18B20硬件连接及软件编程.传感器世界,2001,12:
25-29
[3] 马云峰.单片机与数字温度传感器DS18B20的接口设计.计算机测量与控制,2002,10(4):
278-280
[4]郭天祥,徐玮.C51单片机高效入门(第2版).北京:
机械工业出版社,2010.
[5]龙脉工作室,刘鲲,孙春亮(修订版).北京:
人们邮电出版社,2010.
[6]李光弟,朱月秀,冷祖祁.单片机基础(第三版).北京:
航空航天大学出版社,2007.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 DS18B20 课程设计