51单片和DS18B20测温程序仿真和源代码
时间: 2024-03-12 14:43:53 浏览: 74
以下是51单片机和DS18B20测温程序的仿真和源代码:
```
#include <reg52.h>
#include <intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define DQ P3_7
u8 TEMP[2];
void delay(u16 i)
{
while (i--)
;
}
void delayus(u16 i)
{
while (i--)
;
}
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
delayus(5);
DQ = 0;
delayus(500);
DQ = 1;
delayus(50);
initflag = DQ;
delayus(500);
return initflag;
}
void write_ds18b20(u8 dat)
{
u8 i;
for (i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
DQ = dat & 0x01;
delayus(60);
DQ = 1;
dat >>= 1;
}
}
u8 read_ds18b20(void)
{
u8 i, dat = 0;
for (i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
DQ = 1;
_nop_();
dat >>= 1;
if (DQ)
dat |= 0x80;
delayus(60);
DQ = 1;
}
return dat;
}
void get_ds18b20(void)
{
u8 i;
init_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0x44);
delay(100);
init_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0xbe);
for (i = 0; i < 2; i++)
{
TEMP[i] = read_ds18b20();
}
}
void main(void)
{
while (1)
{
get_ds18b20();
printf("Temperature: %d.%d C\r\n", TEMP[1], TEMP[0]);
delay(1000);
}
}
```
以上是51单片机和DS18B20测温程序的源代码,可以使用Keil等软件进行编译和下载。在使用前需要将DS18B20连接在P3.7口上。程序通过读取DS18B20的温度数据并将其显示在串口上。
阅读全文