ds18b20温度传感器数码管显示单片机程序
时间: 2023-12-09 14:01:44 浏览: 158
ds18b20是一种数字温度传感器,可以通过单片机来读取并将温度数据显示在数码管上。下面是一个简单的ds18b20温度传感器数码管显示单片机程序:
```c
#include <REG51.h>
sbit DQ = P2^7; // ds18b20数据线接口
unsigned int temp; // 存储温度值
unsigned char display[4]; // 存储数码管显示值
// ds18b20初始化函数
void ds18b20_init() {
DQ = 1;
delay_us(2);
DQ = 0;
delay_us(500);
DQ = 1;
delay_us(60);
}
// ds18b20写入命令函数
void ds18b20_write(unsigned char cmd) {
unsigned char i;
for (i = 0; i < 8; i++) {
DQ = 0;
DQ = cmd & 0x01;
delay_us(60);
DQ = 1;
cmd >>= 1;
}
}
// ds18b20读取数据函数
unsigned int ds18b20_read() {
unsigned char i;
unsigned int data = 0;
for (i = 0; i < 16; i++) {
DQ = 0;
data >>= 1;
DQ = 1;
if (DQ) {
data |= 0x8000;
}
delay_us(60);
}
return data;
}
// 温度传感器获取温度函数
void ds18b20_getTemp() {
ds18b20_init();
ds18b20_write(0xcc); // 跳过ROM操作
ds18b20_write(0x44); // 启动温度转换
delay_ms(750); // 等待转换完成
ds18b20_init();
ds18b20_write(0xcc); // 跳过ROM操作
ds18b20_write(0xbe); // 读取温度
temp = ds18b20_read();
}
// 数码管显示函数
void display_temp() {
unsigned int i, n;
for (i = 0; i < 4; i++) {
n = temp % 10;
display[i] = n;
temp /= 10;
}
}
void main() {
ds18b20_getTemp(); // 获取温度
display_temp(); // 数码管显示
while (1) {
P1 = 0x00; // 关闭所有数码管
P0 = display[0]; // 显示个位数
P1 = 0x01;
delay_ms(5);
P1 = 0x00;
P0 = display[1]; // 显示十位数
P1 = 0x02;
delay_ms(5);
P1 = 0x00;
P0 = display[2]; // 显示百位数
P1 = 0x04;
delay_ms(5);
P1 = 0x00;
P0 = display[3]; // 显示千位数
P1 = 0x08;
delay_ms(5);
}
}
```
这段程序首先初始化ds18b20传感器,然后通过单片机读取温度值并将其转换为数码管显示的格式。程序通过循环不断更新数码管显示的数值,从而实现实时显示ds18b20传感器获取的温度数值。
阅读全文