ds18b20多路温度采集程序之欧阳引擎创编_第1页
ds18b20多路温度采集程序之欧阳引擎创编_第2页
ds18b20多路温度采集程序之欧阳引擎创编_第3页
ds18b20多路温度采集程序之欧阳引擎创编_第4页
ds18b20多路温度采集程序之欧阳引擎创编_第5页
已阅读5页,还剩19页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

1、本程序为dsl8b20的多路温度采集 程序,是我自己参考其他程序后改 写而成,可显示4路正负温度值, 并有上下限温度报警(声音、灯光 报警)o欧阳引擎(2021.01.01)亲测,更改端即可使用。(主要器件:51单片机,dsl8b20, led显示器)附有proteus仿真图,及序列号采集程序/*上限62度 下限-20度*/#include#define uchar unsigned char#define uint unsigned intsbit ds=PlAl;sbit rs=PlA4;sbit e=PlA6;sbit sp=PlA0;sbitdl=PlA2;sbit d2=PlA3;

2、uchar lcdrom48= 0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e,0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9,0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,OxeO,0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,Oxd7; unsigned char code tableO= MTEMPERARTURE:U “; unsigned char code table 1 = 0123456789ABCDEF;int f4;int tvalue;float ftvalue

3、;uint warnl=320;uint warnh=992;/*cd 程序*/void delayms(uint ms)延时uint ij;for(i=ms;i0;i)for(j=110;j0;j-);void wrcom(uchar com)/写指令 delayms(l);rs=O;P3=com;delayms(l);e=l;delayms(l);e=0;void wrdat(uchar dat)/写数据rs=l;e=0;P3=dat;delayms(5);e=l;delayms(5);e=0;)void lcdinit()初始化 leddelayms(15);wrcom(0x38);de

4、layms(5);wrcom(0x0c);delayms(5);wrcom(0x06);delayms(5);wrcom(0x0 l);delayms(5);)void display(uchar *p)显示while(*p!=W)wrdat(*p);P+;delayms(l);)displayinit()/初始化显示lcdinit();wrcom(0x80);display(tableO);)/*dsl8b20 程序 */void dsrst()/dsl8b20 复位uint i;ds=O;i=103;while(i0)i;ds=l;i=4;while(i0)i;bit dsrd0()读一位

5、数据uint i;bit dat;ds=0;i+;ds=l;i+;i+;dat=ds;i=8;while(i0)i;return(dat);)uchar dsrd()读1个字节数据uchar i j,dat;dat=0;for(i=8;i0;i-)j=dsrdO();dat=(j7)l(dat 1);)return(dat);void dswr(uchar dat)/写数据uint i;uchar j;bit testb;for(j=8;j0;j-)testb=dat&OxO 1;dat=datl;if(testb)ds=O;i+;i+;ds=l;i=8;while(i0)i;else ds=

6、0;i=8;while(i0)i; ds=l;i+;i+;void tmstart()/T|始化 dsl8b20sp=l;dl = l;d2=l;dsrst();delayms(l);dswr(Oxcc);dswr(0x44);void read_dealtemp()/读取并处理温度uchar i j,t;uchar a,b;for(j=0;j4;j+)dsrst();delayms(l);dswr(0x55);for(i=0;i 8;i+)dswr(lcdromji);/发送 64 位序列号)dswr(Oxbe);a=dsrd();b=dsrd();tvalue=b;tvalue=8;tva

7、lue=tvaluela;if(tvaluewarnl)d2=0;sp=0;elsed2=l;sp=l;)elsed2=l;wrcom(OxcO);wrdat(*);if(tvaluewarnh) dl=O;sp=O;elsedl = l;sp=l;)if(j=0)wrcom(0x8e);wrdat(2);)ifDwrcom(0x8e);wrdat(3);)if(j=2)wrcom(0x8e);wrdatC4);if(j=3)wrcom(0x8e);wrdat(3);ftvalue=tvalue*0.0625;tvalue=ftvalue* 10+0.5;ftvalue=ftvalue+0.0

8、5;fU=tvalue;/度扩大十倍,精确到一位小数 tvalue=fj;t=tvalue/1000;wrcom(0x80+0x41);wrdat(table 1 t); 显示百位t=tvalue% 1000/100;wrdat(table lt);/ 显示十位t=tvalue%100/10;wrdat(tablelt);/ 显示个位wrdat(0x2e); /显示小数点儿t=tvalue%10/l;wrdat(table 1 t); 显示小数位delayms(5000);)/*主函数*/void main()dl = l;d2=l;sp=l;displayinit();/初始化显示while

9、(l)tmstart(); 初始化read_dealtemp() ;/i 取温度#include #define uchar unsigned char#define uint unsigned intsbit DQ = P1A1;温度传感器信号线sbit rs = P1A4;/LCD数据/命令选择谎(H/L)位声明sbit lcden = P1A6;/LCD使能信号端位声明延时函数void DS 18B20_Reset(void);/DQ18B20复位,初始化函数bit DS 18B20_Readbit(void);读 1 位数据函数uchar DS 18B20_ReadByte(void)

