资源描述:
《at89c52控制温度传感器ds18b20的源程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、AT89C52控制温度传感器DS18B20的源程序--------------------------------------------------------------------------------AT89C52控制温度传感器DS18B20的源程序C语言源程序:#includecodeunsignedcharseg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//显示段码voidDelay(unsignedinttc)//显示延时程序{while
2、(tc!=0){unsignedinti;for(i=0;i<100;i++);tc--;}}sbitTMDAT=P3^1;//DS18B20的数据输入/输出脚DQ,根据情况设定unsignedintsdata;//测量到的温度的整数部分unsignedcharxiaoshu1;//小数第一位unsignedcharxiaoshu2;//小数第二位unsignedcharxiaoshu;//两位小数bitfg=1;//温度正负标志voiddmsec(unsignedintcount)//延时部分{unsignedchari;while(count--){for(
3、i=0;i<115;i++);}}voidtmreset(void)//发送复位{unsignedchari;TMDAT=0;for(i=0;i<103;i++);TMDAT=1;for(i=0;i<4;i++);}bittmrbit(void)//读一位//{unsignedinti;bitdat;TMDAT=0;i++;TMDAT=1;i++;i++;//微量延时//dat=TMDAT;for(i=0;i<8;i++);return(dat);}unsignedchartmrbyte(void)//读一个字节{unsignedchari,j,dat;dat=
4、0;for(i=1;i<=8;i++){j=tmrbit();dat=(j<<7)
5、(dat>>1);}return(dat);}voidtmwbyte(unsignedchardat)//写一个字节{unsignedcharj,i;bittestb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb){TMDAT=0;//写0i++;i++;TMDAT=1;for(i=0;i<8;i++);}else{TMDAT=0;//写0for(i=0;i<8;i++);TMDAT=1;i++;i++;}}}voidt
6、mstart(void)//发送ds1820开始转换{tmreset();//复位dmsec(1);//延时tmwbyte(0xcc);//跳过序列号命令tmwbyte(0x44);//发转换命令44H,}voidtmrtemp(void)//读取温度{unsignedchara,b;tmreset();//复位dmsec(1);//延时tmwbyte(0xcc);//跳过序列号命令tmwbyte(0xbe);//发送读取命令a=tmrbyte();//读取低位温度b=tmrbyte();//读取高位温度if(b>0x7f)//最高位为1时温度是负{a=~a;b
7、=~b+1;//补码转换,取反加一fg=0;//读取温度为负时fg=0}sdata=a/16+b*16;//整数部分xiaoshu1=(a&0x0f)*10/16;//小数第一位xiaoshu2=(a&0x0f)*100/16%10;//小数第二位xiaoshu=xiaoshu1*10+xiaoshu2;//小数两位}voidDS18B20PRO(void){tmstart();//dmsec(5);//如果是不断地读取的话可以不延时//tmrtemp();//读取温度,执行完毕温度将存于TMP中//}voidLed(){if(fg==1)//温度为正时显示的数
8、据{P2=P2&0xef;P0=seg7code[sdata/10];//输出十位数Delay(8);P2=P2
9、0xf0;P2=P2&0xdf;P0=seg7code[sdata%10]
10、0x80;//输出个位和小数点Delay(8);P2=P2
11、0xf0;P2=P2&0xbf;P0=seg7code[xiaoshu1];//输出小数点后第一位Delay(8);P2=P2
12、0xf0;P2=P2&0x7f;P0=seg7code[xiaoshu2];//输出小数点后第二位Delay(4);P2=P2
13、0xf0;}if(fg==0)//温度为负时显示的数据{P2=
14、P2&0xef;P0=s