南通做网站建设公司,快速排序优化,互联网公司的网络运营,前端微信公众号开发ds18b20复位时序图#xff0c;先将b20的数据引脚拉低至少480us#xff0c;然后再将数据引脚拉高15-60us#xff0c;再去将测传感器的数据引脚是不是变低电平并保持60-240us#xff0c;如果是#xff0c;则说明检测到温度传感器#xff0c;并正常工作。需要在240us后才能检…
ds18b20复位时序图先将b20的数据引脚拉低至少480us然后再将数据引脚拉高15-60us再去将测传感器的数据引脚是不是变低电平并保持60-240us如果是则说明检测到温度传感器并正常工作。需要在240us后才能检测温度值 /*****************************************************************************程序功能实时采集当前环境温度值并显示于数码管上。
*****************************************************************************/
#include reg52.h
#define uchar unsigned char
#define uint unsigned intsbit DSP2^2; //define interface
uint temp; // variable of temperature
bit flag; // sign of the result positive or negative
sbit dulaP2^6;
sbit welaP2^7;unsigned char code table[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};void delay(uint count) //delay
{uint i;while(count){i200;while(i0)i--;count--;}
}bit dsreset(void) //发送复位和初始化命令
{uint i;DS0;i103;while(i0)i--;DS1;i4;while(i0)i--;flag DS;for (i 0; i 200; i );return flag;
}bit tmpreadbit(void) //读取一个比特
{uint i;bit dat;DS0;i; //i for delayDS1;i;i;datDS;i8;while(i0)i--;return (dat);
}uchar tmpread(void) //读取一个字节数据
{uchar i,j,dat;dat0;for(i1; i8; i){jtmpreadbit();dat(j7) | (dat1); //读出的数据最低位在最前面这样刚好一个字节在DAT里}return(dat);
}void tmpwritebyte(uchar dat) //向ds18b20写一个字节
{uint i;uchar j;bit testb;for(j1;j8;j){testbdat0x01;datdat1;if(testb) //write 1{DS0;i;i;DS1;i8;while(i0)i--;}else{DS0; //write 0i8;while(i0)i--;DS1;i;i;}}
}void tmpchange(void) //DS18B20 begin change
{dsreset();delay(1);tmpwritebyte(0xcc); // address all drivers on bustmpwritebyte(0x44); // initiates a single temperature conversion
}uint tmp() //get the temperature
{float tt;uchar a,b;dsreset();delay(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);atmpread();btmpread();tempb;temp8; //two byte compose a int variabletemptemp|a;tttemp*0.0625;temptt*100.5;return temp;
}void display(uint temp) //显示程序
{uchar A1,A2,A2t,A3;A1temp/100;A2ttemp%100;A2A2t/10;A3A2t%10;dula0;P0table[A1]; //显示百位dula1;dula0;wela0;P00x7e;wela1;wela0;delay(1);dula0;P0table1[A2]; //显示十位dula1;dula0;wela0;P00x7d;wela1;wela0;delay(1);P0table[A3]; //显示个位dula1;dula0;P00x7b;wela1;wela0;delay(1);
}void main()
{uchar a;do{tmpchange();for(a10; a0; a--){ display(tmp());}}while(1);
}