10、;读 1 个字节数据函数void DS18B20_WriteByte(uchar dat); 向 DQ18B20 写一个字 节数据函数void LCD_WriteCom(uchar com);/1602 液晶命令写入函数void LCD_WriteData(uchar dat);/1602 液晶数据写入函数void LCD_Init();/LCD 初始化函数void Display 18B20Rom(char Rom); 显示 18B20 序列号函数/ J 土 J* 士 kL#士 士J. 士 士 丄.土士J士 /t主函数*/7 士 士% 士7 % 士 士 kL*士7 7* 士 丄%f 土 土/

11、#T%#T%#T% #Tfvoid main() uchar a,b,c,d,e,f,g,h;LCD_Init();DS18B20_Reset();delay(l);DS 18B20_WriteByte(0x33);delay(l);a = DS 18B20_ReadByte();b = DS18B20_ReadByte();c = DS 18B20_ReadByte();d = DS18B20_ReadByte();e = DS 18B20_ReadByte();f = DS 18B20_ReadByte();g = DS 18B20_ReadByte();h = DS18B20_ReadB

12、yte();LCD_WriteCom(0x80+0x40);Display 18B20Rom(h);Display 18B20Rom(g);Display 18B20Rom(f);Display 18B20Rom(e);Display 18B20Rom(d);Display 18B20Rom(c);Display 18B20Rom(b);Display 18B20Rom(a); while(l);/% 土 士士 士土丄士七士 + 士丄 士 士/ 彳. 士%9x ” 士 士%9 ” 士%9x % 士 士 士“ ” /g#T%T T%#T*T*void delay(uint z)延时函数uint

13、x,y;for( x = z; x 0; x)for( y = 110; y 0; y);/ 士 士 士 士 士 士士 %1 士%9x ” 士 士%9 ” 士%9x % 士 士 士“ ” /g#T%T T%#T*T*功能:复位 18B20DS18B20 函 数:void DS18B20_Reset()/ 士士 % 士 %1# % ” 士 士丄士7 7 士 士 % ” 士 士 /#T% #TT #T#T%#g #T void DS 18B20_Reset(void)/DQ 18B20 复位,初始化函数uint i;DQ = 0;i= 103;while( i 0 ) i;DQ=1;i = 4;w

14、hile( i 0 ) i;/士 土士 士7* %fx 士 士士 士土 士 士 %fx ff 7 #r#T%彳.彳、彳、彳#T%T* T% #Tw!DS18B20 函 数:void DS18B20_Readbit()功能:读1个字节数据函数/ 丄” 士丄J* %f %t 士“ 士J* %f 土 士七土 7“ ” tf#T% #T% #T#T#T* T% #T 0 )i;return( dat);/ “ 土 士 士 士 土 士土 士 士 丄士 士 士士 土 士 土 士 士7 /f 7 #r#T%彳.彳、#T% #T彳、彳#T%彳.T% #T%#产DS18B20 函 数:void DS18B20_

15、ReadByte()/*功能:读1个字节数据函数/丄.士士 .土 土% 士 土 士士 土士 士士 士 士 士 /g#7#T#T #r#7#T uchar DS18B20_ReadByte(void) 读 1 个字节数据函数 uchar i,j,dat;dat = 0;for( i = l;i=8;i+)j = DS18B20_Readbit();dat = (j 7 ) I ( dat 1 );return(dat);/“ ” 土 士 士 士“ 士 士 土士“ “ 土 士 土 士“ 丄e“ 士 /彳!/*DS18B20 函 数:void DS18B20_WriteByte()*/*功能:向DQ

16、18B20写一个字节数据函数*/士 %Lr士 士7* %fx 士 士士 士土 士 士 % ” /f 7#T%#T%#T% #Tvoid DS 18B20_WriteByte(uchar dat)节数据函数uint i;向DQ18B20写一个字uchar j;bit testb;for(j=l;j0)i;)elseDQ = 0; 写 0i = 8;while(i0)i;i+;i+;/J 士 kL#士 士士 土 士 xL士士 士士 士 士!f#T#T%#T% #T% 7V、V、T%#T%I/* LCD 函数:void LCD_WriteCom()*/*功能:向LCD写入命令*/ 丄土 士 士士 士

17、土 %1 士%9x ” 士 士%9 ” 士%9x 士 士 士 /fV、#T%#Tv #T #r%彳彳#TT% #T#rtvoid LCD_WriteCom(uchar com) rs = 0;P3= com;delay(5);lcden = 0;delay(5);lcden = 1;delay(5);lcden = 0;/ 丄” 士丄%t 士士7 土 士七土Jf#T% #i%#Tv #T%T% #T%#T%#r% #T*#T% #T%g/* LCD 函数:void LCD_WriteData(uchar dat)*/产功能:向LCD写入数据*/rs = 1; lcden = 0;P3= dat;delay(5);lcden = 1;delay(5); lcden = 0;delay(5);/% 士 士 士 士士 士 士“ J* 士 士 士土 ” 士 士%9 ” 士%9x ” 士 士I/#T%#r*#r%#T* T%#T% #T%T% #T#r/void LCD_WriteData(uchar dat)选择LCD为写入数据状态将待写入数据放到总线上给LCD使能端一个脉冲信号将之前放

温馨提示

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

评论

0/150

提交评论