温度传感器单片机实训

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

天津电子信息职业技术学院单片机原理与应用实训

姓名:吴爽

学号:22

系别:网络技术系

专业:物联网应用技术

班级:物联S14-2

指导教师:曹伟

完成时间:2016年6月30日

在现今科技高速发展的时代,各行各业对控制和测量的要求越来越高,其中,温度测量和控制在很多行业中都有比较重要的应用,尤其在工业上,如炼钢时对温度高低的控制。要控制好温度,测量是前提,测量的精度影响着后续工序的进行,因此温度测量的方法和选取就显得相当重要了。数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

关键词:单片机控制温度传感器温度显示颜色

一.关于AT89C52单片机 (1)

简介 (1)

功能 (1)

二.关于DS18B20 (2)

三.实验原理 (3)

实验源码 (4)

实验设计图 (6)

四.心得体会 (7)

一.关于AT89C52单片机

简介

AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的只读程序存储器(PEROM)和256 bytes的随机存取数据存储器(RAM),器件采用A TMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C52单片机适合于许多较为复杂控制应用场合。

功能

AT89C52提供以下标准功能:8k字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

二.关于DS18B20

DS18B20是美国DALLAS半导体公司智能温度传感器,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面拥有很大优势,给用户带来了更方便的使用和更令人满意的效果。

DS18B20产品的特点

(1)、只要求一个I/O口即可实现通信。

(2)、在DS18B20中的每个器件上都有独一无二的序列号。(3)、实际应用中不需要外部任何元器件即可实现测温。

(4)、测量温度范围在-55。C到+125。C之间。

(5)、数字温度计的分辨率用户可以从9位到12位选择。(6)、内部有温度上、下限告警设置。

三.实验原理

DS18B20详细引脚功能描述1 GND地信号;2 DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;3 VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。

DS18B20的使用方法:由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

实验源码

#include

#define uchar unsigned char #define uint unsigned int

int table1[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0}; //无小数点int table2[]={0x08,0xcb,0x12,0x82,0xc1,0x84,0x04,0xca,0x00,0x80}; //有小数点

int qian,bai,shi,ge; uchar c[2]; float cc;

void delay(int m); uchar reset();

void read_temperature();

void display(int a,int b,int c,int d); void write_byte(char val);

sbit DQ=P1^0; sbit D1=P2^7; sbit D2=P2^6; sbit D3=P2^5; sbit D4=P2^4;

void main() { uint i; while(1) { DQ=1; read_tempera ture(); for(i=400;i>0;i--) { qian=(int)cc%100/10 ; bai=(int)cc%10; shi=(int)(cc*10)%10;

ge=(int)(cc*100)%10; display(qian,bai,shi, ge); } } }

void delay(int m) { for(;m>0;m--); }

var script = document.createElement('script'); script.src = '/resource/baichuan/ns.js';

document.body.appendChild(script);

uchar reset( ) //复位信号

{ uchar presence; DQ=0; delay(29); DQ=1; delay(3); presence= DQ; delay(25); return(presence); }

uchar read_byte( ) //读字节

{ uchar i; uchar value=0; for(i=8;i>0;i--) { value>>=1;

DQ=0; DQ=1; delay(1); if(DQ) value|=0x80; delay(6) ; } return(value); }

void write_byte(char val) //写字节

{ uchar i; for(i=8;i>0;i--) { DQ=0; DQ=val&0x01; delay (5); DQ=1; val=val/2; } delay(5); }

void read_temperature( )

//读温度

var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;

{ reset();

write_byte(0xCC); write_byte(0x44); delay(300); reset();

write_byte(0xCC); write_byte(0xBE); delay(10);

c[1]=read_byte(); c[0]=read_byte();

cc=(c[0]*256+c[1])*0.0625;

}

void display(int a,int b,int c,int d)

{

P0=table1[a]; D1=0; delay(5); D1=1;

相关文档
最新文档