资源描述:
《ds18b20温度传感器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、DS18B20温度传感器设计DS18B20温度传感器设计温控系统C语言源代码#include#include#defineucharunsignedchar#defineuintunsignedintsbitds=P2^2;//温度传感器信号线sbitdula=P2^6;//数码管段选线sbitwela=P2^7;//数码管位选线sbitbeep=P2^3;//蜂鸣器uinttemp;floatf_temp;uintwarn_l1=260;uintwarn_l2=250;uintwarn_h1=300;uintwarn_h2=320;sbitle
2、d0=P1^0;sbitled1=P1^1;sbitled2=P1^2;sbitled3=P1^3;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//不带小数点的编码voiddelay(uintz)//延时函数{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voiddsreset(void)//18B20复位,初始化函数{uinti;ds
3、=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bittempreadbit(void)//读1位函数{uinti;bitdat;ds=0;i++;//i++起延时作用ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchartempread(void)//读1个字节{uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)
4、(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(
5、dat);}voidtempwritebyte(uchardat)//向18B20写一个字节数据{uinti;ucharj;bittestb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb)//写1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;//写0i=8;while(i>0)i--;ds=1;i++;i++;}}}voidtempchange(void)//DS18B20开始获取温度并转换{dsreset();delay(1);tempwritebyte(0xcc);//
6、写跳过读ROM指令tempwritebyte(0x44);//写温度转换指令}uintget_temp()//读取寄存器中存储的温度数据{uchara,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();//读低8位b=tempread();//读高8位temp=b;temp<<=8;//两个字节组合为1个字temp=temp
7、a;f_temp=temp*0.0625;//温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5;//乘以10表示小数点后面只取1位
8、,加0.5是四舍五入f_temp=f_temp+0.05;returntemp;//temp是整型}////////////////////显示程序//////////////////////////voiddisplay(ucharnum,uchardat){uchari;dula=0;P0=table[dat];dula=1;dula=0;wela=0;i=0XFF;i=i&(~((0X01)<<(num)));P0=i;wela=1;wela=0;delay(1);}voiddis_temp(uintt){uchari;i=t/100;display(0,i);i=t%100
9、/10;display(1,i+10);i=t%100%10;display(2,i);}//////////////////////////////////////////////voidwarn(uints,ucharled)//蜂鸣器报警声音,s控制音调{uchari;i=s;dula=0;wela=0;beep=0;P1=~(led);while(i--){dis_temp(get_temp());}beep=1;P1=0XFF;i=s;while(i--){