stc8单片机adc怎么测出pt100实时温度并显示
时间: 2023-09-14 08:05:01 浏览: 239
要使用STC8单片机测量PT100传感器的实时温度并显示,您需要完成以下几个步骤:
1. 将PT100传感器连接到单片机的ADC输入引脚上,并对ADC进行初始化配置。
2. 通过ADC测量PT100传感器的电阻值,并将其转换为温度值。
3. 将温度值通过串口或LCD等外设进行实时显示。
下面是一个简单的示例代码,可以帮助您完成这些步骤:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^0; // LCD1602液晶显示屏
sbit RW = P2^1;
sbit EN = P2^2;
void ADC_Init()
{
ADC_CONTR = 0x88; // ADC转换时钟为CPU时钟的1/8
}
uint ADC_Read(uchar ch)
{
ADC_CONTR = ADC_CONTR & 0xf0; // 清除原通道选择
ADC_CONTR |= ch; // 设置新通道选择
ADC_CONTR |= 0x08; // 启动ADC转换
while(!(ADC_CONTR & 0x10)); // 等待ADC转换完成
ADC_CONTR &= ~0x10; // 清除ADC转换完成标志
return ADC_RES; // 返回ADC转换结果
}
void LCD_Init()
{
RS = 0; RW = 0; EN = 0;
P0 = 0x38; EN = 1; EN = 0; // 显示模式设置:16x2,5x7点阵,8位数据接口
P0 = 0x0c; EN = 1; EN = 0; // 显示控制设置:显示开,光标关,光标闪烁关
P0 = 0x06; EN = 1; EN = 0; // 输入模式设置:字符不移位,屏幕整体移位
P0 = 0x01; EN = 1; EN = 0; // 清屏
}
void LCD_WriteCmd(uchar cmd)
{
RS = 0; RW = 0; EN = 0;
P0 = cmd; EN = 1; EN = 0;
}
void LCD_WriteData(uchar dat)
{
RS = 1; RW = 0; EN = 0;
P0 = dat; EN = 1; EN = 0;
}
void LCD_WriteStr(uchar *str)
{
while(*str)
{
LCD_WriteData(*str++);
}
}
uchar *Int2Str(uint num)
{
static uchar str[6] = {0};
uchar i = 0, j = 0;
do
{
str[i++] = num % 10 + '0';
num /= 10;
}while(num);
for(j = 0; j < i / 2; j++)
{
str[j] ^= str[i - j - 1];
str[i - j - 1] ^= str[j];
str[j] ^= str[i - j - 1];
}
return str;
}
float PT100_Transform(uint adc_val)
{
float R = (float)adc_val * 3.3 / 4096.0 / 0.0015; // PT100传感器电阻值
float T = (R - 100.0) / 0.385; // PT100传感器温度值
return T;
}
void main()
{
uint adc_val = 0;
float temp = 0.0;
uchar *temp_str;
LCD_Init();
ADC_Init();
while(1)
{
adc_val = ADC_Read(0); // 读取ADC通道0的值
temp = PT100_Transform(adc_val); // 将ADC值转换为温度值
temp_str = Int2Str((uint)temp); // 将温度值转换为字符串
LCD_WriteCmd(0x80); // 移动光标到第1行第1列
LCD_WriteStr("Temp: ");
LCD_WriteStr(temp_str);
LCD_WriteStr(" C"); // 在第1行显示温度值
}
}
```
该代码使用LCD1602液晶显示屏显示PT100传感器的实时温度值,您可以根据实际情况进行修改,例如使用串口进行数据输出等。同时需要注意,PT100传感器输出的电阻值和温度值之间的转换需要参考传感器的数据手册,本代码中仅提供了一个简单的转换公式,可能存在误差。
阅读全文