您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机与DS18B20传感器连接.
案例单片机与DS18B20传感器连接下图给出了DS18B20与单片机连接的电路图,用单片机AT89C52的P0.7口线经上拉后接至DS18B20的引脚2数据端,引脚1接电源地端,引脚3接+5V电源端。单片机与DS18B20的连接电路图下面给出对DS18B20的操作用C51编写的具体程序。应该说明的是,程序对应于单片机的时钟频率为12MHz,如改用其它时钟频率,程序中的延时应重新调整。#includereg51.h#includeintrins.hsbitLE=P2^5;sbitDQ=P0^7;bitDS_IS_OK=1;unsignedcharseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};//字段数组定义了12个元素,其中第11个元素是负号-的字段码//第12个元素为不显示的字段码,用于显示正温度值unsignedcharbuf[4];unsignedinttemperature;voiddelay(unsignedinttime)//延时函数{while(time--);}unsignedcharInit_Ds18b20()//DS18B20初始化函数{unsignedcharstatus;DQ=1;delay(8);DQ=0;delay(90);DQ=1;delay(5);status=DQ;delay(60);returnstatus;}unsignedcharread()//读字节函数{unsignedchari=0;unsignedchardat=0;DQ=1;_nop_();for(i=8;i0;i--){DQ=0;dat=1;DQ=1;_nop_();_nop_();if(DQ)dat|=0x80;delay(30);DQ=1;}return(dat);}voidwrite(unsignedchardat)//写字节函数{unsignedchari;for(i=8;i0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat=1;}}voidReadTemperature()//采样温度函数{unsignedchartempL=0;unsignedchartempH=0;if(Init_Ds18b20()==1)//DS18B20故障DS_IS_OK=0;else{DS_IS_OK=1;write(0xcc);write(0x44);Init_Ds18b20();write(0xcc);write(0xbe);tempL=read();tempH=read();temperature=(tempH8)|tempL;}}voiddispute()//温度值显示处理函数{unsignedinttemp,temp1;//用于中途的数据转换//以下if语句用于处理负温度值,因为保存的是温度值的补码if((temperature&0xf800)==0xf800){temperature=~temperature+1;buf[0]=10;}elsebuf[0]=11;temp=temperature/16.0*100;//转换成实际温度值并放大100倍,用于对百分位四舍五入if(temp10)buf[0]=11;//处理0度,温度是0度时保证不出现负号else{temp1=temp%10;if(temp1=5)//四舍五入temp+=10;}temp/=10;//去掉温度值的百分位if(temp=1000)//如果温度=100度,则显示四位{buf[0]=temp/1000;buf[1]=temp/100%10;buf[2]=temp/10%10;buf[3]=temp%10;}else{buf[1]=temp/100;buf[2]=temp/10%10;buf[3]=temp%10;}}voiddisplay()//显示函数.{inti,j;unsignedchartemp=0xfe;for(j=0;j30;j++)//由于是动态显示方式,因此必须多次循环才能成功显示,很关键,处理不好温度值将显示不成功{temp=0xfe;for(i=0;i4;i++){LE=0;P2=temp;if(i==2)P1=seg[buf[i]]+0x80;elseP1=seg[buf[i]];LE=1;LE=0;delay(10);temp=(temp1)|1;}P2=temp;//关显示,进行下一次测试}}voidmain(){ReadTemperature();delay(50000);delay(50000);while(1){if(DS_IS_OK==1){ReadTemperature();dispute();display();}}}
本文标题:单片机与DS18B20传感器连接.
链接地址:https://www.777doc.com/doc-4078467 .html