单片机DS18B20温度计C语言程序
//功能:有负温度显示,高精度格度可以显示-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温度 相关文章:
- 51单片机驱动DS18B20温度传感器程序及心得(12-01)
- 51单片机DS18B20温度控制报警程序(可设置温控范围)(11-30)
- 51单片机多路DS18B20温度测量程序(11-30)
- 51单片机DS18B20温度测量(11-30)
- 单片机·DS18B20温度传感器(11-24)
- 基于单片机的DS18B20温度计设计(11-23)