/*************** writer:shopping.w ******************/
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ = P3^6
uchar code DSY_CODE[] =
{ 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00}
uchar code df_Table[] = {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9}
uchar CurrentT = 0
uchar Temp_Value[]={0x11,0x22}
uchar Display_Digit[]={0,0,0,0}
bit DS18B20_IS_OK = 1
void Delay(uint x)
{
while(--x)
}
uchar Init_DS18B20()
{
uchar status
DQ = 1
Delay(8)
DQ = 0
Delay(90)
DQ = 1
Delay(8)
DQ = 1
return status
}
uchar ReadOneByte()
{
uchar i,dat=0
DQ = 1
_nop_()
for(i=0i<8i++)
{
DQ = 0
dat >>= 1
DQ = 1
_nop_()
_nop_()
if(DQ)
dat |= 0X80
Delay(30)
DQ = 1
}
return dat
}
void WriteOneByte(uchar dat)
{
uchar i
for(i=0i<8i++)
{
DQ = 0
DQ 伍侍薯= dat& 0x01
Delay(5)
DQ = 1
dat >>= 1
}
}
void Read_Temperature()
{
if(Init_DS18B20() ==1 )
DS18B20_IS_OK = 0
else
{
WriteOneByte(0xcc)
WriteOneByte(0x44)
Init_DS18B20()
WriteOneByte(0xcc)
WriteOneByte(0xbe)
Temp_Value[0] = ReadOneByte()
Temp_Value[1] = ReadOneByte()
DS18B20_IS_OK=1
}
}
void Display_Temperature()
{
uchar i
uchar t=150
uchar ng=0, np=0
if ( (Temp_Value[1] & 0xf8) == 0xf8)
{
Temp_Value[1] = ~Temp_Value[1]
Temp_Value[0] = ~Temp_Value[0]+1
if (Temp_Value[0] == 0x00) Temp_Value[1]++
ng=1np=0xfd
}
Display_Digit[0] = df_Table[ Temp_Value[0] & 0x0f ]
CurrentT = ((Temp_Value[0] & 0xf0)>>4) | ((Temp_Value[1] & 0x07)<谈枣<4)
Display_Digit[3] = CurrentT / 100
Display_Digit[2] = CurrentT % 100 / 腔者10
Display_Digit[1] = CurrentT % 10
if (Display_Digit[3] == 0)
{
Display_Digit[3] = 10
np = 0xfb
if (Display_Digit[2] == 0)
{
Display_Digit[2] = 10
np = 0xf7
}
}
for (i=0i<30i++)
{
P0=0x39P2=0x7fDelay(t)P2=0xFF
P0=0x63P2=0xbfDelay(t)P2=0xff
P0=DSY_CODE[Display_Digit[0]]
P2=0xDFDelay(t)P2=0xff
P0=(DSY_CODE[Display_Digit[1]]) | 0x80
P2=0xefDelay(t)P2=0xff
P0=DSY_CODE[Display_Digit[2]]
P2=0xf7Delay(t)P2=0xff
P0=DSY_CODE[Display_Digit[3]]
P2=0xfb Delay(t) P2=0xff
if (ng)
{
P0 = 0x40 P2 = np Delay(t) P2=0xff
}
}
}
void main()
{
Read_Temperature()
Delay(50000)
Delay(50000)
while(1)
{
Read_Temperature()
if(DS18B20_IS_OK)
Display_Temperature()
}
}
室温是指人们喜欢的室内空气温度范围。测量室温实际上很容易做到。您可以选择放置在房间中央的温度计来提供温度读数,也可以将应用程序下载到智能手机上,以测量室温。
方法一、读温度计
1、选择数字温度计以获得最准确的读数。电子或数字温度计可能比其他温度计更昂贵,但它们提供更快的读数并且可以提供更准确的温度。它们对温度变化的反应也比其他类型的温度计更快,因此您始终可以扒搭答获得准确的春慧读枝袭数。
· 一些数字温度计具有存储温度读数的能力。因此,您可以比较室温随时间的变化情况,看看它是如何变化的。
2、使用玻璃温度计获得近似温度
玻璃温度计使用充满液体的玻璃管来测量温度。随着温度计周围的空气变暖,液体沿管向上移动,可用于近距离测量室温。
· 选择不含汞的玻璃温度计。汞是剧毒的,如果温度计坏了可能会很危险。
· 玻璃温度计也可以称为灯泡温度计或液体玻璃温度计。
3、选择双金属温度计以获得易于阅读的选项
双金属或表盘温度计有一个金属指针,可以上下移动一个圆形刻度,以显示温度。他们使用随着温度升高而膨胀和弯曲的金属条。当条带扩展或收缩时,它会在刻度上移动指针。指针的大箭头便于查看室温。
· 双金属温度计不如数字温度计准确。
4、将温度计放在房间中央
无论您使用哪种类型的温度计,都需要将其放置在距离地面至少(0.61 m) 的房间中央,以便准确测量室温。将温度计安装在墙上会产生不准确的结果,因为来自墙壁的热量会使读数失真。
· 将温度计放在桌子或凳子上,这样地板的温度就不会影响读数。
· 提示:确保温度计附近没有任何热源。
5、等待 5 分钟,让温度计适应房间
在检查温度之前,让温度计适应房间。温度计,尤其是玻璃和双金属温度计,需要几分钟才能准确读取房间温度。
· 不要拿着或站在温度计旁边,否则你的体温会影响温度读数。
6、检查温度计上的温度
将温度计放在房间中央并等待几分钟使其调整后,您可以检查温度读数以测量室温。一般室温测量值约为(21–24 °C)。
· 数字温度计将在其屏幕上显示温度,并且是最准确的。
· 阅读玻璃温度计中液体顶部旁边的数字以测量温度。
· 查看双金属温度计上箭头所指的数字以测量温度。
方法二、使用智能手机
1、将温度计应用程序下载到您的智能手机
许多智能手机都配备了用于监控设备温度的传感器。您可以下载使用这些传感器获取房间环境温度读数的应用程序。转到手机上的应用商店并搜索要下载的温度计应用。
前往应用商店将温度计应用下载到您的手机上。
2、打开应用程序
下载应用程序后,在屏幕上找到它,然后用手指点击将其打开。打开应用程序后,您可能需要等待几分钟才能更新应用程序。
您必须等到应用程序完全下载后才能打开它。
3、选择环境温度读数以测量室温
根据您使用的应用程序,您将有不同的温度读数可供选择。一些应用程序允许您根据气象数据检查手机电池的温度或室外温度。选择环境温度读数以查找您周围的室温。
一、DS18B20.c文件(用LCD1602显示的 I_N为DS18B20数据IO)
/*
模块名称:温度模块(DS18B20)
模块功能:DS18B20的功能子函数
*/
/********************************************预处理命令*******************************************/
#include"ds18b20.h"
/*
函数名:DS_WriBteAndRead(bit x,unit8 val)
函数功能:向DS18B20内部寄存器写入或读取数据
输入: x,val
输出:DS_WriteAndRead
*/
unit8 DS_WriteAndRead(bit x,unit8 val)
{
unit8 i=0,Red=0
for(i=8i>0i--)
{
if(x) //读陵派数据
{
I_N=0
I_N=1
Red>>=1
if(I_N)Red|=0x80
}
else //写数据
{
I_N=1
I_N=0
I_N=val&0x01
val>>=1
}
delay_us(4)
}
if(x)
return(Red)//返回数据
else
return 0
}
/*
函数尺激贺名:DS_Reset()
函数功能:DS18B20初始化设置
输入:无
输出:无
*/
void DS_Reset()
{
I_N=1
I_N=0
delay_us(50)
I_N=1
delay_us(30)
DS_WriteAndRead(0,0xcc)//跳过搜索
}
/*
函数名: DS_Data_Handle()
函数功能:铅慧数据处理
输入:无
输出:无
*/
void DS_Data_Handle()
{
unit_16 Ra=0,Rb=0,Temp=0
DS_Reset()//复位
DS_WriteAndRead(0,0x44)//启动温度转换
DS_Reset()//复位
delay_us(100)
DS_WriteAndRead(0,0xbe)//读暂存器中的数据
Ra=DS_WriteAndRead(1,0xbe)
Rb=DS_WriteAndRead(1,0xbe)
Temp=Rb
Temp<<=8
Temp|=Ra
Temp=Temp*0.625+0.5//数值转换
LCD_Write_Data(0,0xc5)
LCD_Write_Data(1,(Temp/100)+48)
LCD_Write_Data(1,(Temp/10%10)+48)
LCD_Write_Data(1,46)
LCD_Write_Data(1,(Temp%10)+48)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)