基于51单片机的DS18B20共阴数码管显示

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于51单片机的DS18B20温度测量四位共阴数码管显示硬件电路要求,51单片机P0口依次与数码管段选接口接上,低位接低位,高位接高位,位选用8550三极管驱动。基极接P2口第四位,按自己布局可适当调整。程序功能:实现一个DS18B20采集温度,并显示于共阴数码管上。采集范围0~99度,显示精度0.1度,如果要实现负温度显示,可以自行加显示负温度的函数即可。本人亲测可以,转换速度小于750MS/*MCUstc89c52rc,晶振12MHZ程序功能:实现一个DS18B20采集温度,并显示于共阴数码管上。采集范围0~99度,显示精度0.1度,只可显示正温度显示*/#includereg52.h#includestdio.h#defineucharunsignedchar#defineuintunsignedintsbitds=P1^0;//定义传感器接口,可自行根据需要修改#defineweiP2uinttemp;floatf_temp;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x01};//0~9共阴段码voiddelay(uintz)//延时函数{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voiddsreset(void)//18B20复位函数{uinti;ds=0;i=103;while(i0)i--;ds=1;i=4;while(i0)i--;}bittempreadbit(void)//读一位数据函数{uinti;bitdat;ds=0;i++;//i++起延时作用ds=1;i++;i++;dat=ds;i=8;while(i0)i--;return(dat);}uchartempread(void)//读一个字节{uchari,j,dat;dat=0;for(i=1;i=8;i++){j=tempreadbit();dat=(j7)|(dat1);//}return(dat);}voidtempwritebyte(uchardat)//18B20写一个数据{uinti;ucharj;bittestb;for(j=1;j=8;j++){testb=dat&0x01;dat=dat1;if(testb)//д1{ds=0;i++;i++;ds=1;i=8;while(i0)i--;}else{ds=0;//д0i=8;while(i0)i--;ds=1;i++;i++;}}}voidtempchange(void)//DS18B20转换温度{dsreset();delay(1);tempwritebyte(0xcc);//写跳过读ROM指令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;}//显示函数voiddis_temp(uintt){ucharshi,ge,xiao;shi=t/100;ge=t%100/10;xiao=t%100%10;P0=0x00;wei=0xff;P0=0x39;wei=0xfe;delay(5);P0=0x00;wei=0xff;P0=table[xiao];wei=0xfd;delay(5);P0=0x00;wei=0xff;P0=table[ge];wei=0xfb;delay(5);P0=0x00;wei=0xff;P0=0x80;wei=0xfb;delay(5);P0=0x00;wei=0xff;P0=table[shi];wei=0xf7;delay(5);}///主函数voidmain(){while(1){tempchange();dis_temp(get_temp());}}

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功