⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 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 + -