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

📄 daq.c

📁 用ICCAVR所写的温度采集函数
💻 C
字号:
//完成温度的采集
#include "iom128v.h"
#include "eeprom.h"
#include "MyMacro.h"

extern float Temperature;
extern unsigned int SavedNum;
extern unsigned char MCUState;
extern unsigned char TimeScale;

extern void Refresh_Temp(void);
extern void Delay(unsigned int);
extern void EnableWatchDog(void);
extern void ClearWatchDog(void);

unsigned int EEPROM_addr=4;

float Pt1000[81]={
	   185.2,		  //-200	 73.15K
	   228.3,		  //-190
	   271.0,		  //-180
	   313.4,		  //-170
	   355.4,		  //-160
	   397.2,		  //-150
	   438.8,		  //-140
	   480.0,		  //-130
	   521.1,		  //-120
	   561.9,		  //-110
	   602.6,		  //-100
	   643.0,		  //-90
	   683.3,		  //-80
	   723.3,		  //-70
	   763.3,		  //-60
	   803.1,		  //-50
	   842.7,		  //-40
	   882.2,		  //-30
	   921.6,		  //-20
	   960.9,		  //-10
	   1000.0,		  //0  		 273.15K
	   1039.0,		  //10
	   1077.9,		  //20
	   1116.7,		  //30
	   1155.4,		  //40
	   1194.0,		  //50
	   1232.4,		  //60
	   1270.8,		  //70
	   1309.0,		  //80
	   1347.1,		  //90
	   1385.1,		  //100
	   1422.9,		  //110
	   1460.7,		  //120
	   1498.3,		  //130
	   1535.8,		  //140
	   1573.3,		  //150
	   1610.5,		  //160
	   1647.7,		  //170
	   1684.8,		  //180
	   1721.7,		  //190
	   1758.6,		  //200
	   1795.3,		  //210
	   1831.9,		  //220
	   1868.4,		  //230
	   1904.7,		  //240
	   1941.0,		  //250
	   1977.1,		  //260
	   2013.1,		  //270
	   2049.0,		  //280
	   2084.8,		  //290
	   2120.5,		  //300
	   2156.1,		  //310
	   2191.5,		  //320
	   2226.8,		  //330
	   2262.1,		  //340
	   2297.2,		  //350
	   2332.1,		  //360
	   2367.0,		  //370
	   2401.8,		  //380
	   2436.4,		  //390
	   2470.9,		  //400
	   2505.3,		  //410
	   2539.6,		  //420
	   2573.8,		  //430
	   2607.8,		  //440
	   2641.8,		  //450
	   2675.6,		  //460
	   2709.3,		  //470
	   2742.9,		  //480
	   2776.4,		  //490
	   2809.8,		  //500
	   2843.0,		  //510
	   2876.2,		  //520
	   2909.2,		  //530
	   2942.1,		  //540
	   2974.9,		  //550
	   3007.5,		  //560
	   3040.1,		  //570
	   3072.5,		  //580
	   3104.9,		  //590
	   3137.1,		  //600		 873.15K
	   };
	   



void GetTemp(void)
{
 unsigned char i=0;
 float Pt=0;
 /*在此添加通过AD从TWI获得电压值并转化为电阻值Pt的代码*/
 
 //查表获得对应绝对温度的代码,并存入 Temperature
 for(i=0;i<=79;i++)
 {
  if(Pt1000[i]<=Pt&&Pt1000[i+1]>=Pt)
  {
   Temperature=73.15+i*10+10*(Pt-Pt1000[i])/(Pt1000[i+1]-Pt1000[i]);
   break;
  }
 }
}


//对eeprom.h的使用,要写入多个字节使用EEPROM_WRITE(addr, src),
//读出多个字节用EEPROM_READ(addr, dst),其中,addr自己指定,src是要写入的数组或变量
void SaveTemp(void)
{
 //根据TimeScale 将温度值 Temperature送入ROMData[]并把SavedNum+1
 //如果TimeScale==0,则不保存,如果不为零则保存
 //实现EEPROM的存储
 if(TimeScale!=0)
 {
  EEPROM_WRITE(EEPROM_addr,Temperature);			 
  SavedNum++;
  EEPROM_WRITE(0,SavedNum);
  EEPROM_addr+=4;
 }
}


//WORKING状态下的 工作模式函数,外部中断继续有效,并使用看门狗防止程序跑飞
void LCD_mode(void)
{
 unsigned char i=0;
 
 EnableWatchDog();
 while(MCUState==WORKING)
 {
   Delay(1000);			 //每过1S采集一次温度,并在LCD上刷新一次显示
   ClearWatchDog();
   GetTemp();
   Refresh_Temp();
   
   i++;
   
   if(i==TimeScale)
   { SaveTemp(); i=0;}
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -