DS18B20温度传感器蜂鸣器实验剖析.docx

上传人:b****4 文档编号:5719500 上传时间:2023-05-09 格式:DOCX 页数:16 大小:57.08KB
下载 相关 举报
DS18B20温度传感器蜂鸣器实验剖析.docx_第1页
第1页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第2页
第2页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第3页
第3页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第4页
第4页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第5页
第5页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第6页
第6页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第7页
第7页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第8页
第8页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第9页
第9页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第10页
第10页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第11页
第11页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第12页
第12页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第13页
第13页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第14页
第14页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第15页
第15页 / 共16页
DS18B20温度传感器蜂鸣器实验剖析.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DS18B20温度传感器蜂鸣器实验剖析.docx

《DS18B20温度传感器蜂鸣器实验剖析.docx》由会员分享,可在线阅读,更多相关《DS18B20温度传感器蜂鸣器实验剖析.docx(16页珍藏版)》请在冰点文库上搜索。

DS18B20温度传感器蜂鸣器实验剖析.docx

DS18B20温度传感器蜂鸣器实验剖析

 

学年论文

(课程论文、课程设计)

 

题目:

DS18B20温度传感器,蜂鸣器实验

姓名

学号:

所在学院:

专业年级:

 

2015年9月21日

2.1DS18B20传感器介绍

2.2数码管显示数字的基本原理

2.3电路的连接方法

3.2系统功能图

3.3电路的连接方法

 

1.绪论

1.1本论文的背景

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。

数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。

其中数字温度计就是一个典型的例子。

数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。

其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C52单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LED数码管实现温度值显示。

1.2关于AT89C52单片机基本概念

1)、何谓单片机一台能够工作的计算机要有这样几个部份构成:

CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:

串行口、并行输出口等)。

在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。

2)、MCS51单片机和8051、8031、89C51等的关系我们平常老是讲8051,又有什么8031,现在又有89C51,它们之间究竟是什么关系?

MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。

1.3使用的软件介绍

单片机的程序设计需要在特定的编译器中进行。

编译器完成对程序的编译、连接等工作并且最终生成可执行文件(.hex文件)。

对单片机程序的开发,一般采用Keil公司的μVision系列的集成开发环境。

μVision开发工具当前的最高版本是μVision4,它支持汇编语言以及C51语言的程序设计。

本章主要介绍μVision4集成开发环境,以及如何运用Vision4集成开发环境进行单片机程序设计与仿真。

KeilμVision系列是非常优秀的编译器,受到广大单片机设计者的广泛使用。

其特点如下:

●☆支持汇编语言、C语言等多种单片机设计语言;

●☆可视化的文件管理,界面友好;

●☆支持丰富的产品线,除了51以及兼容的单片机内核外,还增加了对ARM核产品的支持;

●☆具有完备的编译连接工具;

●☆具备丰富的仿真调试功能,可以仿真并口、串口、定时/计数器、中断、D/A和A/D资源;

●☆内嵌RTX-51实时多任务操作系统;

●☆支持在一个工作空间中进行多项目的程序设计;

●☆支持多极代码优化

1.4本论文的主要内容

基于单片机的DS18B20数字温度计设计。

单片机蜂鸣器设计。

更理解单片机怎样设计电路,理解单片机怎样用,为毕业设计建立了一个基础。

 

2基于单片机的DS18B20温度传感器用数码管显示温度

2.1DS18B20传感器介绍

~独特的单线接口仅需一个端口引脚进行通信

~简单的多点分布应用

~无需外部器件

~可通过数据线供电

~测温范围-55~+125℃,以0.5℃递增

~可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃

~应用包括温度控制、工业系统、消费品、温度计和任何热感测系统

~负压特性:

电源极性接反时,传感器不会因发热而烧毁,但不能正常工作

2.2.DS18B20外形及引脚说明

图3DS18B20外形及引脚

GND:

DQ:

单线运用的数据输入/输出引脚

VD:

可选的电源引脚

2.2数码管显示数字的工作原理介绍

数码管是一种常用数字显示原件,其内部是由多个并联的Led灯构成。

按照连接led的公共端的不同可以分为:

