- 首页
-
- 问答
-
-
Suert
#include<reg52.h>#include<math.h>sbit dq=p2^0;bit presence;unsigned char templ,temph;char array[10]={0x7e,0x48,0x3d,0x6d,0x4b,0x67,0x73,0x4c,0x7f,0x4f};void delay(unsigned int num)//可定义延时{ while( --num );}bit init_ds18b20(void){ dq = 1; //dq复位 delay(8); //稍做延时 dq = 0; //单片机将dq拉低 delay(90); //精确延时大于 480us dq = 1; //拉高总线 delay(8); presence = dq; //如果=0则初始化成功 =1则初始化失败 delay(100); dq = 1; return(presence); //返回信号,0=presence,1= no presence}unsigned int readonechar(void){unsigned char i = 0;unsigned char dat = 0;for (i = 8; i > 0; i--) { dq = 0; // 给脉冲信号 dat >>= 1; //位右移 dq = 1; // 给脉冲信号 等待传感器返回脉冲 if(dq) dat |= 0x80; delay(4); } return (dat);}void writeonechar(unsigned char dat){ unsigned char i = 0; for (i = 8; i > 0; i--) { dq = 0; dq = dat&0x01; delay(5); dq = 1; dat>>=1; }}void read_temperature(void){ init_ds18b20(); writeonechar(0xcc); // 跳过读序号列号的操作 writeonechar(0x44); // 启动温度转换 init_ds18b20(); writeonechar(0xcc); //跳过读序号列号的操作 writeonechar(0xbe); //读取温度寄存器 templ = readonechar(); //温度低8位 temph = readonechar(); //温度高8位}void main(){float temp;char a; init_ds18b20(); writeonechar(0xcc); writeonechar(0x44); // 启动温度转换 init_ds18b20(); writeonechar(0xcc); writeonechar(0xbe); //读取温度寄存器 templ = readonechar(); //温度低8位 temph = readonechar(); //温度高8位 temph&=0x07; temp=((templ>>4)|(temph<<4)); temp+=(templ&0x0f)*0.0625; a= temp/10; p1=array[a]; a=temp-10*a; p0=array[a];}
-
-
-
-
-
-
-
-
求购