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

📄 add_heat.c

📁 msp430F435做的医疗器械,包括语音模块,知识源于网络
💻 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,k;
    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)&&((Sub_Temp[1]>0x00)||(Sub_Temp[0]>0x20)) )//若温度出错,或温差小于0.2度则不计量
    {
        if( ((Disp_symbol & fcool_symbol)!=fcool_symbol) &&(In_Temp[1]>Critical_Temp) )//制热
        {
            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
                    }
                }
            }
        }
        else if( ((Disp_symbol & fcool_symbol)==fcool_symbol) && (Critical_Temp>Out_Temp[1]) )//制冷
        {
            Heat_GJadd += Heat_GJpluse; //GJ单位冷量(十进制)

            Cool_GJ[0] +=(Heat_GJadd/100000000);      //10的8次,有1MG,进位至寄存器
            Heat_GJadd = (Heat_GJadd%100000000);
            for(i=0;i<3;i++)
            {
                if((Cool_GJ[i]&0x0F)>9)
                {
                    Cool_GJ[i] +=0x10;
                    Cool_GJ[i] &=0xF0;
                }
                if((Cool_GJ[i]&0xF0)>0x90)
                {
                    Cool_GJ[i+1] +=0x01;
                    Cool_GJ[i] &=0x0F;
                }
            }

//----------WH单位冷量累加(主显示层用)-------------------------------------------------
            Heat_WHadd += Heat_WHpluse; //WH单位冷量(十进制)

            Cool_WH[0] +=(Heat_WHadd/100000000);       //10的8次,有1KWH,进位至寄存器
            Heat_WHadd = (Heat_WHadd%100000000);
            for(i=0;i<3;i++)
            {
                if((Cool_WH[i]&0x0F)>9)
                {
                    Cool_WH[i] +=0x10;
                    Cool_WH[i] &=0xF0;
                }
                if((Cool_WH[i]&0xF0)>0x90)
                {
                    Cool_WH[i+1] +=0x01;
                    Cool_WH[i] &=0x0F;
                }
            }
//----------------------测试冷量计算部分----------------------
            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为最小单位的冷量值
                    {
                        Cool_test[0]++;
                        for(i=0;i<3;i++)
                        {
                            if((Cool_test[i]&0x0F)>9)
                            {
                                Cool_test[i] +=0x10;
                                Cool_test[i] -=0x0A;
                            }
                            if((Cool_test[i]&0xF0)>0x90)
                            {
                                Cool_test[i+1] +=0x01;
                                Cool_test[i] -=0xA0;
                            }
                        }
                    }
                    if(test_index_Disp==0x05)//制冷量刷新
                    {
                        Up_Datebuffer(Cool_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);

            for(k=0;k<temp_mL;k++)//系数0.037594,加37下或38下
            {
                Flux_test[0]+=0x01;
            
                for(i=0;i<3;i++)//每加1个检查是否由9变成A,3个字节全检查,否则会出错
                {
                    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==0x06)
            {
                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 + -