-
//功用:有负温度显现,高精度格度能够显现-9.99C到99.99C
//带有报警装置
//当温度为正时,显现十位 个位 非常位 百分位
//当温度为负时,显现负号 十位 个位 非常位
//缺陷是上下限报警数值不能改动
//注明:数码管是CC—共阴型
//读取温度 -
sbit DQ = P3^0;
//界说通讯端口
bit fg=1;
//晶振12MHz
void delay_18B20(unsigned int i)
{while(i–);
}
//初始化函数
bit Init_DS18B20(void)
{unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay_18B20(80); //准确延时 大于 480us DQ = 1; //拉高总线 delay_18B20(14); x=DQ; //稍做延时后 假如x=0则初始化成功 x=1则初始化失利 return(x); //Init_DS18B20(void) 被界说为 bit则要有返回值 delay_18B20(20);
}//while(DQ); //while(~DQ); //检测到应对脉冲 //
//读一个字节
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_18B20(4); } return(dat);
}
//写一个字节
WriteOneChar(unsigned char dat)
{unsigned char i=0; for (i=8; i>0; i–) { DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; }
}
ReadTemperature(void)
{unsigned char a=0; unsigned char b=0; unsigned int t=0; Init_DS18B20(); WriteOneChar(0xCC); // 越过读序号列号的操作 WriteOneChar(0x44); // 发动温度转化 delay_18B20(100);//至少750ms -
Init_DS18B20(); WriteOneChar(0xCC); //越过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个便是温度 a=ReadOneChar(); b=ReadOneChar(); if((b&0xf8)==0xf8) //位为1 时温度是负 { b=~b; a=~a+1; //补码转化,取反加一 (a==0)b++; fg=0; //读取温度为负时fg=0 } //传感器返回值除16得实践温度值 //技巧处理后先乘25,再除4,除4用右移完成 t=((b*256+a)*25)>>2; //t=t+(t>0?0.5:-0.5); //四佘五入大于0加0.5, 小于0减0.5 前面要把t界说为float型才能够 return(t);
} -
显现头文件:display()
-
char disp[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//数字0-9和‘-’的共阴段码
char disp_dot[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};
void display(int tmp){ if(fg==0) { P2 = 0xff; P1 = 0x40;//”-“ P2 = 0xEF; delay_18B20(2000); } P2 = 0xff; P1 = 0x39;//”C” //若先位选再段选, 因为IO口默许输出高电平, 所以领先位选会使数码管呈现乱码 P2 = 0xFE; delay_18B20(200); -
P2 = 0xff; P1 = disp[tmp/10]; P2 = 0xFD; delay_18B20(200); -
P2 = 0xff; P1 =disp_dot[tmp/10]; P2 = 0xFB; delay_18B20(200); -
if(fg==1) -
{ -
P2 = 0xff; P1 = disp[tmp/100]; P2 = 0xF7; delay_18B20(200); }
}
单片机DS18B20温度计C言语程序
功能:有负温度显示,高精度格度可以显示-999C到9999C带有报警装置当温度为正时,显示十位个位十分位百分位当温度为负时,
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/258035.html