欢迎来到天天文库
浏览记录
ID:52828853
大小:12.97 KB
页数:8页
时间:2020-03-30
《用DS18B20测温度并用LCD12864液晶屏显示.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本程序实现的功能:用DS18B20测温度,并用LCD12864液晶屏显示#include#include#defineuintunsignedint#defineucharunsignedcharsbitrs=P1^1;sbitrw=P1^2;sbiten=P1^3;sbitpsb=P1^4;sbitds=P1^5;ucharcodetable0[]="Currenttemp:";ucharcodetable1[]="当前温度:";ucharcodetable2[]="摄氏度";uc
2、hartable[4];uinttemp;floatf_temp;voiddelay(uinttms){uinti,j;for(i=tms;i>0;i--)for(j=110;j>0;j--);}voidinit_ds(){uinti;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}voidtempwritebyte(ucharcom)//由时序图知,向DS18B20写入数据时,写0和写1的时序恰好相反{//所以如下程序用if和else分别写入0和1;而当从DS18B20读
3、数据时,uinti,j;//读0和读1的时序基本相同,所以读0和读1的程序合二为一,不用分别写出bitbb;for(i=0;i<8;i++){bb=com&0x01;//最低位开始写入DS18B20com=com>>1;if(bb){ds=0;j++;j++;ds=1;j=8;while(j>0)j--;}else{ds=0;j=8;while(j>0)j--;ds=1;j++;j++;}}}voidtempchange(){init_ds();delay(1);tempwritebyte(0xcc);tempwriteb
4、yte(0x44);}uchartempreadbyte()//由时序图知,向DS18B20写入数据时,写0和写1的时序恰好相反{//所以如下程序用if和else分别写入0和1;而当从DS18B20读数据时,uchari,j,m,n;//读0和读1的时序基本相同,所以读0和读1的程序合二为一,不用分别写出bitdat;for(i=0;i<8;i++){ds=0;j++;j++;ds=1;j++;j++;dat=ds;j=8;while(j>0)j--;m=dat;//把一位数据赋给一个字节,且从最低位开始读数n=(m<<7
5、)
6、(n>>1);}returnn;//必须将n值返回去,以赋给a和b}voidget_temp(){uchara,b;init_ds();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempreadbyte();b=tempreadbyte();temp=b;temp<<=8;temp=temp
7、a;f_temp=temp*0.0625*10+0.5;//保留一位小数,且最低位四舍五入temp=f_temp;//returntemp;}voidwr_data(da
8、te){rs=1;rw=0;en=0;P0=date;delay(3);en=1;delay(3);en=0;}voidwr_com(ucharcom){rs=0;rw=0;en=0;P0=com;delay(3);en=1;delay(3);en=0;}voidlcd_init(){psb=1;wr_com(0x30);delay(3);wr_com(0x0c);delay(3);wr_com(0x06);delay(3);//wr_com(0x01);//delay(3);}voidlcd_pos(ucharX,uch
9、arY){if(X==0)X=0x80;elseif(X==1)X=0x90;elseif(X==2)X=0x88;elseif(X==3)X=0x98;wr_com(X+Y);}voiddisplay()//显示第一行为currenttemp:{//第二行为当前温度:uchari;//第三行为xxx摄氏度table[0]=temp/100+'0';table[1]=temp/10%10+'0';table[2]='.';table[3]=temp%10+'0';lcd_pos(2,2);for(i=0;i<4;i++)w
10、r_data(table[i]);lcd_pos(2,4);i=0;while(table2[i]!=' '){wr_data(table2[i]);i++;}lcd_pos(0,0);i=0;while(table0[i]!=' '){wr_data(table0[i]);i++;}lcd_pos
此文档下载收益归作者所有