📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 用铂电阻温度传感器PT100及A/D芯片MCP3421设计的测温系统
//-----------------------------------------------------------------
// 说明: 本例MCP3421工作于18位精度模式,程序运行时,根据模/数转换结果
// 得到阻值,然后根据Callendar-Van Dusen温度/电阻关系式求解方程,
// 得出-200℃ ~ 850℃范围内的温度值.
// 主程序使用迭代法求解方程,计算出的温度值显示在128*64液晶屏上.
//
//-----------------------------------------------------------------
#include <htc.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "LGM12864.h"
#define Gain 4 //增益
long AD_Result; //模数转换结果
//ITS-90/IEC751(α = 0.0038505),PT100标准系数
float R0 = 100.00;
float coeffA = 3.9083 / 1000.0;
float coeffB = -5.775 / 10000000.0;
float coeffC = -4.183 / 1000000000000.0;
INT8U d[4]; //MCP3421 A/D转换器结果字节暂存数组
float Res; //第二步测试PT100电阻
float Temp; //根据PT100电阻计算温度
char disp_Buff[10]; //显示缓冲
//迭代法求根相关变量
float x, err, TempH, TempL;
//函数声明
void MCP3421_Init();
void Write_MCP3421(INT8U dat);
void Read_MCP3421(INT8U *d);
//-----------------------------------------------------------------
// 根据从MCP3421所读取的三字节模数转换结果计算得到电阻值
// 模数转换精度:18位 增益:4 恒流源:1mA
//-----------------------------------------------------------------
void GetRes()
{
}
//-----------------------------------------------------------------
// 用二分迭代法求解Callendar-Van Dusen方程,根据阻值求取温度值
//-----------------------------------------------------------------
void Calc_Temp()
{
}
//-----------------------------------------------------------------
// 显示温度
//-----------------------------------------------------------------
void disp_value()
{
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
ADCON1 = 6;
//配置LCD端口
TRISB = TRISD = 0x00;
//初始化LCD
LCD_Initialize();
//从第2页开始(即LCD的第16行),左边距12,显示"铂电阻温度计"
Display_A_WORD_String(2, 16, 6, (INT8U*)WORD_Dot_Matrix);
//从第5页开始(即LCD的第40行),左边距8,显示"?"
Display_A_WORD_String(5, 16, 1, (INT8U*)WORD_Dot_Matrix + 32 * 6);
//从第5页开始(即LCD的第40行),左边距8,显示"℃"
Display_A_WORD_String(5, 12*8,1, (INT8U*)WORD_Dot_Matrix + 32 * 7);
__delay_ms(10); MCP3421_Init(); //IIC初始化
while (1)
{
Write_MCP3421(0x1E); //设置18位精度(3.75SPS)及PGA增益Gain=4;
__delay_ms(50);
Read_MCP3421(d); //从MCP3421读取原始数据
GetRes(); //得到阻值
Calc_Temp(); //计算温度值
//显示温度
x = Temp; if (x < 0) x = -x;
//PICC,PICC18支持在sprintf中使用"%f",但编译慢,且生成代码量很大.
//sprintf(disp_Buff,"%.2f",x);
//建议使用下面的语句显示温度整数与小数部分(使用了转换为整数显示的方法)
sprintf(disp_Buff,"%d.%d",(int)Temp,(int)((x - (int)x) * 100));
disp_value();
__delay_ms(30);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -