《基于C8051 温度显示程序.doc》由会员分享,可在线阅读,更多相关《基于C8051 温度显示程序.doc(4页珍藏版)》请在三一文库上搜索。
1、.#include#define uchar unsigned char#define uint unsigned intsbit DQ=P34;/ds18b20与单片机连接口sbit RS=P27;sbit RW=P26;sbit EN=P25;unsigned char code str1= temperature: ;unsigned char code str2= ;uchar data disdata5;uint tvalue;/温度值uchar tflag;/温度正负标志/*lcd1602程序*/void delay1ms(unsigned int ms)/延时1毫秒(不够精确的)
2、unsigned int i,j;for(i=0;ims;i+)for(j=0;j0;i-) DQ = 0; /给脉冲信号dat=1;DQ = 1; /给脉冲信号if(DQ)dat|=0x80;delay_18B20(10);精品.return(dat);void ds1820wr(uchar wdata)/*写数据*/unsigned char i=0;for (i=8; i0; i-) DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata=1;read_temp()/*读取温度值并转换*/uchar a,b;ds1820rst(); ds1
3、820wr(0xcc);/*跳过读序列号*/ds1820wr(0x44);/*启动温度转换*/ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ ds1820wr(0xbe);/*读取温度*/ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue=8;tvalue=tvalue|a;if(tvalue0x0fff)tflag=0;elsetvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/温度值扩大10倍,精确到1位小数return(tvalue);/*/void ds1820disp()/温度值
4、显示 uchar flagdat;disdata0=tvalue/1000+0x30;/百位数disdata1=tvalue%1000/100+0x30;/十位数disdata2=tvalue%100/10+0x30;/个位数disdata3=tvalue%10+0x30;/小数位if(tflag=0)flagdat=0x20;/正温度不显示符号精品.elseflagdat=0x2d;/负温度显示负号:-if(disdata0=0x30)disdata0=0x20;/如果百位为0,不显示if(disdata1=0x30)disdata1=0x20;/如果百位为0,十位为0也不显示wr_com(
5、0xc0);wr_dat(flagdat);/显示符号位wr_com(0xc1);wr_dat(disdata0);/显示百位wr_com(0xc2);wr_dat(disdata1);/显示十位 wr_com(0xc3);wr_dat(disdata2);/显示个位 wr_com(0xc4);wr_dat(0x2e);/显示小数点 wr_com(0xc5);wr_dat(disdata3);/显示小数位/*主程序*/void main() init_play();/初始化显示while(1)read_temp();/读取温度ds1820disp();/显示如有侵权请联系告知删除,感谢你们的配合!精品