pt100和ds18b20
时间: 2024-06-19 17:03:12 浏览: 8
PT100和DS18B20都是温度传感器,可以用于测量温度。其中PT100是一种热电阻传感器,常用于高精度测量场合,如实验室、工业生产等领域。它的原理是利用铂电阻的温度系数进行测量,具有高精度、长寿命、线性良好等特点。而DS18B20则是一种数字温度传感器,具有体积小、精度高、使用方便等优点,常用于智能家居、智能化生产等领域。
相关问题
PT100温度采集与DS18B20温度采集的优缺点
PT100温度传感器和DS18B20温度传感器都是常用的温度采集器件,它们有各自的优缺点。
PT100温度传感器是一种基于电阻变化原理的温度传感器,其优点是具有较高的精度和稳定性,并且适用于较高的温度范围。但是,PT100温度传感器需要外部电路进行放大和线性化处理,因此需要更复杂的电路设计和更高的成本。
DS18B20温度传感器是一种数字温度传感器,其优点是具有较小的体积和较低的成本,并且可以直接与微控制器进行通信。而且,DS18B20温度传感器具有较好的抗干扰能力和较低的功耗,对于某些应用场景非常适用。但是,DS18B20温度传感器的精度和稳定性相对较低,适用温度范围也相对较窄。
综上所述,选择PT100温度传感器还是DS18B20温度传感器需要根据具体的应用场景来选择,需要权衡各自的优缺点来做出决策。
在利用Pt100、8255、ADC0809和51单片机的条件下,用c语言写一段实现温度采集与控制
好的,您可以参考以下代码:
```c
#include <reg51.h>
#include <stdio.h>
#define SEG P0 // 数码管端口
#define KEY P1 // 按键端口
#define DQ P2.0 // DS18B20引脚
#define CS P2.1 // ADC0809 片选端口
#define OE P2.2 // ADC0809 输出使能端口
#define CLK P2.3 // ADC0809 时钟端口
#define DI P2.4 // ADC0809 数据输入端口
#define DO P2.5 // ADC0809 数据输出端口
#define RS P2.6 // 8255 数据输出端口
#define RW P2.7 // 8255 数据输出端口
unsigned char code segCode[] = { // 数码管编码
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
unsigned char code segPos[] = { // 数码管位置
0xfe, 0xfd, 0xfb, 0xf7
};
unsigned char code tempStr[] = "TEMP:"; // 温度显示字符串
unsigned char adcVal; // ADC0809采集的数值
unsigned char tempInt; // 温度整数部分
unsigned char tempFrac; // 温度小数部分
unsigned char tempH; // 温度高位
unsigned char tempL; // 温度低位
void delay(unsigned int time) { // 延时函数
unsigned int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 125; j++);
}
}
void ds18b20Init() { // DS18B20初始化函数
unsigned char reset;
DQ = 1;
delay(4);
DQ = 0;
delay(80);
DQ = 1;
delay(4);
reset = DQ;
delay(20);
}
void ds18b20Write(unsigned char dat) { // DS18B20写函数
unsigned char i;
for (i = 0; i < 8; i++) {
DQ = 0;
DQ = dat & 0x01;
dat >>= 1;
delay(5);
DQ = 1;
}
}
unsigned char ds18b20Read() { // DS18B20读函数
unsigned char i, dat = 0;
for (i = 0; i < 8; i++) {
DQ = 0;
DQ = 1;
dat >>= 1;
if (DQ) dat |= 0x80;
delay(5);
}
return dat;
}
void adc0809Start() { // ADC0809开始采集函数
OE = 1;
CS = 0;
DI = 1;
CLK = 0;
delay(1);
CLK = 1;
delay(1);
CS = 1;
}
unsigned char adc0809Read() { // ADC0809读函数
unsigned char i, dat = 0;
OE = 0;
CS = 0;
for (i = 0; i < 8; i++) {
CLK = 0;
delay(1);
dat <<= 1;
dat |= DO;
CLK = 1;
delay(1);
}
CS = 1;
OE = 1;
return dat;
}
void write8255(unsigned char dat) { // 8255写函数
RW = 0;
RS = 0;
P0 = dat;
RS = 1;
}
unsigned char read8255() { // 8255读函数
unsigned char dat;
RW = 1;
RS = 0;
dat = P0;
RS = 1;
return dat;
}
void main() {
unsigned char i;
float temp;
ds18b20Init();
while (1) {
ds18b20Write(0xcc); // 跳过ROM操作
ds18b20Write(0x44); // 启动温度转换
delay(100);
ds18b20Init();
ds18b20Write(0xcc); // 跳过ROM操作
ds18b20Write(0xbe); // 读取温度转换结果
tempL = ds18b20Read();
tempH = ds18b20Read();
temp = tempH;
temp *= 256;
temp += tempL;
temp /= 16;
tempInt = temp;
tempFrac = (temp - tempInt) * 10;
adc0809Start(); // ADC0809开始采集
delay(10);
adcVal = adc0809Read(); // 读取ADC0809采集值
write8255(0x80); // 数码管位置设置为第一个
for (i = 0; i < 5; i++) {
SEG = segCode[tempStr[i] - '0']; // 显示温度显示字符
delay(1);
SEG = 0x00;
write8255(segPos[i]); // 数码管位置切换
delay(1);
}
SEG = segCode[tempInt]; // 显示温度整数部分
delay(1);
SEG = 0x00;
write8255(segPos[5]); // 数码管位置切换
delay(1);
SEG = segCode[10]; // 显示小数点
delay(1);
SEG = 0x00;
write8255(segPos[6]); // 数码管位置切换
delay(1);
SEG = segCode[tempFrac]; // 显示温度小数部分
delay(1);
SEG = 0x00;
write8255(segPos[7]); // 数码管位置切换
delay(1);
SEG = segCode[adcVal / 100]; // 显示ADC0809采集值
delay(1);
SEG = 0x00;
write8255(segPos[8]); // 数码管位置切换
delay(1);
SEG = segCode[adcVal % 100 / 10];
delay(1);
SEG = 0x00;
write8255(segPos[9]); // 数码管位置切换
delay(1);
SEG = segCode[adcVal % 10];
delay(1);
SEG = 0x00;
}
}
```
这段代码实现了利用Pt100测量温度,ADC0809采集电压,8255控制数码管的功能。具体实现过程如下:
1. 程序初始化时,先初始化DS18B20温度传感器和8255控制芯片的端口。
2. 进入主循环后,先向DS18B20写入启动温度转换命令,并等待一段时间。
3. 再次初始化DS18B20后,读取温度转换结果,并将结果转换为温度值。
4. 同时,向ADC0809发送采集命令,读取采集结果,并将结果显示在数码管上。
5. 通过8255控制数码管的位置和显示内容,显示温度和ADC0809采集值。
需要注意的是,在实际应用中,还需要根据具体情况进行硬件电路的搭建和调试。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)