DS18B20用mbed写代码
时间: 2024-02-03 22:11:36 浏览: 78
DS18B20是一款数字温度传感器,可以通过1-Wire总线与单片机进行通信。以下是使用mbed平台编写的DS18B20代码示例:
```c++
#include "mbed.h"
#define DS18B20_SKIP_ROM 0xCC
#define DS18B20_CONVERT_T 0x44
#define DS18B20_READ_SCRATCHPAD 0xBE
DigitalInOut ds18b20(PC_13);
void ds18b20_write_bit(int bit) {
ds18b20.output();
ds18b20 = 0;
wait_us(2);
if (bit) {
ds18b20 = 1;
}
wait_us(60);
ds18b20 = 1;
}
int ds18b20_read_bit() {
ds18b20.output();
ds18b20 = 0;
wait_us(2);
ds18b20.input();
wait_us(10);
int bit = ds18b20.read();
wait_us(50);
return bit;
}
void ds18b20_write_byte(int byte) {
for (int i = 0; i < 8; i++) {
int bit = byte & 0x01;
byte >>= 1;
ds18b20_write_bit(bit);
}
}
int ds18b20_read_byte() {
int byte = 0;
for (int i = 0; i < 8; i++) {
int bit = ds18b20_read_bit();
byte |= (bit << i);
}
return byte;
}
float ds18b20_read_temperature() {
ds18b20_write_byte(DS18B20_SKIP_ROM);
ds18b20_write_byte(DS18B20_CONVERT_T);
wait_ms(750);
ds18b20_write_byte(DS18B20_SKIP_ROM);
ds18b20_write_byte(DS18B20_READ_SCRATCHPAD);
int low = ds18b20_read_byte();
int high = ds18b20_read_byte();
int temp = (high << 8) | low;
return (float)temp * 0.0625;
}
int main() {
while (1) {
float temperature = ds18b20_read_temperature();
printf("Temperature: %.2f C\r\n", temperature);
wait_ms(1000);
}
}
```
需要注意的是,在使用DS18B20之前,需要将1-Wire总线上拉至高电平。在本例中,使用了mbed板载的PC_13引脚作为DS18B20的数据引脚,需要将其配置为DigitalInOut类型。在读取温度值时,需要先发送“跳过ROM”命令,然后发送“转换温度”命令,等待一定时间后再发送“跳过ROM”命令和“读取寄存器”命令,最后读取寄存器中的温度值并计算得到实际温度值。
阅读全文