基于DS18B20的温度采集和显示.doc_第1页
基于DS18B20的温度采集和显示.doc_第2页
基于DS18B20的温度采集和显示.doc_第3页
基于DS18B20的温度采集和显示.doc_第4页
基于DS18B20的温度采集和显示.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

基于DS18B20温度采集和显示#includetypedef unsigned char uchar;typedef unsigned int uint8;typedef unsigned int uint16;sbit rs = P25;sbit rw = P26;sbit e = P27;sbit DQ = P23;sbit BEEP = P12;code uint8 xsH162 = 0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3,5,0,5,6,6,2,6,8,7,5,8,1,8,7,9,3;/换用二维数组code uint8 xsL162 = 0,0,2,5,5,0,7,5,0,0,2,5,5,0,7,5,0,0,2,5,5,0,7,5,0,0,2,5,5,0,7,5;code uchar cdis1 = DS18B20 OK ;code uchar cdis2 = TMP: ;code uchar cdis3 = TMP:-;code uchar cdis4 = DS18B20 ERR0R ;code uchar cdis5 = PLEASE CHECK ;uint8 x;uint8 WD_S6;uint8 ResultSignal;uint8 TB,TS,TG;uint8 tempL;uint8 tempH;uint8 ResultLH2;ResultLL2;ResultH;/结果的小数高位,低位、整数/*函数功能:延时子程序输入:k输出:无*/void delay(uint16 k) while(k-); /*名称:delay_50us()功能:50us非精确延时,晶振12MHz*/void delay_50us(uint8 a) uint8 i; for(;a0;a-) for(i=19;i0;i-); /*函数功能:DS18B20初始化子程序输入:无输出:无*/init_DS18B02() DQ = 1; delay(8); DQ = 0; delay(80); DQ = 1; delay(8); x = DQ; delay(4); return(x); /*函数功能:从DS18B20读一字节输入:无输出:dat*/readOnechar() uint8 i; uint8 dat; for(i=8;i0;i-) DQ = 0; dat=1; DQ = 1; if(DQ) dat|=0x80; delay(4); return(dat); /*函数功能:向DS18B20写一字节数据输入:dat输出:无*/WriteOnechar(uint8 dat) uint8 i; for(i=8;i0;i-) DQ = 0; DQ = dat&0x01; delay(4); DQ = 1; dat=1; delay(4); /*名称:writ_comd功能:向LCD写指令*/void write_comd(uint8 comd) rs = 0; rw = 0; e = 0; P0 = comd; delay_50us(2); e = 1; delay_50us(3); e = 0; /*名称:write_data功能:向LCD写数据*/void write_data(uint8 dat) rs = 1; rw = 0; e = 0; P0 = dat; delay_50us(2); e = 1; delay_50us(3); e = 0; /*名称:init1602()功能:LCD显示器初始化*/void init1602(void) delay_50us(80); write_comd(0x38); delay_50us(50); write_comd(0x38); delay_50us(50); write_comd(0x38); write_comd(0x38); write_comd(0x08); write_comd(0x01); write_comd(0x06); write_comd(0x0c);/*函数功能:从DS18B20读温度值输入:无输出:temperature*/void ReadTemperature(void) init_DS18B02(); WriteOnechar(0xcc); WriteOnechar(0x44); init_DS18B02(); WriteOnechar(0xcc); WriteOnechar(0xbe); tempL = readOnechar(); tempH = readOnechar(); /*功能:温度转换输入:无输出:无*/void Z_wd() uint8 i,j; ReadTemperature(); tempH = (tempH4); tempL = tempL&0x0f; /取低4位 if(tempH&0x80) /判断温度符号 tempH=tempH; tempL=tempL+1; ResultSignal = 1; /负 else ResultSignal = 0; /正 ResultLH0 = xsHtempL0+0x30; ResultLH1 = xsHtempL1+0x30; ResultLL0 = xsLtempL0+0x30; ResultLL1 = xsLtempL1+0x30; ResultH=tempH; TB = ResultH/100+0x30 ;/百位 TS = (ResultH%100)/10+0x30;/十位 TG = ResultH%10+0x30;/个位 if(ResultSignal = 1) for(i=0;i6;i+) WD_Si = cdis3i; if(ResultSignal = 0) for(j=0;j6;j+) WD_Sj = cdis2j; if(TB = 0x30) TB = 0x20; if(TS = 0x30) TS = 0x20; /*功能:DS18B20检测正确输入:无输出:无*/void DS18B20_OK() uint8 k; init1602(); write_comd(0x80); for(k=0;k16;k+) write_data(cdis1k); write_comd(0x80+0x40); for(k=0;k5;k+) write_data(WD_Sk); write_comd(0x80+0x45); write_data(TB);/显示百位 write_comd(0x80+0x46); write_data(TS);/显示十位 write_comd(0x80+0x47); write_data(TG);/显示个位 write_comd(0x80+0x48); write_data(0x2e);/显示小数点 write_comd(0x49+0x80); write_data(ResultLH0);/小数高位 write_comd(0x4a+0x80); write_data(ResultLH1);/小数低位 /*功能:DS18B20检测错误输入:无输出:无*/void DS18B20_error() uint8 k; init1602(); write_comd(0x80); for(k=0;k16;k+) write_data(cdis4k); write_comd(0x80+0x40); for(k=0;k16;k+) write_dat

温馨提示

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

评论

0/150

提交评论