标题:
单片机测量温度DS18B20 LCD1602显示
[打印本页]
作者:
花Q花Q
时间:
2019-6-16 11:35
标题:
单片机测量温度DS18B20 LCD1602显示
最常用的温度传感器 上至128° 下至-55°
//数字式温度计
#include
<reg51.h>
#include
<intrins.h>
#define
uchar
unsigned char
#define
uint
unsigned int
sbit LED = P3^
0
;
//灭掉一颗LED
int
temp;
int
wendu;
uchar data
disdata
[
5
];
//定义开关入口
sbit DQ = P1^
7
;
//DS18B20的接入口
sbit lcden=P2^
1
;
sbit lcdrs=P2^
0
;
sbit LED1=P3^
0
;
sbit LED2=P3^
7
;
//声明区
void
write_com
(uchar
com
);
void
delay
(
uint
);
//定义区
void
delay
(
uint
i
)
{
while
(i--);
}
void
delay_1
(
int
z
)
{
int
x,y;
for
(x=
0
;x<z;x++)
for
(y=
0
;y<
122
;y++);
}
//液晶函数
void
init
()
{
lcden=
0
;
write_com
(
0x38
);
//设置显示模式为5*7八位数据接口
write_com
(
0x0c
);
//开显示,显示光标光标不闪烁
write_com
(
0x06
);
//光标指针自动加1
write_com
(
0x01
);
//清屏
write_com
(
0x80
+
2
);
//显示数据的地址
}
void
write_com
(uchar
com
)
{
lcdrs=
0
;
P0=com;
delay_1
(
10
);
lcden=
1
;
delay_1
(
10
);
lcden=
0
;
}
void
write_data
(uchar
date
)
{
lcdrs=
1
;
P0=date;
delay_1
(
10
);
lcden=
1
;
delay_1
(
10
);
lcden=
0
;
}
//以上为液晶要用到的函数
//ds18b20温度传感器所需函数,分为初始化 读字节 写字节 读取温度4个函数
void
Init_DS18B20
()
//初始化
{
uchar x=
0
;
DQ=
1
;
_nop_
();
_nop_
();
DQ=
0
;
delay
(
70
);
DQ=
1
;
delay
(
15
);
x=DQ;
delay
(
35
);
}
uchar
Read_OneChar
()
//读一个字节
{
uchar i;
uchar temp=
0
;
for
(i=
0
;i<
8
;i++)
{
DQ=
1
;
_nop_
();
DQ=
0
;
_nop_
();
_nop_
();
DQ=
1
;
_nop_
();
temp>>=
1
;
if
(DQ)
temp|=
0x80
;
delay
(
60
);
}
return
(temp);
}
void
Write_OneChar
(uchar
dat
)
//写一个字节
{
uchar i;
for
(i=
0
;i<
8
;i++)
{
DQ=
0
;
_nop_
();
DQ=dat&
0x01
;
delay
(
10
);
DQ=
1
;
dat>>=
1
;
}
}
int
ReadTemp1
()
//读取温度
{
uchar Temp1L=
0
;
uchar Temp1H=
0
;
int
t;
Init_DS18B20
();
Write_OneChar
(
0xCC
);
Write_OneChar
(
0x44
);
delay
(
250
);
LED =
0
;
Init_DS18B20
();
Write_OneChar
(
0xCC
);
Write_OneChar
(
0xBE
);
Temp1L=
Read_OneChar
();
Temp1H=
Read_OneChar
();
if
(Temp1H&
0xF0
)
//显示负数
{
Temp1L=~Temp1L;
Temp1H=~Temp1H;
t=(Temp1H*
256
+Temp1L)/
16
*(-
1
)-
1
;
}
else
t=(Temp1H*
256
+Temp1L)*
0.0625
;
return
(t);
}
void
display
()
{
wendu=
ReadTemp1
();
delay
(
100
);
if
(wendu<
0
)
{
wendu=-wendu;
disdata
[
0
]=
'-'
;
}
else
disdata
[
0
]=wendu/
1000
+
0x30
;
//百位数
disdata
[
1
]=wendu%
1000
/
100
+
0x30
;
//十位数
disdata
[
2
]=wendu%
100
/
10
+
0x30
;
//个位数
disdata
[
3
]=wendu%
10
+
0x30
;
//小数位
write_com
(
0xc2
);
write_data
(
disdata
[
0
]);
write_com
(
0xc3
);
write_data
(
disdata
[
1
]);
write_com
(
0xc4
);
write_data
(
disdata
[
2
]);
write_com
(
0xc5
);
write_data
(
disdata
[
3
]);
}
void
main
()
{
init
();
while
(
1
)
{
ReadTemp1
();
display
();
delay
(
800
);
}
}
DS18B20仿真.png
(194.19 KB, 下载次数: 61)
下载附件
2019-6-16 11:34 上传
作者:
3022488273wcl
时间:
2020-5-25 06:35
特别感谢作者
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1