网站开发 php,网页版ps,个人网站制作多少钱,工业产品设计就业前景ds18b20复位时序图#xff0c;先将b20的数据引脚拉低至少480us#xff0c;然后再将数据引脚拉高15-60us#xff0c;再去将测传感器的数据引脚是不是变低电平并保持60-240us#xff0c;如果是#xff0c;则说明检测到温度传感器#xff0c;并正常工作。需要在240us后才能检…
ds18b20复位时序图先将b20的数据引脚拉低至少480us然后再将数据引脚拉高15-60us再去将测传感器的数据引脚是不是变低电平并保持60-240us如果是则说明检测到温度传感器并正常工作。需要在240us后才能检测温度值 发送数据时序主机将总线拉低60-120us然后释放总线表示发送0主机将总线拉低1-15us然后释放总线表示发送1。从机将在总线拉低30us后典型值读取电平整个时间片应大于60us。
接收数据时许主机将总线拉低1-15us然后释放总线并在拉低后15us内读取总线电平尽量贴近15us的末尾读取为低电平则为接收0读取为高电平则为接收1整个时间片应大于60us。
/*****************************************************************************程序功能实时采集当前环境温度值并显示于数码管上。
*****************************************************************************/
#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);
}