共阴极数码管、共阳极数码管两种。

数码管按照顺序依次排列,有数学里个位、十位、百位、千位……,对应与每一位数码管就有数码管的为选概念,共阳极数码管高电平选通,共阴极数码管低电平选通;对于单个的数码管每一个笔划,国际上有统一的规范,按顺时针顺序排列:

a、b、c、d、e、f、g、h是数码管的段信号。

由此差别就晓得数码管的单片机控制方法了。

图4.13数码管示意图

首先使用Proteus绘制数码管显示电路,先添加数码管原件,此处绘制电路选用共阴极数码管。

单机键盘P的快捷键调出原件对话框,输入7seg就可以看到:

6位的数码管单个数码管的形状如上图所示:

内部由8个LED灯构成,其中HGFEDCBA为段码,由高到低的顺序排列。

由于我们使用的是共阴数码管,把段码相应的位置2,同时把公共端(又称位选端)置0,相应的数码管发光。

如上显示数字“6”,这相应的段码为0x7d,即二进制01111101.共阴数码管段码显示0~F列举如下:

0x3f,0x06,0x5b,0x4f,0x66,//0~4

0x6d,0x7d,0x07,0x7f,0x6f,//5~9

0x77,0x7c,0x39,0x5e,0x79,//A~E

2.3电路的连接方法

VCC链接到单片机的VCC端口,把GND端口链接到GND端口,然后DQ端口链接到单片机的P0.5端口。

然后把单片机是上面的P0口链接到数码管,按循序链接到别的。

2.4系统功能方框图

本方案设计的系统由单片机系统、温度传感器、数码管显示模块、其总体架构如下图:

测温电路

时钟、复位电路

显示电路

驱动电路

 

图1系统总体方框图

5系统的程序

DS18B20单片机测温度系统程序

#include"reg52.h"

#include"intrins.h"

#defineSkipRom0xcc

#defineConvertTemperature0x44

#defineReadScratchpad0xbe

sbitDQ=P2^7;

unsignedintbuffer[6];

unsignedcharcodebuff[12]={0X3f,0X06,0X5b,0X4f,0X66,

0X6d,0X7d,0X07,0X7f,0X6f,0x40,0x00

};//数字0~9及"EP=OC"共阴数码管代码

//**************延时**********************

//函数名称:

voidOne_Wire_Delay(unsignedchardelay_time)

//函数功能:

延时

//函数参数:

delay_time

//*******************************************

voidOne_Wire_Delay(unsignedchardelay_time)

{

while(delay_time)delay_time--;//延时时间:

=(8+delay_time*6)us;

}

//*********初始化***************************

//函数名称:

voidinit_ds18b20(void)

//函数功能:

初始化DS18B20

//函数参数:

//*******************************************

voidinit_ds18b20(void)

{

DQ=0;//复位信号

One_Wire_Delay(50);//延时600us

DQ=1;

One_Wire_Delay(4);//延时30us

while(DQ==1);

One_Wire_Delay(52);//延时300us

DQ=1;

_nop_();

}

//***********写一个字节*************************

//函数名称:

voidwr_byte(unsignedintwdata)

//函数功能:

DS18B20写一个字节

//函数参数:

wdata

//*******************************************

voidwr_byte(unsignedintwdata)

{

unsignedintn;

for(n=0;n<8;n++)

{

DQ=0;

_nop_();

if(wdata&0x01==1)

DQ=1;

One_Wire_Delay(20);//延时128us

wdata=wdata>>1;

DQ=1;

_nop_();

}

One_Wire_Delay(5);//延时128us

}

//***************读一个字节*********************

//函数名称:

unsignedintrd_byte(void)

//函数功能:

DS18B20读一个字节

//函数参数:

wdata

//*******************************************

unsignedintrd_byte(void)

{

unsignedintm,bb=0;

bitb;

for(m=0;m<8;m++)

{

DQ=0;

_nop_();

DQ=1;

b=DQ;

One_Wire_Delay(12);//延时70us

if(b)

bb|=0x01<

DQ=1;

_nop_();

}

One_Wire_Delay(10);//延时128us

return(bb);

}

