单片机Ds18b20温度传感器的学习(附踩雷清单)

主函数
温度传感器可记录温度-55~125摄氏度

#include"reg52.h"
#include"temp.h"//这个头文件要写上,否则会报错!!!
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;//数码管用74LS138译码器来控制,所以有了这些东西
sbit LSB=P2^3;
sbit LSC=P2^4;
char num=0;//有用。在后面解释
u8 DisplayData[8];//工具数组,接受num转换过来的16进制数,传递给smg段数组
//上面这个数组这个要写成比5大的数因为要显示6位数码管,然后拼写注意一下!
u8 code smgduan[10]={
   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段选,从0~9
void delay(u16 i)
{
   
	//粗延时函数
	while(i--);
}
void datapros(int temp)//参数表别忘了!!!因为你主函数调用这个函数是要传进实参的!!
{
   
	float tp;//定义温度浮点数。因为数据处理有小数点所以将温度赋给一个浮点型变量
	if(temp<0)
	{
   //如果从温度传感器里读取的温度是负数
		DisplayData[0]=0x40;//就让数码管显示1个负号在前头
		//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
		temp=temp-1;
		temp=~temp;
		tp=temp;
		temp=tp*0.0625*100+0.5;
		//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
		//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
		//算加上0.5,还是在小数点后面。	
		//读取的温度经一顿转换后变为真正的10进制温度
	}
	else//如果从温度传感器里读取的温度是0或者正数
	{
   
		DisplayData[0]=0x00;//那就不用在数码管最前头显示一个负号了
		tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
		//如果温度是正的那么,那么正数的原码就是补码它本身
		temp=tp*0.0625*100+0.5;
		//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
		//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
		//算加上0.5,还是在小数点后面。
	}
	DisplayData[1]=smgduan[temp/10000];//因为数码管我们只用右边的6位,而且我们让temp多×了100,所以这里/10000
	//所以这里剥离temp的百位给DisplayData数组存着  数组下标为0的数字你已经占用了,这里必须为1开始
	DisplayData
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值