AT89C51+DS18B20
时间: 2023-11-18 12:03:35 浏览: 116
AT89C51是一种基于MCS-51架构的8位微控制器,DS18B20是一种数字温度传感器。将它们结合起来可以实现温度检测系统。具体实现步骤如下:
1. 硬件连接:将DS18B20的数据线连接到AT89C51的P3.7引脚,VDD连接到5V电源,GND连接到地。
2. 软件编写:使用Keil C编写程序,通过AT89C51的P3.7引脚读取DS18B20的温度数据,并将其显示在数码管上。
3. 程序调试:使用Proteus进行仿真,检查程序是否能够正确读取DS18B20的温度数据并将其显示在数码管上。
以下是AT89C51+DS18B20的示例代码:
```c
#include <reg51.h>
#include <intrins.h>
#define DQ P3_7
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void delay(uint i)
{
while (i--);
}
uchar ds18b20_init()
{
uchar i;
DQ = 1;
_nop_();
_nop_();
DQ = 0;
delay(600);
DQ = 1;
delay(60);
i = DQ;
delay(540);
return i;
}
void ds18b20_write_byte(uchar dat)
{
uchar i, j;
for (i = 0; i < 8; i++)
{
j = dat >> i;
j &= 0x01;
DQ = 0; _nop_();
_nop_();
DQ = j;
delay(6);
DQ = 1;
if (i == 7)
delay(10);
}
}
uchar ds18b20_read_byte()
{
uchar i, j, dat = 0;
for (i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
j = DQ;
delay(4);
dat |= (j << i);
}
return dat;
}
void display(uchar dat)
{
P0 = table[dat / 10];
P2 = 0xfe;
delay(5);
P2 = 0xff;
P0 = table[dat % 10];
P2 = 0xfd;
delay(5);
P2 = 0xff;
}
void main()
{
uchar temp, temp1, temp2;
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0x44);
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0xbe);
temp1 = ds18b20_read_byte();
temp2 = ds18b20_read_byte();
temp = (temp2 << 4) | (temp1 >> 4);
display(temp);
}
```
阅读全文