温度传感器单片机实训
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;