#includereg52.h#includeintrins.h#defineuintunsignedint#defineucharunsignedcharuchartitou[]={ds18b20:};ucharcodetable[]={0123456789ABCDEF};ucharsn[8];sbitlcd_rs=P2^0;sbitlcd_rw=P2^1;sbitlcd_en=P2^2;sbitDQ=P3^3;voiddelay_ds18b20(unsignedinti)//延时微秒{while(i--);}voiddelay_ms(uintn)//延时1毫秒{uinta,b;for(a=n;a0;a--)for(b=110;b0;b--);}/******写命令函数********/voidwritecode(ucharcom_code){lcd_rs=0;lcd_rw=0;lcd_en=0;P0=com_code;delay_ms(5);lcd_en=1;delay_ms(5);lcd_en=0;}/******写数据函数********/voidwritedata(ucharcom_data){lcd_rs=1;lcd_rw=0;lcd_en=0;P0=com_data;delay_ms(5);lcd_en=1;delay_ms(5);lcd_en=0;}/******************************************************************//*lcd的初始化*//******************************************************************/voidlcd_init(){lcd_rw=0;writecode(0x38);/*设置16*2显示模式*/writecode(0x0e);/*设置开显示,开光标及光标bu闪烁模式*/writecode(0x06);/*光标加1,整屏不移动*/writecode(0x01);/*清屏*/writecode(0x80);/*数据指针指示屏幕第一行最左端*/}/******************************************************************//*ds18b20的初始化*//******************************************************************/voidinit_ds18b20(void){unsignedcharx=0;DQ=1;//DQ复位delay_ds18b20(4);//延时DQ=0;//DQ拉低delay_ds18b20(100);//精确延时大于480usDQ=1;//拉高delay_ds18b20(40);}/******读一位********/bitreadbit(){uinti;bitdat;DQ=0;i++;DQ=1;i++;i++;dat=DQ;for(i=8;i0;i--){}return(dat);}/******从ds18b20中读一个字节********/ucharreadbyte(){uchari,j,dat;dat=0;for(i=0;i8;i++){j=readbit();dat=(j7)|(dat1);}return(dat);}/******向ds18b20中写一个字节********/voidwritebyte(uchardat){unsignedchari=0;for(i=8;i0;i--){DQ=0;DQ=dat&0x01;delay_ds18b20(10);DQ=1;dat=1;}}/******读ds18b20的序列号********/ucharreadcom(){uchari;init_ds18b20();delay_ds18b20(40);writebyte(0x33);for(i=0;i8;i++){sn[i]=readbyte();/*读出序列号存放在数组sn[]中*/}return0;}main(){uchari,j,l,h;j=0;lcd_init();for(i=0;i8;i++){writedata(titou[i]);delay_ms(30);}while(1){readcom();for(i=0;i8;i++){l=sn[i]&0xf0;l=4;h=sn[i]&0x0f;writecode(0xc0+j);writedata(table[l]);writedata(table[h]);j=j+2;}while(1);}}