综合实验一 18B20温度采集实验.doc_第1页
综合实验一 18B20温度采集实验.doc_第2页
综合实验一 18B20温度采集实验.doc_第3页
综合实验一 18B20温度采集实验.doc_第4页
综合实验一 18B20温度采集实验.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

实验一 18B20温度采集实验一、实验目的 1. 掌握单片机与1-wire(一线器)的通信原理与编程方法;2. 掌握LED动态显示方法;3了解温度传感器原理;二、实验原理及实验内容1. 实验原理关于18B20工作原理请读者参考DALLAS公司资料。89S52控制DS18B20 完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。本实验系统挂接一个18B20芯片,可使用默认的12位转换精度,外接供电电源,单片机与18B20接口是用单片机的P2.4。2实验内容 a程序要求,参考给出的流程图,在Keil编译环境下变成程序,要求采集温度,如果超出报警温度范围则报警,报警通过实验箱上的蜂鸣器实现,报警温度可以通过键盘设置,最后,生成*.HEX文件。b通过ISP将生成的*.HEX文件下载到单片机中,允许程序。c观测LCD上的显示温度数据,通过键盘操作控制报警温度。图8-1 DS18B20温度采集系统流程图三、参考程序/DS18B20温度传感器程序#include #define Alarm 10sbit Beep=P34;sbit DQ=P24; /数据传输线接单片机的相应的引脚unsigned char tempL=0,tempH=0; /设全局变量unsigned char flag=0;unsigned int temperature,negtemper; /温度值保存在temperature里unsigned char idata addrdat2=0x0,0x0;unsigned char tab=0xc0,0xf9,0xa4,0xb0, /* 0 1 2 3 4 */0x99,0x92,0x82,0xf8,0x80,0x90; /* 5 6 7 8 9 */unsigned char tab1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; unsigned char dispbuf3=0,0,0;unsigned char warning=20;bit on=0,off=1; /* /延时子程序 /*void delay(unsigned int i) while(i-);void beep( bit i) Beep=i; /*/初始化程序Init_DS18B20(void) unsigned char x=0; DQ=1; /DQ先置高 delay(8); /稍延时 DQ=0; /发送复位脉冲 delay(85); /延时(480us) DQ=1; /拉高数据线 delay(14); /等待(1560us) x=DQ; /用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 delay(20); /* /读一个字节ReadOneChar(void) /主机数据线先从高拉至低电平1ms以上,再/使数据线升为高电平,从而产生读信号 unsigned char i=0; /每个读周期最短的持续时间为60us,各个读周期/之间必须有1ms以上的高电平恢复期 unsigned char dat=0; for (i=8;i0;i-) /一个字节有8位 DQ=1; delay(1); DQ=0; dat=1; DQ=1; if(DQ) dat|=0x80; delay(4); return(dat);/* /写一个字节WriteOneChar(unsigned char dat) unsigned char i=0; /数据线从高电平拉至低电平,产生写起始信号。/15ms之内将所需写的位送到数据线上, for(i=8;i0;i-)/在1560ms之间对数据线进行采样,如果是高电平就写1,低写0发生。 DQ=0; /在开始另一个写周期前必须有1ms以上的高电平恢复期。 DQ=dat&0x01; delay(5); DQ=1; dat=1; delay(4);/*ReadTemperature(void) Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的*作 WriteOneChar(0x44); /启动温度转换 delay(125); /转换需要一点时间,延时 Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的*作 WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); /读出温度的低位LSB tempH=ReadOneChar(); /读出温度的高位MSB temperature=(tempH*256)+tempL; /温度转换,把高低位做相应的运算转化为实际温度 return(temperature); /*void Dispbuf(unsigned int temper) dispbuf2=(temper4)/10;/取十位 dispbuf1=(temper4)%10;/取个位 if(temper&0x8)/小数位 dispbuf0=0x55; else dispbuf0=0; unsigned char getkey() /键盘扫描程序 P2=0xff; P2=0xfe; if (P2&0xff)!=0xfe) delay(5000); if(P2&0xff)!=0xfe) return P2;else P2=0xfd; else P2=0xfd; if (P2&0xff)!=0xfd) delay(5000);if (P2&0xff)!=0xfd) return P2;else P2=0xfb; else P2=0xfb;if (P2&0xff)!=0xfb) delay(5000); if (P2&0xff)!=0xfb) return P2; else P2=0xf7; else P2=0xf7;if (P2&0xff)!=0xf7) delay(5000); if (P2&0xff)!=0xf7) return P2; else return P2=0xfe; Inter0_process() interrupt 2 /外部中断1 unsigned char key; int i; unsigned char dis=0x01; unsigned int j; for(j=5000;j0;j-) key = getkey();/取键值 if (key = 0xee)/如1键按下温值递增 warning+; delay(8000); if (key=0xed) /5按下递减 warning-; delay(8000); if(key=0x77)/16键退出中断 j=1; for(i=0;i2;i+)/设置两位报警值在LED上显示 P1=dis; dis=1; if(i=0) P0=tabwarning%10; else P0=tabwarning/10; delay(200); dis=0x01; /* /主程序 main() unsigned char i,npos=0x01; P0=0xff; P2=0xff; P1=0xff; EX1=1; /开中断一 IT1=1; /下降沿触发 ET1=1; EA=1; /开总中断 while(1) if(temperature&0xf000)=0xf000) /判断是否是负温度 ReadTemperature(); for(i=0;i4;i+) /四位显示 negtemper=(temperature)+1; /取原码 Dispbuf(negtemper); /取位值 P1=npos; npos=1; /循环使能 if(i=1) /第二位显示有点 P0=tab1dispbufi; /查表显示 delay(700); else if(i=3) /显示负号 P0=0xbf; else P0=tabdispbufi; delay(700); npos=0x01; else /如不是负温度 for(i=0;i4)&0xff)=warning)/温值大于报警温值则报警 beep(on);/蜂鸣器响else beep(off);/不响 P1=npos;

温馨提示

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

评论

0/150

提交评论