基于RS485总线的远距离温度监控系统.doc_第1页
基于RS485总线的远距离温度监控系统.doc_第2页
基于RS485总线的远距离温度监控系统.doc_第3页
基于RS485总线的远距离温度监控系统.doc_第4页
基于RS485总线的远距离温度监控系统.doc_第5页
全文预览已结束

下载本文档

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

文档简介

#include#define uchar unsigned char #define uint unsigned intsbit DQ = P10; /DS18B20接入口sbit segd=P11;/段控制74573锁存使能sbit segw=P12;/位控制74573锁存使能uchar code tab=0x3f,0x06,0x5b,0x4f,/030x66,0x6d,0x7d,0x07,/470x7f,0x6f,0x77,0x7c,/8b0x39,0x5e,0x79,0x71,/cf0x00/灭;uchar tem7;uchar T_num=200;/*函数声明*/void delay(uint n);/延时函数void init_uart(void);/串口初始化void init_T0();/定时器T0初始化void Init_DS18B20(void);/DS18b20初始化函数uchar ReadOneChar(void);/DS18b20读一个字节void WriteOneChar(uchar dat);/DS18b20写一个字节int ReadTemperature(void);/DS18b20读取温度void disp_dat(uchar x,uchar y);/单个数码管显示函数void disp(void);/温度显示函数uchar sum(uchar *dat,uchar n);/求和校验函数uchar get_adress(void);/获取从机地址函数void change(void);/数据调整函数void send_dat(void);/串行数据发送函数/*主函数*/void main()init_T0();init_uart();/初始化串口while(1) change();/调整数据disp();/进行显示 /*延时函数*/void delay(uint n)while(n-) ;/*定时器T0初始化*/void init_T0()TMOD=0x01;/工作方式1TH0=0x4c;/定时50msTL0=0x00;ET0=1;/允许定时器T0中断EA=1;/开总中断TR0=1;/启动定时器T0/*串口初始化*/void init_uart(void)SCON=0x40;/工作方式1TMOD=TMOD|0x20;/T1为工作方式2TH1=0xFD;/设置T1TL1=0xFD;TR1=1;/启动定时器T1/*DS18b20初始化函数*/void Init_DS18B20(void) uchar x=0; DQ=1;/DQ复位 delay(10);/延时 DQ=0;/将DQ拉低 delay(80);/精确延时约480us DQ=1;/DQ线拉高总线 delay(20); while(!DQ);/等待初始化结束 delay(30);/*DS18b20读一个字节*/uchar ReadOneChar(void)uchar i=0;uchar dat=0;for (i=8;i0;i-) DQ=0;/给脉冲信号 dat=1; DQ=1;/给脉冲信号 if(DQ)dat|=0x80;/读入值是否为1 delay(8); return(dat);/*DS18b20写一个字节*/void WriteOneChar(uchar dat) uchar i=0; for (i=8;i0;i-) DQ=0; DQ=dat&0x01;delay(10);DQ=1;dat=1; delay(8);/*DS18b20读取温度*/int ReadTemperature(void)uchar dat_L=0,dat_H=0;int temper=0;float temp1=0;Init_DS18B20();WriteOneChar(0xCC);/跳过读序号列号的操作WriteOneChar(0x44);/启动温度转换Init_DS18B20();WriteOneChar(0xCC);/跳过读序号列号的操作WriteOneChar(0xBE);/读取温度寄存器dat_L=ReadOneChar();/低位dat_H=ReadOneChar();/高位temper=dat_H;temper=4;/获取地址return(ad);/*求和校验函数*/uchar sum(uchar *dat,uchar n)uchar i;uchar s_dat=0x00;for(i=2;in+1;i+)/对十位、个位和小数位上的数据求和s_dat+=dati;return(s_dat);/返回求和值/*数据调整函数*/void change(void)int temp;temp=ReadTemperature();/读温度tem0=0x24;/发送起始标志$tem1=get_adress();/获取从机地址tem2=temp%1000/100;/存十位上的数据tem3=temp%100/10;/存个位上的数据tem4=temp%10;/存小数位上的数据tem5=sum(tem,3);/存校验和tem6=0x23;/发送结束标志#/*单个数码管显示函数*/void disp_dat(uchar x,uchar y)segw=1;/74HC573开锁存P0=(0x01x);/送位选segw=0;segd=1;if(x=1)P0=taby|0x80;/若是个位送显示小数点elseP0=taby;/送显示数据segd=0;/*温度显示函数*/void disp(void)disp_dat(0,tem2);/显示十位上的数据delay(200);disp_dat(1,tem3);/显示个位上的数据delay(200);disp_dat(2,tem4);/显示小数点后第一位数据delay(200);disp_dat(3,16);/清零段位74HC573中的数据/*串行数据发送函数*/void send_dat(void)uchar i;for(i=0;i7;i+)SBUF=temi;while(

温馨提示

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

评论

0/150

提交评论