DS18B20程序包含温度设置、报警、华氏温度和摄氏温度转换_第1页
DS18B20程序包含温度设置、报警、华氏温度和摄氏温度转换_第2页
DS18B20程序包含温度设置、报警、华氏温度和摄氏温度转换_第3页
DS18B20程序包含温度设置、报警、华氏温度和摄氏温度转换_第4页
DS18B20程序包含温度设置、报警、华氏温度和摄氏温度转换_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、# include # include float flag=0;unsigned int up=30,down=20,kf=1,hfflag=1,hf;/up为报警温度上限值,down为报警温度下限值;/kf为报警温度设定标志位,kf为1,数码管显示温度值,kf=0,进入报警温度设定选项。/hfflag为摄氏度与华氏温度转换标志位,hfflag=1,显示的为摄氏度值,hfflag=0,显示的为华氏温度值。/hf为用来存储华氏温度。sbit DQ = P20; /ds18b20 端口 unsigned char tab=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0

2、 x7d,0 x07,0 x7f,0 x6f,0 x39,0 x63,0 x40,0 x71;/0 x39,0 x63用来显示摄氏度,0 x40用来显示-。unsigned char tabb=0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef; /带有小数点的0-9.void displayset();void delayms( int x) /延时1ms函数 int m,j; for(m=1;m=x;m+) for(j=1;j0) i-; /根据协议要满足 大于 480usDQ = 1; /拉高总线i=4;while(i0

3、) i-; void dswait() /等待ds18b20响应的函数 while(DQ); while(DQ); /检测到应答脉冲bit readone()/读取一位数据 unsigned int i;bit b;DQ=0;i+; /根据资料,进行一次unsigned int 型数据的+,大约为8us时间 ,此处i+,符合协议要求至少保持1usDQ=1;i+;i+; /延时约16us, 符合协议要求的至少延时15us以上b=DQ;i=8;while(i0) i-; /延时约64us, 符合读时隙不低于60us要求return(b);unsigned char readB()/读取一字节数据u

4、nsigned int i;unsigned char j,dat=0;for(i=0;i8;i+)j=readone();dat=(j1);/将每一次输出的值通过移位相或送到datreturn(dat);void writeB(unsigned char dat)/写操作,通过次函数可以控制ds18b20进行一系列操作unsigned int i;unsigned char j;bit b;for(j=0;j=1;if(b) /写1, 将DQ拉低15us后, 在15us60us内将DQ拉高, 即完成写1 DQ=0;i+;i+; /此处延时16us。满足延时15us以后 DQ=1; /将DQ拉

5、高i=8;while(i0) i-; /延时约64us, 符合写时隙不低于60us要求else/写0, 将DQ拉低60us120usDQ=0;i=8;while(i0) i-;DQ=1;i+;i+; /整个写0时隙过程已经超过60usvoid sendchange()/温度转换reset();dswait();delayms(1);writeB(0 xcc); /写入跳过序列号命令字 writeB(0 x44); /写入温度转换命令字void sendread()/读取数据reset();dswait();delayms(1);writeB(0 xcc); /写入跳过序列号命令字 writeB

6、(0 xbe);/写入读取数据令字int getvalue()/获取温度函数 unsigned int tempvalue; long temp1,temp2; int value,final; float t; unsigned char low,high; sendread(); /读取数据 low=readB(); high=readB(); tempvalue=high; tempvalue=5)/四舍五入 t=t+(0.01); final=t*100; hf=(32+t*1.8)*100;/华氏温度转换 else final=t*100; hf=(32+t*1.8)*100; fl

7、ag=t; return(final);void baojing()/报警函数if(flag=up|flag=down) P2_2=0; else P2_2=1; void display() /数码管显示函数unsigned int m,a,b,c,d,e;if(kf=1) /kf=1,显示温度值,kf=0,进入报警温度设定项 if(hfflag=0) /hfflag=0,显示华氏温度 getvalue(); m=hf;elsem=getvalue();a=m/10000;b=(m%10000)/1000;c=(m%10000)%1000)/100;d=(m%10000)%1000)%100

8、)/10;e=m%10;if(hfflag=1)P0=tab10;P1_0=1;P1_0=0;P0=0 xfe;P1_1=1;P1_1=0;delayms(1);if(hfflag=0)P0=tab13;P1_0=1;P1_0=0;P0=0 xfe;P1_1=1;P1_1=0;delayms(1);P0=tab11;P1_0=1;P1_0=0;P0=0 xfd;P1_1=1;P1_1=0;delayms(1);P0=tabe;P1_0=1;P1_0=0;P0=0 xfb;P1_1=1;P1_1=0;delayms(1);P0=tabd;P1_0=1;P1_0=0;P0=0 xf7;P1_1=1

9、;P1_1=0;delayms(1);P0=tabbc;P1_0=1;P1_0=0;P0=0 xef;P1_1=1;P1_1=0;delayms(1);P0=tabb;P1_0=1;P1_0=0;P0=0 xdf;P1_1=1;P1_1=0;delayms(1);P0=taba;P1_0=1;P1_0=0;P0=0 xbf;P1_1=1;P1_1=0;delayms(1);baojing();void keyscan() /键盘扫描函数unsigned int a,b,c,d;for(d=0;d125)up=0;if(down125)down=0;set1=up;set2=down;d1=se

10、t1/100;d2=(set1%100)/10;d3=set1%10;d4=set2/100;d5=(set2%100)/10;d6=set2%10;P0=tabd3;P1_0=1;P1_0=0;P0=0 xfe;P1_1=1;P1_1=0;delayms(1);P0=tabd2;P1_0=1;P1_0=0;P0=0 xfd;P1_1=1;P1_1=0;delayms(1);P0=tabd1;P1_0=1;P1_0=0;P0=0 xfb;P1_1=1;P1_1=0;delayms(1);P0=tab12;P1_0=1;P1_0=0;P0=0 xe7;P1_1=1;P1_1=0;delayms(1);P0=tabd6;P1_0=1;P1_0=0;P0=0 xdf;P1_1=1;P1_1=0;delayms(1);P0=tabd5;P1_0=1;P1_0=0;

温馨提示

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

评论

0/150

提交评论