//***************读ds18b20*********************

//函数名称:

voidrd_ds18b20(void)

//函数功能:

读DS18B20

//函数参数:

//*******************************************

voidrd_ds18b20(void)

{

unsignedintmsb=0,lsb=0;

unsignedchart1=0;

unsignedintt2=0;

unsignedintflag_1;

init_ds18b20();

wr_byte(SkipRom);

_nop_();

wr_byte(ConvertTemperature);

One_Wire_Delay(5);//延时40us

init_ds18b20();

wr_byte(SkipRom);

wr_byte(ReadScratchpad);//准备读温度数据

lsb=rd_byte();

msb=rd_byte();

//One_Wire_Delay(120);//延时1ms

if((msb&0xf0)>1)

flag_1=1;

elseflag_1=0;

if(flag_1)

{

msb=~msb;

lsb=~lsb+1;

}

t1=(msb<<4)|(lsb>>4);//整数部分

t2=(lsb&0x0f)*0.0625*10000;

//if(flag)

//{

//t1=~t1;

//t2=~t2+1;

//}

//t2=t2*0.06*100;

if(flag_1)

{buffer[0]=10;}//负数

else{buffer[0]=11;}

buffer[1]=t1/100;

buffer[2]=(t1/10)%10;

buffer[3]=t1%10;

buffer[4]=t2/1000;

buffer[5]=(t2%1000)/100;

//buffer[6]=(t2%100)/10;

//buffer[7]=t2%10;

}

//************************************

//***************ds18b20显示*********************

//函数名称:

voiddisplay(void)

//函数功能:

DS18B20显示

//函数参数:

//*******************************************

voiddisplay(void)

{

unsignedintj,b=0xdf,k;

for(j=0;j<6;j++)

{

P1=b;

if(j==3)

{P0=buff[buffer[j]]|0x80;}

else

{P0=buff[buffer[j]];}

b=(b>>1)|0x80;

for(k=0;k<5;k++)

{

One_Wire_Delay(60);//延时20us

}

}

}

voidmain(void)

{

while

(1)

{

rd_ds18b20();

display();

}

}

 

3单片机蜂鸣器实验

51单片机的一个I/O口控制speaker发声,演唱祝你平安歌曲。

主要器件以及电路图

单片机——AT89C51,蜂鸣器——speaker。

3.2系统功能图

蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。

S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,

52单片机

3.3电路的连接方法

原理图见下面图

GND链接到实验班上面的GND端口,VCC连接到板子上面的VCC端口,然后把DQ段连接的到P0.4口。

然后启动电路下载就可以了。

 

蜂鸣器电路

时钟,复位电路

单片机

蜂鸣器电路的喇叭出歌声

 

  蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。

因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。

程序中改变单片机P3.7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。

另外,改变P3.7输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。

#include

#defineucharunsignedchar

sbitbeep=P0^4;

uchartimer0h,timer0l,time;

codeucharsszymmh[]={6,2,3,5,2,1,3,2,2,1,3,2,6,2,1

5,2,1,6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,

5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,

2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0};

codeucharFREQH[]={0xf2,0xf3,0xf5,0xf6,0xf7,0xf8,

0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc,0xfc,0xfd,

0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff};

codeucharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,

0xEE,0x44,0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};

voiddelay(uchart)

{

uchart1;

unsignedlongt2;

for(t1=0;t1

{

for(t2=0;t2<8000;t2++);

}

TR0=0;

}

voidsong()

{

TH0=timer0h;

TL0=timer0l;

TR0=1;

delay(time);

}

voidmain(void)

{

uchark,i;

TMOD=1;

EA=1;ET0=1;

while

(1)

{

i=0;

while(i<100)

{

k=sszymmh[i]+7*sszymmh[i+1]-1;

timer0h=FREQH[k];

timer0l=FREQL[k];

time=sszymmh[i+2];

i=i+3;

song();

}

}

}

voidt0int()interrupt1

{

TR0=0;

beep=!

beep;

TH0=timer0h;

TL0=timer0l;

TR0=1;

}

(部)

学院或教研室主任:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2