功能介绍:采用51单片机和MAX13865模块+PT100传感器+LCD1602显示屏,通过PT100传感器感知稳定,MAX13865模块进行转换,采用SPI协议和单片机进行通信,将温度传送到单片机,然后单片机将数据显示到LCD1602屏幕上。下面是相关资料的介绍:文末有资料分享
1-基于51单片机PT100铂电阻温度检测LCD1602显示(程序+原理图+PCB+仿真+全套资料)
程序部分展示,有中文注释,新手容易看懂
unsigned char SPI_ReadWriteByte(unsigned char byte)
{
uint8_t i;
uint8_t Temp=0x00;
unsigned char SDI;
for (i = 0; i < 8; i++)
{
MAX31865_SCK_LOW;//SCLK = 0; 拉低时钟
if (byte&0x80)
{
MAX31865_MOSI_HIGH; //SO=1
}
else
{
MAX31865_MOSI_LOW;//SO=0
}
byte <<= 1;
MAX31865_SCK_HIGH;//SCLK = 1;//先将时钟拉高
SDI = READ_MAX31865_MISO;//判断si是否有输入
Temp<<=1;
if(SDI) //读到1时
{
Temp++; //置1 即向右移动一位同时加1 因上边有<<=1
}
}
return Temp; //返回读到miso输入的值
}
//初始化max31865 的IO口
void max31865_init(void)
{ //初始化SPI1
writeRegister8(0x00, 0x00); //清除配置寄存器
enableBias(1); //使能偏置电压
delay_ms(10); //等待10ms使得RTDIN的滤波电容充电
setWires(MAX31865_3WIRE); //使能PT100 三线工作模式
clearFault(); //清除故障检测位
}
//RTD接线模式设置
void setWires(max31865_numwires_t wires)
{
uint8_t t = readRegister8(MAX31856_CONFIG_REG);
if (wires == MAX31865_3WIRE) {
t |= MAX31856_CONFIG_3WIRE;
} else {
// 2 or 4 wire
t &= ~MAX31856_CONFIG_3WIRE;
}
writeRegister8(MAX31856_CONFIG_REG, t);
}
//设置自动转换模式
void autoConvert(unsigned char b)
{
uint8_t t = readRegister8(MAX31856_CONFIG_REG);
if (b) {
t |= MAX31856_CONFIG_MODEAUTO; // enable autoconvert
} else {
t &= ~MAX31856_CONFIG_MODEAUTO; // disable autoconvert
}
writeRegister8(MAX31856_CONFIG_REG, t);
}
//使能偏执电压
void enableBias(unsigned char b)
{
uint8_t t = readRegister8(MAX31856_CONFIG_REG);
if (b) {
t |= MAX31856_CONFIG_BIAS; // enable bias
} else {
t &= ~MAX31856_CONFIG_BIAS; // disable bias
}
writeRegister8(MAX31856_CONFIG_REG, t);
}
//读寄存器,8位
u8 readRegister8(u8 addr)
{
uint8_t ret = 0;
addr &= 0x7F; // make sure top bit is set to 1
MAX31865_CS_LOW;
delay_us(100);
SPI_ReadWriteByte(addr); //发送写取状态寄存器命令
ret = SPI_ReadWriteByte(0xff); //写入一个字节
delay_us(100);
MAX31865_CS_HIGH; //取消片选
return ret;
}
下面是Proteus仿真:
下面是AD版本的原理图和PCB