📄 复件 add_heat.c
字号:
/****************************************************************
discrible:热量累加主程序
author :Ye Yun Kai
date :05.04.15(yy.mm.dd)
****************************************************************/
#include "msp430x42x.h"
#include "Sys_data.h"
#include "Sys_fun.h"
void Add_Heat(void)
{
unsigned char i,j;
unsigned char Heat_temp; //热量临时值(0.1WH)
unsigned char temp_mL; //每个脉冲的体积(单位:mL,十进制数)
/////////////////////////////////////////////////////////////////////////////////////
//热量部分
/////////////////////////////////////////////////////////////////////////////////////
//----------GJ单位热量累加----------------------------------------------
if( (In_Temp[1]!=0x0E) && (Out_Temp[1] !=0x0E) && (Sub_Temp[1] !=0x0E) )//若温度出错,则不计量
{
Heat_GJadd += Heat_GJpluse; //GJ单位热量(十进制)
Heat_GJ[0] +=(Heat_GJadd/100000000); //10的8次,有1MG,进位至寄存器
Heat_GJadd = (Heat_GJadd%100000000);
for(i=0;i<3;i++)
{
if((Heat_GJ[i]&0x0F)>9)
{
Heat_GJ[i] +=0x10;
Heat_GJ[i] &=0xF0;
}
if((Heat_GJ[i]&0xF0)>0x90)
{
Heat_GJ[i+1] +=0x01;
Heat_GJ[i] &=0x0F;
}
}
//----------WH单位热量累加(主显示层用)-------------------------------------------------
Heat_WHadd += Heat_WHpluse; //WH单位热量(十进制)
Heat_WH[0] +=(Heat_WHadd/100000000); //10的8次,有1KWH,进位至寄存器
Heat_WHadd = (Heat_WHadd%100000000);
for(i=0;i<3;i++)
{
if((Heat_WH[i]&0x0F)>9)
{
Heat_WH[i] +=0x10;
Heat_WH[i] &=0xF0;
}
if((Heat_WH[i]&0xF0)>0x90)
{
Heat_WH[i+1] +=0x01;
Heat_WH[i] &=0x0F;
}
}
//---------------------热量定时存入ROM(20.0KWh存入一次)----------------------------------------
/* if( ((Heat_WH[1]&0x0F)==0x02)&&((Save_symbol & f20KWh_flag)!=f20KWh_flag) )
{
Save_symbol &= ~f00KWh_flag;//清00.0KWh已存标志
Save_symbol |= f20KWh_flag; //置已存标志
Save_HeatFlowData(); //调用存储程序,存入热量及流量数据
}
else if( ((Heat_WH[1]&0x0F)==0x04)&&((Save_symbol & f40KWh_flag)!=f40KWh_flag) )
{
Save_symbol &= ~f20KWh_flag;//清20.0KWh已存标志
Save_symbol |= f40KWh_flag; //置已存标志
Save_HeatFlowData(); //调用存储程序,存入热量及流量数据
}
else if( ((Heat_WH[1]&0x0F)==0x06)&&((Save_symbol & f60KWh_flag)!=f60KWh_flag) )
{
Save_symbol &= ~f40KWh_flag;//清40.0KWh已存标志
Save_symbol |= f60KWh_flag; //置已存标志
Save_HeatFlowData(); //调用存储程序,存入热量及流量数据
}
else if( ((Heat_WH[1]&0x0F)==0x08)&&((Save_symbol & f80KWh_flag)!=f80KWh_flag) )
{
Save_symbol &= ~f60KWh_flag;//清60.0KWh已存标志
Save_symbol |= f80KWh_flag; //置已存标志
Save_HeatFlowData(); //调用存储程序,存入热量及流量数据
}
else if( ((Heat_WH[1]&0x0F)==0x00)&&((Save_symbol & f00KWh_flag)!=f00KWh_flag) )
{
Save_symbol &= ~f80KWh_flag;//清80.0KWh已存标志
Save_symbol |= f00KWh_flag; //置已存标志
Save_HeatFlowData(); //调用存储程序,存入热量及流量数据
}
*/
//----------------------WH单位热量累加-------------------------------------
// Power_test_WHadd += Power_test_WHpulse;//----实时功率计算
//----------------------测试热量计算部分----------------------
if((Display_symbol & seclayer_flag)==seclayer_flag)
{
if((Display_symbol & test_off)!=test_off)//若开始测试,则计热量,否则不计
{
Heat_test_WHadd += Heat_WHpluse;//WH单位热量(十进制)
Heat_temp =(Heat_test_WHadd/10000);
Heat_test_WHadd = (Heat_test_WHadd%10000);
for(j=0;j<Heat_temp;j++)//------------加上0.1WH为最小单位的热量值
{
Heat_test[0]++;
for(i=0;i<3;i++)
{
if((Heat_test[i]&0x0F)>9)
{
Heat_test[i] +=0x10;
Heat_test[i] -=0x0A;
}
if((Heat_test[i]&0xF0)>0x90)
{
Heat_test[i+1] +=0x01;
Heat_test[i] -=0xA0;
}
}
}
if(test_index_Disp==0x04)
{
Up_Datebuffer(Heat_test,4); //当前测试热量(单位:1WH)
Up_test_Promptbuffer(test_index_Disp); //提示符更新
Lcd_buffer_update(Data_buffer); //更新LCD
}
}
}
/////////////////////////////////////////////////////////////////////////////////////
//流量部分
/////////////////////////////////////////////////////////////////////////////////////
//-----------------流量累加(主显示层用)----------------------------------------------
Flux_10Ladd+= Constant; //1个脉冲的体积:0.033003L/p(1个脉冲的体积:33003*10负3次方 mL)
Flux[0] +=(Flux_10Ladd/10000000); //最小单位是10L(10的7次方)
Flux_10Ladd =(Flux_10Ladd%10000000);
for(i=0;i<3;i++)
{
if((Flux[i]&0x0F)>9)
{
Flux[i] +=0x10;
Flux[i] &=0xF0;
}
if((Flux[i]&0xF0)>0x90)
{
Flux[i+1] +=0x01;
Flux[i] &=0x0F;
}
}
//-----------------------流量累加,流速测试-------------------------------
Flux_test_add += Constant;//-----实时流速计算 //1个脉冲的体积:0.033003L/p
//------------------------------------------------测试流量累加部分
if((Display_symbol & seclayer_flag)==seclayer_flag)
{
if((Display_symbol & test_off)!=test_off) //若开始测试,则计流量,否则不计
{
temp_mL = (Constant/1000); //最小单位是0.001L //1个脉冲的体积:0.033L/p
Remainder_add += (Constant%1000); //Constant数据低3位累加器,超过1000,则给Flux_test[0]加1
temp_mL += Remainder_add/1000;
Remainder_add = (Remainder_add%1000);
Flux_test[0] += (temp_mL/10)*16 +(temp_mL%10); //44----->0x44
for(i=0;i<3;i++)
{
if((Flux_test[i]&0x0F)>9)
{
Flux_test[i] +=0x10;
Flux_test[i] -=0x0A;
}
if((Flux_test[i]&0xF0)>0x90)
{
Flux_test[i+1] +=0x01;
Flux_test[i] -=0xA0;
}
}
if(test_index_Disp==0x05)
{
Up_Datebuffer(Flux_test,4); //当前测试流量(单位:0.001L)
Up_test_Promptbuffer(test_index_Disp); //提示符更新
Lcd_buffer_update(Data_buffer); //更新LCD
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -