资源描述:
《单片机控制的温度传感器C语言程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#defineDOP3_7#defineSEGP0//数码管自左至右依次为1234位#defineMS2L0x18//1ms的延时参数#defineMS2H0xfc#defineucharunsignedchar#defineuintunsignedintucharcodecomm[4]={0x01,0x02,0x04,0x08};ucharcodeseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcodeseg_add_dicimal[10]={0x40,0x79
2、,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};ucharcodeseg_dicimal[2]={0xc0,0x92};uchark=0;uchartemp_l=0;uchartemp_h=0;uchartempsign=0;ucharhundreds=0;uchartens=0;ucharones=0;ucharlow_four=0;/*延时以ms为单位的t时间*/voidDelay(uintt){uinti;while(t--){for(i=0;i<125;i++){}}}/*us级延时,延时时间约4+2*i*/voidDelayus(uch
3、ari){while(--i);}/*产生复位脉冲,等待应答信号*/voidResetpaulse(){DO=0;//拉低约600usDelayus(150);Delayus(150);DO=1;//产生上升沿,延时约15~60usDelayus(30);while(~DO);//等待应答信号}/*读取数据一位*/bitReadbit(){uinti=0;bitb=0;DO=0;//产生读时隙i++;//维持低电平至少1usDO=1;//1us以上后拉高Delayus(2);//延时8us,DO下降沿15内ds18b20输出的数据才有效b=DO;//读取数据Delayus(40);
4、//每个读时隙至少持续60usreturn(b);}/*读取一个字节*/ucharReadbyte(){ucharbyte_read=0;uchari,j;for(i=0;i<8;i++){j=Readbit();byte_read=(j<
5、byte_read;//低位读起}return(byte_read);}/*写一个字节*/voidWritebyte(ucharbyte_to_write){uchari=0;ucharj=0;bitwrite_bit=0;for(j=0;j<8;j++){write_bit=(byte_to_write&0x01);if(write_b
6、it==1)//写1{DO=0;//产生写时隙Delayus(3);//延时15usDO=1;//写1Delayus(40);//延时,写时隙不得低于60us}else{DO=0;//产生写时隙Delayus(50);//延时,保持低约60us~120usDO=1;i++;}byte_to_write=byte_to_write>>1;}}/*配置ds18b20,9位分辨率*/voidConfigurate(){EA=0;Resetpaulse();//发出复位脉冲,每次操作都从复位开始Delay(1);Writebyte(0xcc);//skiproom命令Writebyte(0
7、x4e);Writebyte(0x7f);Writebyte(0x80);Writebyte(0x1f);EA=1;}/*启动温度转换*/voidStartConvert(){Resetpaulse();//发出复位脉冲,每次操作都从复位开始Delay(1);EA=0;Writebyte(0xcc);//skiproom命令Writebyte(0x44);//启动温度转换命令EA=1;}/*读取温度值*/voidReadTempreture(){EA=0;Resetpaulse();//发出复位脉冲,每次操作都从复位开始Delay(1);Writebyte(0xcc);//skip
8、room命令Writebyte(0xbe);//读取暂存器命令temp_l=Readbyte();//存储温度低字节值(整数部分低四位和小数部分)temp_h=Readbyte();//存储温度高字节值(其中高五位为符号位)EA=1;}/*数据转换*/voidDigitalConvert(){uchartotal=0;tempsign=(temp_h>>7)&0x01;//得出符号位if(tempsign==0)//正数的处理方法{total=((temp_h<<4)