📄 daq.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 + -