欢迎来到天天文库
浏览记录
ID:9946157
大小:102.50 KB
页数:5页
时间:2018-05-16
《ds18b20温度计 c程序 lcd1602显示》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2007-12-1419:05温度值精确到0.1度,lcd1602显示仿真电路图如下c程序如下:#include#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^7;//ds18b20与单片机连接口sbitRS=P3^0;sbitRW=P3^1;sbitEN=P3^2;unsignedcharcodestr1[]={"temperature:"};unsignedcharcodestr2[]={" "};uch
2、ardatadisdata[5];uinttvalue;//温度值uchartflag;//温度正负标志/*************************lcd1602程序**************************/voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的){unsignedinti,j; for(i=0;i3、; RS=0; RW=0; EN=0; P2=com; delay1ms(1); EN=1; delay1ms(1); EN=0;}voidwr_dat(unsignedchardat)//写数据//{delay1ms(1);; RS=1; RW=0; EN=0; P2=dat; delay1ms(1); EN=1; delay1ms(1); EN=0;}voidlcd_init()//初始化设置//{delay1ms(15);wr_com(0x38);delay1ms(5); 4、wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5);}voiddisplay(unsignedchar*p)//显示//{while(*p!=' '){wr_dat(*p);p++;delay1ms(1);}}init_play()//初始化显示{lcd_init(); wr_com(0x80);display(str1);wr_com(5、0xc0);display(str2); }/******************************ds1820程序***************************************/voiddelay_18B20(unsignedinti)//延时1微秒{ while(i--);}voidds1820rst()/*ds1820复位*/{unsignedcharx=0;DQ=1; //DQ复位delay_18B20(4);//延时DQ=0; //DQ拉低del6、ay_18B20(100);//精确延时大于480usDQ=1; //拉高delay_18B20(40); } uchards1820rd()/*读数据*/{unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){ DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat7、=0x80; delay_18B20(10);} return(dat);}voidds1820wr(ucharwdat8、a)/*写数据*/{unsignedchari=0; for(i=8;i>0;i--) {DQ=0; DQ=wdata&0x01; delay_18B20(10); DQ=1; wdata>>=1; }}read_temp()/*读取温度值并转换*/{uchara,b;ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0x44);//*启动温度转换*/ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/9、ds1820wr(0xbe);//*读取温度*/a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue10、a; if(tvalue<0x0fff) tflag=0; else {tvalue=~tvalue+1;tflag=1; }tvalue=tvalue*(0.625);//温度值扩大10倍,
3、; RS=0; RW=0; EN=0; P2=com; delay1ms(1); EN=1; delay1ms(1); EN=0;}voidwr_dat(unsignedchardat)//写数据//{delay1ms(1);; RS=1; RW=0; EN=0; P2=dat; delay1ms(1); EN=1; delay1ms(1); EN=0;}voidlcd_init()//初始化设置//{delay1ms(15);wr_com(0x38);delay1ms(5);
4、wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5);}voiddisplay(unsignedchar*p)//显示//{while(*p!=' '){wr_dat(*p);p++;delay1ms(1);}}init_play()//初始化显示{lcd_init(); wr_com(0x80);display(str1);wr_com(
5、0xc0);display(str2); }/******************************ds1820程序***************************************/voiddelay_18B20(unsignedinti)//延时1微秒{ while(i--);}voidds1820rst()/*ds1820复位*/{unsignedcharx=0;DQ=1; //DQ复位delay_18B20(4);//延时DQ=0; //DQ拉低del
6、ay_18B20(100);//精确延时大于480usDQ=1; //拉高delay_18B20(40); } uchards1820rd()/*读数据*/{unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){ DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat
7、=0x80; delay_18B20(10);} return(dat);}voidds1820wr(ucharwdat
8、a)/*写数据*/{unsignedchari=0; for(i=8;i>0;i--) {DQ=0; DQ=wdata&0x01; delay_18B20(10); DQ=1; wdata>>=1; }}read_temp()/*读取温度值并转换*/{uchara,b;ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0x44);//*启动温度转换*/ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/
9、ds1820wr(0xbe);//*读取温度*/a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue
10、a; if(tvalue<0x0fff) tflag=0; else {tvalue=~tvalue+1;tflag=1; }tvalue=tvalue*(0.625);//温度值扩大10倍,
此文档下载收益归作者所有