仅供个人参考不得用于商业用途使用DS18B20温度传感器设计温度控制系统设计设计说明:1.1使用DS18B20温度传感器设计温度控制系统1.在数码管上可显示采集到的温度(0~99.9℃)2.当温度低于27℃时,蜂鸣器开始以慢地“滴”声报警,P1.0口发光二极管闪烁,当温度继续降低并低于25℃时,蜂鸣器开始以快地“滴”声报警,P1.0和P1.1口发光二极管闪烁。3.当温度高于30℃时,蜂鸣器开始以慢地“滴”声报警,P1.2口发光二极管闪烁,当温度继续升高并高于32℃时,蜂鸣器开始以快地“滴”声报警,P1.2和P1.3口发光二极管闪烁。1.2元件说明:(1)使用的元器件器件数量(件)AT89C521DS18B20174HC5732排阻1小功率扬声器1二极管4数码管310K电阻1导线若干VCC电源1(2)DS18B20器件说明DS18B20:电压范围3.0~5.5V;温度可测范围-55~+125℃;可编程分辨率为9~12位,对应的可分辨温度为:0.5℃、0.25℃、0.125℃和0.0625℃;测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。其引脚定义图如下图:(3)硬件连接图引脚定义GND电源负极DQ信号输入输出DDV电源正极仅供个人参考不得用于商业用途硬件连接图如上图:1.3工作原理首先看控制DS18B20的指令,只列举此设计用到的,如下表:原理:DS18B20测量外部温度,经过温度转换,将温度物理量转换成数字信号,再传送数据到AT89C52,AT89C52控制数码管显示及二极管、扬声器的工作,从而实现了温度在数码管上显示,还有温度范围的亮灯与报警。1.4C语言编程见附录1.5实验结果可将环境温度经过DS18B20温度传感器,在数码管上显示,显示准确。CCH跳过ROM44H温度转换BEH读暂存器仅供个人参考不得用于商业用途附录#includereg51.h#includestdio.h#defineucharunsignedchar#defineuintunsignedintsbitds=P2^2;Forpersonaluseonlyinstudyandresearch;notforcommercialusesbitdula=P2^6;sbitwela=P2^7;sbitbeep=P2^3;uinttemp;floatf_temp;uintwarn_l1=270;uintwarn_l2=250;uintwarn_h1=300;uintwarn_h2=320;sbitled0=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;x0;x--)for(y=110;y0;y--);}voiddsreset(){uinti;ds=0;i=103;while(i0)i--;ds=1;i=4;while(i0)i--;}bittempreadbit(){仅供个人参考不得用于商业用途uinti;bitdat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i0)i--;return(dat);}uchartempread(){uchari,j,dat;dat=0;for(i=1;i=8;i++){j=tempreadbit();dat=(j7)|(dat1);}return(dat);}tempwritebyte(uchardat){uinti;ucharj;bittestb;for(j=1;j=8;j++){testb=dat&0x01;dat=dat1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i0)i--;}else{ds=0;i=8;while(i0)i--;ds=1;i++;i++;}仅供个人参考不得用于商业用途}}tempchange(){dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0x44);}uintget_temp(){uchara,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;f_temp=f_temp+0.05;returntemp;}display(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(50);}仅供个人参考不得用于商业用途dis_temp(uintt){uchari;i=t/100;display(0,i);i=t%100/10;display(1,i+10);i=t%100%10;display(2,i);}warn(uints,ucharled){uchari;i=s;beep=0;P1=~(led);while(i--){dis_temp(get_temp());}beep=1;P1=0xff;i=s;while(i--){dis_temp(get_temp());}}deal(uintt){uchari;if((twarn_l2)&&(t=warn_l1)){warn(40,0x01);}elseif(t=warn_l2){warn(10,0x03);}elseif((twarn_h2)&&(t=warn_h1)){仅供个人参考不得用于商业用途warn(40,0x04);}elseif(t=warn_h2){warn(10,0x0c);}else{i=40;while(i--){dis_temp(get_temp());}}}init_com(){TMOD=0x20;PCON=0x00;SCON=0x50;TH1=0xfd;TL1=0xfd;TR1=1;}comm(char*parr){do{SBUF=*parr++;while(!TI);TI=0;}while(*parr);}main(){ucharbuff[4],i;dula=0;wela=0;init_com();while(1){仅供个人参考不得用于商业用途tempchange();for(i=10;i0;i--){dis_temp(get_temp());}deal(temp);sprintf(buff,%f,f_temp);for(i=10;i0;i--){dis_temp(get_temp());}comm(buff);for(i=10;i0;i--){dis_temp(get_temp());}}}仅供个人参考不得用于商业用途使用DS18B20温度传感器设计温度控制系统设计班级:电082班姓名:于川洋学号:33号时间:2011-11.-11仅供个人参考不得用于商业用途仅供个人参考不得用于商业用途仅供个人用于学习、研究;不得用于商业用途。Forpersonaluseonlyinstudyandresearch;notforcommercialuse.NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.以下无正文