项目9-数字温度计.doc_第1页
项目9-数字温度计.doc_第2页
项目9-数字温度计.doc_第3页
项目9-数字温度计.doc_第4页
项目9-数字温度计.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目9 数字温度计一、目标1、掌握单总线测温器件DS18B20的工作原理;2、掌握51单片机与DS18B20通信接口技术。二、项目内容和要求用单总线温度测量器件DS18B20及51单片机设计一个简易数字温度计,用4位数码管分别显示温度值的符号位、2位整数和一位小数。三、PROTEUS软件仿真电路四、数字温度计的C程序设计部分参考程序:1、18b20初始化函数void Init_DS18B20(void) unsigned char x=0; DQ = 0; /DQ复位 delay(29); /稍做延时 DQ = 1; /单片机将DQ拉高 delay(3); /延时,大于480us x=DQ; /延时后,如果x=0则初始化成功 x=1则初始化失败 delay(25);2、读一个字节函数unsigned char Read_byte(void)unsigned char i,j,m;unsigned char dat = 0;for (i=0;i8;i+)DQ = 0; / 给脉冲信号m=1;DQ = 1; / 给脉冲信号for(j=0;j3;j+);if(DQ)dat+=(mi);delay(5);return(dat);3、写一个字节函数void Write_byte(unsigned char dat) unsigned char i,tem; for (i=0; ii;tem=tem&0x01;DQ = 0;if(tem=1) DQ=1; delay(5);DQ=1; delay(5); delay(5);4、读取温度函数void Read_T(void)unsigned char templ=0;unsigned char temph=0;unsigned char tval=0;unsigned char s=0;unsigned int datt=0;Init_DS18B20();/18b20初始化Write_byte(0xCC); / 跳过读序列号的操作Write_byte(0x44); / 启动温度转换delay(200);Init_DS18B20();Write_byte(0xCC); /跳过读序列号的操作 Write_byte(0xBE); /读取温度寄存器等,前两个就是温度templ=Read_byte();temph=Read_byte();/温度数据处理5、定时中断函数,用于数码管扫描和温度检测间隔void tim(void) interrupt 1 using 1 TH0=0xf7; /定时器重装值TL0=0xf8;num+;if (num=100)num=0;flag_get=1; /标志位有效count+; /数码管扫描if(count=1)P2=0;P0=str0;if(count=2)P2=1;P0=str1;if(count=3)P2=2;P0=str2;if(count=4)P2=3;P0=str3;count=0;6、延时函数void delay(unsigned int n) int i; for(i=0;in;i+);五、项目总结/18B20单线温度检测的应用样例程序#include#include#define uchar unsigned char#define uint unsigned int;/*/sbit DQ=P33;/ds18b20 端口/*/ uchar temp;uchar flag_get,count,num;uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/7段数码管段码表共阴uchar str4;/*/void Read_T(void);void Init_DS18B20(void);unsigned char Read_byte(void);void Write_byte(unsigned char dat);void delay(unsigned int i);/*/main()TMOD|=0x01;/定时器设置TH0=0xf7;TL0=0xf8;IE=0x82;TR0=1;P2=0x00; count=0;while(1) if(flag_get=1) /定时读取当前温度 Read_T(); flag_get=0;void tim(void) interrupt 1 using 1/中断,用于数码管扫描和温度检测间隔TH0=0xf7;/定时器重装值TL0=0xf8;num+;if (num=100)num=0;flag_get=1;/标志位有效/数码管扫描count+;if(count=1)P2=0;P0=str0;if(count=2)P2=1;P0=str1;if(count=3)P2=2;P0=str2;if(count=4)P2=3;P0=str3;count=0;/*/void delay(unsigned int n)/延时函数 int i; for(i=0;in;i+);/*/18b20初始化函数void Init_DS18B20(void) unsigned char x=0; DQ = 0; /DQ复位 delay(29); /稍做延时 DQ = 1; /单片机将DQ拉低 delay(3); /精确延时 大于 480us x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(25);/读一个字节unsigned char Read_byte(void)unsigned char i,j,m;unsigned char dat = 0;for (i=0;i8;i+)DQ = 0; / 给脉冲信号m=1;DQ = 1; / 给脉冲信号for(j=0;j3;j+);if(DQ)dat+=(mi);delay(5);return(dat);/写一个字节void Write_byte(unsigned char dat) unsigned char i,tem; for (i=0; ii;tem=tem&0x01;DQ = 0;if(tem=1) DQ=1; delay(5);DQ=1; delay(5); delay(5);/读取温度void Read_T(void)unsigned char templ=0;unsigned char temph=0;unsigned char tval=0;unsigned char s=0;unsigned int datt=0;Init_DS18B20(); /18b20初始化Write_byte(0xCC); / 跳过读序号列号的操作Write_byte(0x44); / 启动温度转换delay(200);Init_DS18B20();Write_byte(0xCC); /跳过读序号列号的操作 Write_byte(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度templ=Read_byte();temph=Read_byte(); s=temph&0x80; /判断温度的正负if(s=0) /正温度值tval=(temph4); /组合为8位有效温度值str3=0x00; /符号位不显示str2=tabtval/10; /十位温度str1=tabtval%10|0x80; /个位温度tval=templ&0x0f;str0=tabtval*5/8;else /负温度值 datt=(te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论