📄 sys_fun.c
字号:
/******************************************************************************
discrible:保存热量,冷量历史数据
date :05.04.20
******************************************************************************/
void Save_HisData(void)
{
unsigned char Temp_Hisdata[192],i;
//============热量数据===============================================
for(i=0;i<48;i++)//-----------------------"WH单位"热量历史数据
Temp_Hisdata[i] = His_HeatWH[i];
for(i=0;i<48;i++)//-----------------------"GJ单位"热量历史数据
Temp_Hisdata[48+i] = His_HeatGJ[i];
//============冷量数据===============================================
for(i=0;i<48;i++)//-----------------------"WH单位"热量历史数据
Temp_Hisdata[96+i] = His_CoolWH[i];
for(i=0;i<48;i++)//-----------------------"GJ单位"热量历史数据
Temp_Hisdata[144+i] = His_CoolGJ[i];
erase_seg(0x04); //擦除第4段ROM
wr_byte(0xF600,Temp_Hisdata,192); //写入热量,流量历史数据
}
/******************************************************************************
discrible:恢复校温数据
date :05.04.20
******************************************************************************/
void Recover_AdjustTempData(void)
{
unsigned char *address;
address = (unsigned char *)0xF800; //存校温数据的起始地址
if(*address ==0xFF)
return;
LoIn_temp[0] =*address; //入口数据
LoIn_temp[1] =*(address+1);
InSub_temp = *(address+3);
InSub_temp<<=8;
InSub_temp |= *(address+2);
LoOut_temp[0] = *(address+4); //出口数据
LoOut_temp[1] = *(address+5);
OutSub_temp = *(address+7);
OutSub_temp<<=8;
OutSub_temp |= *(address+6);
Key_symbol = *(address+8);
adjust_symbol = *(address+9);
}
/******************************************************************************
discrible:恢复热量,冷量,流量数据
date :05.04.20
******************************************************************************/
void Recover_HeatFlowData(void)
{
unsigned char *address,i;
address = (unsigned char *)0xFA00; //存热量流量数据的起始地址
if(*address ==0xFF)
return;
for(i=0;i<4;i++)
Heat_GJ[i] = *(address+i); //热量数据
for(i=0;i<4;i++)
Heat_WH[i] = *(address+4+i); //热量数据
for(i=0;i<4;i++)
Flux[i] = *(address+8+i); //流量数据
for(i=0;i<4;i++)
Cool_GJ[i] = *(address+12+i); //冷量数据
for(i=0;i<4;i++)
Cool_WH[i] = *(address+16+i); //冷量数据
}
/******************************************************************************
discrible:恢复系统时间数据
date :05.04.20
******************************************************************************/
void Recover_DateData(void)
{
unsigned char *address,i;
address = (unsigned char *)0xFC00; //存系统时间数据的起始地址
if(*address ==0xFF)
return;
for(i=0;i<3;i++)
Date[i]=*(address+i); //系统日期数据
for(i=0;i<3;i++)
Time[i]=*(address+3+i); //系统日间数据
}
/******************************************************************************
discrible:恢复热量,流量历史数据
date :05.04.20
******************************************************************************/
void Recover_HisData(void)
{
unsigned char *address,i;
address = (unsigned char *)0xF600; //存热量,流量历史数据的起始地址
if(*address ==0xFF)
return;
for(i=0;i<48;i++)
His_HeatWH[i] = *(address+i);
for(i=0;i<48;i++)
His_HeatGJ[i] = *(address+48+i);
for(i=0;i<48;i++)
His_CoolWH[i] = *(address+96+i);
for(i=0;i<48;i++)
His_CoolGJ[i] = *(address+144+i);
}
/******************************************************************************
discrible:系统时间计算
date :05.04.20
******************************************************************************/
void Sys_TimeCal(void)
{
unsigned char i;
//======================================="时","分","秒"处理===================================================
Time[0]+=0x02;//系统时钟为2S产生一次,即2S执行一次
if((Time[0]&0x0F)>0x09)//"个位秒"超//========================="秒"处理==================================
{
Time[0]&=0xF0;//"个位秒"清0
Time[0]+=0x10;//"十位秒"加1
}
if((Time[0]&0xF0)>0x50)//"十位秒"超
{
Time[0]&=0x00;//"秒"位全清0
Time[1]+=0x01;//"个位分"加1
if((Time[1]&0x0F)>0x09)//"个位分"超//======================"分"处理===============================
{
Time[1]&=0xF0;//"个位分"清0
Time[1]+=0x10;//"十位分"加1
}
if((Time[1]&0xF0)>0x50)//"十位分"超
{
Time[1]&=0x00;//"分"位全清0
Time[2]+=0x01;//"时"位加1//==========================="时"处理==================================
//---------累计运行时间处理
Pile_time[0] +=0x01;
for(i=0;i<3;i++)
{
if( (Pile_time[i]&0x0F)>0x09)
{
Pile_time[i] &=0xF0;
Pile_time[i] +=0x10;
if( (Pile_time[i]&0xF0)>0x90)
{
Pile_time[i] &=0x0F;
Pile_time[i+1] +=0x01;
}
}
}
if( ((Time[2]&0xF0)<0x20)&&((Time[2]&0x0F)>0x09) )//"0x,1x"情况,"个位时"超
{
Time[2]&=0xF0;//"个位时"清0
Time[2]+=0x10;//"十位时"加1
}
else if( ((Time[2]&0xF0)==0x20)&&((Time[2]&0x0F)>0x03) )//"2x"情况,"个位时"超
{
Time[2]&=0x00;//"时"位全清0
//======================================"日"处理,若有进位则"月"进位=========================================
Date[0]+=0x01;//"日"个位加1
Save_HeatFlowData(); //1天存1次,调用存储程序,存入热量及流量数据
if(Date[1]==0x02) //--------------------------------------------------------------若是2月份
{
if((Date[2]%4)==0)//是闰年
{
if( Date[0]>0x29 )
{
Date[0]=0x01;//"日"归1
Date[1]+=0x01;//"月"加1
His_HeatFluData();//历史数据处理
}
else if( (Date[0]&0x0F)>0x09 )
{
Date[0]&=0xF0;
Date[0]+=0x10;
}
}
else //不是闰年
{
if( Date[0]>0x28 )
{
Date[0]=0x01;//"日"归1
Date[1]+=0x01;//"月"加1
His_HeatFluData();//历史数据处理
}
else if( (Date[0]&0x0F)>0x09 )
{
Date[0]&=0xF0;
Date[0]+=0x10;
}
}
}
else if( (Date[1]==0x01)||(Date[1]==0x03)||(Date[1]==0x05)||(Date[1]==0x07)||
(Date[1]==0x08)||(Date[1]==0x10)||(Date[1]==0x12) )//--------------------若是大月
{
if( Date[0]>0x31 )
{
Date[0]=0x01;//"日"归1
Date[1]+=0x01;//"月"加1
His_HeatFluData();//历史数据处理
}
else if( (Date[0]&0x0F)>0x09 )
{
Date[0]&=0xF0;
Date[0]+=0x10;
}
}
else//---------------------------------------------------------------------------是小月
{
if( Date[0]>0x30 )
{
Date[0]=0x01;//"日"归1
Date[1]+=0x01;//"月"加1
His_HeatFluData();//历史数据处理
}
else if( (Date[0]&0x0F)>0x09 )
{
Date[0]&=0xF0;
Date[0]+=0x10;
}
}
//=========================================="月"处理,若有进位则"年"进位=======================================
if(Date[1]>0x12)
{
Date[1]=0x01;
Date[2]++;
}
else if( (Date[1]&0x0F)>0x09 )
Date[1]=0x10;
//=========================================="年"处理==========================================================
if( (Date[2]&0x0F)>0x09 )
{
Date[2]&=0xF0;
Date[2]+=0x10;
}
}
}
}
if(sysdata_index_Disp==0x07)//系统时间显示项
{
Up_Datebuffer(Time,3);
Lcd_buffer_update(Data_buffer);
if((SVSCTL&0x01)==0x01) //MCU内置电源管理模块检测工作电压2.8V,则亮低压提示符
LCDM10 |= 0x04; //点亮低压提示符
}
}
/******************************************************************************
discrible:历史热量,冷量,流量数据跨月存入RAM处理(迭代法)
date :05.04.20
******************************************************************************/
void His_HeatFluData(void)
{
unsigned char i,j;
//===============热量数据===========================================
//------WH单位RAM区内从His_HeatWH[4]~His_HeatWH[47]刷新历史数据------
for(j=11;j>0;j--)
for(i=0;i<4;i++)
His_HeatWH[(j*4)+i] =His_HeatWH[((j-1)*4)+i];
for(i=0;i<4;i++)
His_HeatWH[i] = Heat_WH[i];
//------GJ单位RAM区内从His_HeatGJ[4]~His_HeatGJ[47]刷新历史数据------
for(j=11;j>0;j--)
for(i=0;i<4;i++)
His_HeatGJ[(j*4)+i] =His_HeatGJ[((j-1)*4)+i];
for(i=0;i<4;i++)
His_HeatGJ[i] = Heat_GJ[i];
//===============冷量数据===========================================
//------WH单位RAM区内从His_CoolWH[4]~His_CoolWH[47]刷新历史数据------
for(j=11;j>0;j--)
for(i=0;i<4;i++)
His_CoolWH[(j*4)+i] =His_CoolWH[((j-1)*4)+i];
for(i=0;i<4;i++)
His_CoolWH[i] = Cool_WH[i];
//------GJ单位RAM区内从His_CoolGJ[4]~His_CoolGJ[47]刷新历史数据------
for(j=11;j>0;j--)
for(i=0;i<4;i++)
His_CoolGJ[(j*4)+i] =His_CoolGJ[((j-1)*4)+i];
for(i=0;i<4;i++)
His_CoolGJ[i] = Cool_GJ[i];
//-------历史数据存储------------------------------------------------
Save_HisData();
}
/******************************************************************************
discrible:对3个SD数组中的SD值进行排序,并取中间30个值累加
date :05.04.20
******************************************************************************/
void Queue_SDvalue(void)
{
unsigned char i,j;
unsigned int temp;
for(i=0;i<(BasicSamps-1);i++)//冒泡法排序:1次比较完后,将最小的数据找出放到第1个位置
{
for(j=(i+1);j<BasicSamps;j++)
{
if(InSD_value[i]>InSD_value[j])//入口SD值排序
{
temp=InSD_value[i];
InSD_value[i]=InSD_value[j];
InSD_value[j]=temp;
}
if(OutSD_value[i]>OutSD_value[j])//出口SD值排序
{
temp=OutSD_value[i];
OutSD_value[i]=OutSD_value[j];
OutSD_value[j]=temp;
}
if(BasicSD_value[i]>BasicSD_value[j])//基准口SD值排序
{
temp=BasicSD_value[i];
BasicSD_value[i]=BasicSD_value[j];
BasicSD_value[j]=temp;
}
}
}
for(i=10;i<(BasicSamps-10);i++)//对中间30次累加
{
Sum_samp0 += BasicSD_value[i];
Sum_samp1 += InSD_value[i];
Sum_samp2 += OutSD_value[i];
}
}
/******************************************************************************
discrible:系统数据初始化
date :05.04.20
******************************************************************************/
void Sys_DataInit(void)
{
Meter_Num[0] = 0x02; //表址
Meter_Num[1] = 0x00;
Meter_Num[2] = 0x04;
Meter_Num[3] = 0x06;
Address[0] = 0x02; //地址项
Address[1] = 0x00;
P2OUT &= ~0x08; //关闭温度测试电路电源
// P2OUT |= 0x08; //开启温度测试电路电源
Temp_Mod(); //温度处理
// Heat_WH[0] = 0x99; //初始热量:19.9KWH
// Heat_WH[1] = 0x11;
Date[2] = 0x06;//系统日期
Date[1] = 0x05;
Date[0] = 0x06;
Time[2] = 0x16;
Time[1] = 0x00;
Time[0] = 0x00;
Display_symbol = firlayer_flag;//初始化进入第1层显示
Constant = constant2; //常数设置
Critical_Temp =0x18; //临界温度值
Recover_AdjustTempData(); //恢复校温数据
Recover_HeatFlowData(); //恢复热量,流量数据
Recover_HisData(); //恢复历史数据
Recover_DateData(); //恢复系统时间数据
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -