立即注册 登录
返回首页

uid:203025的个人空间

日志

DS18B20读取温度程序代码段

已有 1304 次阅读2017-5-23 20:01


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include"reg51.h"
 
#include"d1820.h"
 
int t;
 
uint num;
 
uchar dat; //读写数据变量
 
uchar a=0;
 
uchar b=0;
 
float tep=0; //读一个温度时的温度转换中间间
 
uchar data tempbuf[4]=0;//温度字型显示中间变量
 
/******************************************************
 
函数名称:delay(uint num)
 
返回值:无
参数:uint num 
延时数据值
作用:延时
 
*******************************************************/
 
void delay(uint num)
 
{
 
while(num--);
 
}
 
/******************************************************
 
函数名称:void Init_DS18B20(void)
 
返回值:无
 
参数:无
 
作用:初始化18B20
 
*******************************************************/
 
void Init_DS18B20(void)
 
{
 
char x=0;
 
DQ=1;
delay(10);//稍作延时
DQ=0;
delay(80);//延时>480us 540us
DQ=1; //拉高总线 15-60us
delay(20);
x=DQ;//读总线状态 为0复位成功,为1则不成功
delay(30);
DQ=1;//释放总线
}
/******************************************************
函数名称:uchar ReadOneChar(void)
返回值:uchar dat
参数: 无
作用:读取1820一个字节
*******************************************************/
uchar ReadOneChar(void)
{
uchar i;
uchar dat=0;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;//给脉冲
if(DQ)
{dat|=0x80;}//读1 /// 读0右移处理
delay(8);//15us内读完一个数
}
return(dat);
}
/******************************************************
函数名称:void WriteOneChar(uchar dat)
返回值:无
参数: uchar dat
作用:向1820写一个字节
*******************************************************/
/////****写DS18B20***/
//写0 60us读完,写1 30us 内读完
 
void WriteOneChar(uchar dat)
{
uchar i=0;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;//写所给数据最低位
delay(10);
///////////
DQ=1;//给脉冲
dat>>=1;
}
delay(8);
}
/******************************************************
函数名称:int ReadOneTemperature(void)
返回值:int t
参数: 无
作用:读温度值
*******************************************************/
int ReadOneTemperature(void)
////////***读取温度值***********/
//// 每次读写均要先复位
{
Init_DS18B20();
WriteOneChar(0xcc);//发跳过ROM命令
WriteOneChar(0x44);//发读开始转换命令
Init_DS18B20();
WriteOneChar(0xcc);//发跳过ROM命令
WriteOneChar(0xbe);//读寄存器,共九字节,前两字节为转换值
a=ReadOneChar(); //a存低字节
b=ReadOneChar(); //b存高字节
t=b;
t<<=8;//高字节转换为10进制
t=t|a;
tep=t*0.0625;//转换精度为0.0625/LSB
t=tep*10+0.5;//保留1位小数并四舍五入****后面除10还原正确温度值)
return(t);
}
/******************************************************
函数名称:uint Temperaturepro(void)
返回值:void
参数: void
作用:温度处理
*******************************************************/
void Temperaturepro(void)
{
int temp;
temp=ReadOneTemperature();
tempbuf[3]=temp/1000;//百位
tempbuf[2]=temp/100%10;//十位
tempbuf[1]=temp%100/10; //个位
tempbuf[0]=temp%10; //小数
}

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部