DS18B20温度传感器蜂鸣器实验剖析.docx
- 文档编号:5719500
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:16
- 大小:57.08KB
DS18B20温度传感器蜂鸣器实验剖析.docx
《DS18B20温度传感器蜂鸣器实验剖析.docx》由会员分享,可在线阅读,更多相关《DS18B20温度传感器蜂鸣器实验剖析.docx(16页珍藏版)》请在冰点文库上搜索。
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; } 院 (部) 或 教 研 室 意 见 学院或教研室主任: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 温度传感器 蜂鸣器 实验 剖析