资源描述:
《多个DS18B20测温的proteus仿真电路及C语言程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、多个DS18B20测温的proteus仿真电路及C语言程序设计proteus仿真电路元器件组成C语言程序:#includesbitDQ=P1^2;sbitDQ1=P1^1;sbitDQ2=P1^0;sbitDQ3=P1^3;#defineucharunsignedchar#defineuintunsignedintuchartemp_value,temp_value1,temp_value2;ucharcodetable[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X
2、7F,0X6F,0X40};voiddelay_18B20(uinti){while(i--);}voidInit_DS18B20(void){ucharx=0;DQ=1;//DQ复位delay_18B20(8);//稍做延时DQ=0;//单片机将DQ拉低delay_18B20(60);//精确延时大于480usDQ=1;//拉高总线delay_18B20(14);x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}ucharReadOneChar(void){uchari=0;uc
3、hardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat
4、=0x80;delay_18B20(4);}return(dat);}voidWriteOneChar(uchardat){uchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay_18B20(5);DQ=1;dat>>=1;}}voidInit_DS18B201(void){ucharx=0;DQ1=1;//DQ复位delay_18B20(8);//稍做
5、延时DQ1=0;//单片机将DQ拉低delay_18B20(80);//精确延时大于480usDQ1=1;//拉高总线delay_18B20(14);x=DQ1;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}ucharReadOneChar1(void){uchari=0;uchardat=0;for(i=8;i>0;i--){DQ1=0;//给脉冲信号dat>>=1;DQ1=1;//给脉冲信号if(DQ1)dat
6、=0x80;delay_18B20(4);}return(dat);}v
7、oidWriteOneChar1(uchardat){uchari=0;for(i=8;i>0;i--){DQ1=0;DQ1=dat&0x01;delay_18B20(5);DQ1=1;dat>>=1;}}voidInit_DS18B202(void){ucharx=0;DQ2=1;//DQ复位delay_18B20(8);//稍做延时DQ2=0;//单片机将DQ拉低delay_18B20(80);//精确延时大于480usDQ2=1;//拉高总线delay_18B20(14);//x=DQ1;//稍做延时后如果x=0则初始化成
8、功x=1则初始化失败delay_18B20(20);}ucharReadOneChar2(void){uchari=0;uchardat=0;for(i=8;i>0;i--){DQ2=0;//给脉冲信号dat>>=1;DQ2=1;//给脉冲信号if(DQ2)dat
9、=0x80;delay_18B20(4);}return(dat);}voidWriteOneChar2(uchardat){uchari=0;for(i=8;i>0;i--){DQ2=0;DQ2=dat&0x01;delay_18B20(5);DQ2=1;dat>>
10、=1;}}voidReadTemp(void){uchara=0;ucharb=0;uchart=0;floattt=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换delay_18B20(100);//thismessageisweryimportantInit_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个
11、就是温度delay_18B20(100);a=ReadOneChar();//读取温度值低位b=ReadOneChar();//读取温度值高位temp_value=b<<4;temp_value+=(a&0xf0)>>4;}voidReadTemp1(void)