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

📄 display.c

📁 基于7758的三相多功能电能表的设计程序
💻 C
字号:
#define     Dis_GLOBALS    
#include    "includes.h"    
   
   
const uchar GACH_char_tbl[]={Char_0,Char_1,Char_2,Char_3,Char_4,   
                            Char_5,Char_6,Char_7,Char_8,Char_9,   
                            Char_space,String_DianYan,String_DianLiu,   
                            String_Yougon,String_Wugong,Char_Minus   
                            };   
   
const uchar GACH_pis_tbl[]={Lgc0_to_phsc_dn,Lgc0_to_phsc_up,   
                        Lgc1_to_phsc_dn,Lgc1_to_phsc_up,   
                        Lgc2_to_phsc_dn,Lgc2_to_phsc_up,   
                        Lgc3_to_phsc_dn,Lgc3_to_phsc_up,   
                        Lgc4_to_phsc_dn,Lgc4_to_phsc_up,   
                        Lgc5_to_phsc_dn,Lgc5_to_phsc_up,   
                        Lgc6_to_phsc_dn,Lgc6_to_phsc_up,   
                        Lgc7_to_phsc_dn,Lgc7_to_phsc_up,   
                        Lgc8_to_phsc_dn,Lgc8_to_phsc_up,   
                        LgPQY_To_Phsc_Dn,LgPQY_To_Phsc_Up,   
                        };   
const uchar GACH_signpis_tbl[]={Sign_Point0_PhscAddr,Sign_Point1_PhscAddr,   
                            Sign_A2_PhscAddr,Sign_A1_PhscAddr,   
                            Sign_B_PhscAddr,Sign_C_PhscAddr,                           
                            Sign_V0_PhscAddr,Sign_V1_PhscAddr,   
                            Sign_k_PhscAddr,Sign_ar_PhscAddr,   
                            Sign_h_PhscAddr,Sign_ChineseYou_PhscAddr,   
                            Sign_ChineseWu_PhscAddr,Sign_ChineseGong_PhscAddr,   
                            Sign_ChineseLu_PhscAddr,Sign_ChineseQian_PhscAddr,   
                            Sign_ChineseDian_PhscAddr,Sign_ChineseYa_PhscAddr,   
                            Sign_ChineseLiu_PhscAddr   
                            };   
const uchar GACH_signdata_tbl[]={Sign_Point0_Data, Sign_Point1_Data,   
                            Sign_A2_data,Sign_A1_data,   
                            Sign_B_data,Sign_C_data,   
                            Sign_V0_data,Sign_V1_data,   
                            Sign_k_data,Sign_ar_data,   
                            Sign_h_data,Sign_ChineseYou_data,   
                            Sign_ChineseWu_data,Sign_ChineseGong_data,   
                            Sign_ChineseLu_data,Sign_ChineseQian_data,   
                            Sign_ChineseDian_data,Sign_ChineseYa_data,   
                            Sign_ChineseLiu_data   
                            };   
const uchar GACH_signClr_tbl[]={Sign_Point0_Clr,Sign_Point1_Clr,   
                            Sign_A2_Clr,Sign_A1_Clr,   
                            Sign_B_Clr,Sign_C_Clr,   
                            Sign_V0_Clr,Sign_V1_Clr,   
                            Sign_k_Clr,Sign_ar_Clr,   
                            Sign_h_Clr,Sign_ChineseYou_Clr,   
                            Sign_ChineseWu_Clr,Sign_ChineseGong_Clr,   
                            Sign_ChineseLu_Clr,Sign_ChineseQian_Clr,   
                            Sign_ChineseDian_Clr,Sign_ChineseYa_Clr,   
                            Sign_ChineseLiu_Clr   
                            };   
   
   
void Lcd_ini(void)   
{   
    uchar i;   
    HB_LPCR=CST_LPCR_INI;   
    HB_LCR=CST_LCR_INI;   
    HB_LCR2=CST_LCR2_INI;   
    HB_CKSTPR2|=0x01;   
    GPch_LCD_pointer=(uchar *)0x0000F740;   
    for(i=0;i!=16;i++)   
        {   
        *(GPch_LCD_pointer+i)=0;   
        }      
}   
   
/****************************************************************/   
/*description:   this function display a char on the lcd by the given position    */   
/*                      and the spicified char               */   
/*                                                                                                            */   
/*input argument:  PB_position: the given  logic position  of the char         */   
/*                         PB_data : the specified char                     */   
/*                                                                                       */   
/*output argument:     none                                                                    */   
/*relative globe variables:GPch_LCD_pointer,             */   
/**/   
/**/   
/***************************************************************/   
   
void Dis_1char(uchar PB_position,uchar PB_data)   
{   
    uchar LB_data,LB_Phsc_rltpis_up,LB_Phsc_rltpis_dn;   
    PB_data=GACH_char_tbl[PB_data];   
    LB_Phsc_rltpis_dn=GACH_pis_tbl[PB_position*2];   
    LB_Phsc_rltpis_up=GACH_pis_tbl[PB_position*2+1];   
    if((LB_Phsc_rltpis_dn&0x01)==0)   
        {          
        LB_Phsc_rltpis_dn/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)&=0xf8;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)|=(PB_data&0x0f);   
        }   
    else   
        {   
        LB_Phsc_rltpis_dn/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)&=0x8f;   
        LB_data=PB_data<<4;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)|=LB_data;   
        }   
    if((LB_Phsc_rltpis_up&0x01)==0)   
        {   
        LB_Phsc_rltpis_up/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)&=0x0f0;   
        LB_data=PB_data>>4;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)|=LB_data;    
        }   
    else   
        {   
        LB_Phsc_rltpis_up/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)&=0x0f;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)|=(PB_data&0xf0);     
        }   
       
}   
   
void Dis_1string(uchar PB_position,uchar PB_data)   
{   
    uchar LB_data,LB_Phsc_rltpis_up,LB_Phsc_rltpis_dn;   
    PB_data=GACH_char_tbl[PB_data];   
    LB_Phsc_rltpis_dn=GACH_pis_tbl[PB_position*2];   
    LB_Phsc_rltpis_up=GACH_pis_tbl[PB_position*2+1];   
    if((LB_Phsc_rltpis_dn&0x01)==0)   
        {          
        LB_Phsc_rltpis_dn/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)&=0xf0;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)|=(PB_data&0x0f);   
        }   
    else   
        {   
        LB_Phsc_rltpis_dn/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)&=0x0f;   
        LB_data=PB_data<<4;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_dn)|=LB_data;   
        }   
    if((LB_Phsc_rltpis_up&0x01)==0)   
        {   
        LB_Phsc_rltpis_up/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)&=0x0f0;   
        LB_data=PB_data>>4;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)|=LB_data;    
        }   
    else   
        {   
        LB_Phsc_rltpis_up/=2;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)&=0x0f;   
        *(GPch_LCD_pointer+LB_Phsc_rltpis_up)|=(PB_data&0xf0);     
        }   
       
}   
   
void Dis_1sign(uchar PB_data)   
{   
    uchar LB_sign_rltpis;   
    LB_sign_rltpis=GACH_signpis_tbl[PB_data];   
    PB_data=GACH_signdata_tbl[PB_data];   
    *(GPch_LCD_pointer+LB_sign_rltpis)|=PB_data;   
}   
   
void Clr_1sign(uchar PB_data)   
{   
    uchar LB_sign_rltpis;   
    LB_sign_rltpis=GACH_signpis_tbl[PB_data];   
    PB_data=GACH_signClr_tbl[PB_data];   
    *(GPch_LCD_pointer+LB_sign_rltpis)&=PB_data;   
}   
/*  
void Dis_voltage(uchar PB_phase)  
{   
    uint PW_data;  
    switch(PB_phase)  
        {  
        case Phase_A_vol:  
            PW_data=GST_58data.U_av.AVRMS;  
            PW_data/=GU_7758scl.Str_58scl.avscale;  
            Dis_data(PW_data);  
            break;  
        case Phase_B_vol:  
            PW_data=GST_58data.U_bv.BVRMS;  
            PW_data/=GU_7758scl.Str_58scl.bvscale;  
            Dis_data(PW_data);  
            break;  
        case Phase_C_vol:  
            PW_data=GST_58data.U_cv.CVRMS;  
            PW_data/=GU_7758scl.Str_58scl.cvscale;  
            Dis_data(PW_data);  
            break;  
        default:  
            break;  
              
        }  
}  
  
*/   
void Disp_ActEng_ReEng(long PDW_data)   
{   
    Dis_data(PDW_data);   
    if(PDW_data<10)Dis_1char(1, 0);   
    if(PDW_data<100)Dis_1char(2, 0);   
    Dis_1sign(Sign_Point1);   
    Clr_1sign(Sign_Point0);   
}   
void Dis_vol_cur(uint PW_data,uchar PB_scal,uchar PB_VorI)   
{   
   
    PW_data/=PB_scal;   
    Dis_data(PW_data);   
    if(PB_VorI==0)   
        {   
        if(PW_data<10)   
            {   
            Dis_1char(1, 0);   
            }   
        Dis_1sign(Sign_Point0);   
        Clr_1sign(Sign_Point1);   
        }   
    else   
        {   
              if(PW_data<10)   
            {   
            Dis_1char(1, 0);   
            }   
              if(PW_data<100)   
            {   
            Dis_1char(2, 0);   
            }   
        Dis_1sign(Sign_Point1);   
        Clr_1sign(Sign_Point0);   
        }   
}   
   
void Dis_data(ulong  PW_data)   
{   
    
   
    uchar i,LB_data,LB_sign;   
    i=0;LB_sign=0;   
    if(PW_data>0x7fffffff)   
        {   
        LB_sign=1;   
        PW_data=~PW_data;   
            PW_data++;   
        }   
    do   
        {   
        LB_data=PW_data%10;   
        Dis_1char(i,LB_data);   
        i++;   
        PW_data=PW_data/10;   
        }while(PW_data!=0);   
    if(LB_sign)Dis_1char(i, DatPis_SignMinus);   
    while(i!=8)   
        {   
        Dis_1char(i,DatPis_space);   
        i++;   
        }   
}   
   
void Disp_circle(uchar PB_iterm)   
{   
    switch(PB_iterm)       
        {   
        case Phase_A_vol:   
               
            Dis_vol_cur(GST_58data.U_av.AVRMS,GU_7758scl.Str_58scl.avscale,0);   
            Dis_1sign(Sign_A1);Clr_1sign(Sign_B);Clr_1sign(Sign_C);    
               
            Disp_UnitV();   
            break;   
        case Phase_A_i:   
            Dis_vol_cur(GST_58data.U_ai.AIRMS,GU_7758scl.Str_58scl.aiscale,1);   
            Disp_UnitA();   
               
            break;   
        case Phase_A_watt:   
            Disp_ActEng_ReEng(GST_MeterData.A_WattHr);   
            Disp_UnitKwh();   
            break;   
        case Phase_A_var:   
            Disp_ActEng_ReEng(GST_MeterData.A_VarHr);   
            Disp_UnitKarh();   
            break;   
               
        case Phase_B_vol:   
            Dis_vol_cur(GST_58data.U_bv.BVRMS,GU_7758scl.Str_58scl.bvscale,0);   
            Clr_1sign(Sign_A1);Dis_1sign(Sign_B);Clr_1sign(Sign_C);    
               
            Disp_UnitV();   
            break;   
        case Phase_B_i:   
            Dis_vol_cur(GST_58data.U_bi.BIRMS,GU_7758scl.Str_58scl.biscale,1);   
            Disp_UnitA();   
            break;   
        case Phase_B_watt:   
            Disp_ActEng_ReEng(GST_MeterData.B_WattHr);   
            Disp_UnitKwh();   
            break;   
        case Phase_B_var:   
            Disp_ActEng_ReEng(GST_MeterData.B_VarHr);   
            Disp_UnitKarh();   
            break;   
               
        case Phase_C_vol:   
            Dis_vol_cur(GST_58data.U_cv.CVRMS,GU_7758scl.Str_58scl.cvscale,0);   
            Clr_1sign(Sign_A1);Clr_1sign(Sign_B);Dis_1sign(Sign_C);    
            Disp_UnitV();   
            break;   
        case Phase_C_i:   
            Dis_vol_cur(GST_58data.U_ci.CIRMS,GU_7758scl.Str_58scl.ciscale,1);   
            Disp_UnitA();   
            break;   
        case Phase_C_watt:   
            Disp_ActEng_ReEng(GST_MeterData.C_WattHr);   
            Disp_UnitKwh();   
            break;   
        case Phase_C_var:   
            Disp_ActEng_ReEng(GST_MeterData.C_VarHr);   
            Disp_UnitKarh();   
            break;   
        default:   
            break;   
               
        }   
       
}   
   
void Disp_UnitV(void)   
{   
    Clr_1sign(Sign_k);Clr_1sign(Sign_V1);Dis_1sign(Sign_V0);   
    Clr_1sign(Sign_A2);Clr_1sign(Sign_ar);Clr_1sign(Sign_h);   
    Dis_1string(LogPis_QianYou,DatPis_DianYan);   
}   
   
void Disp_UnitA(void)   
{   
    Clr_1sign(Sign_k);Clr_1sign(Sign_V1);Clr_1sign(Sign_V0);   
    Dis_1sign(Sign_A2);Clr_1sign(Sign_ar);Clr_1sign(Sign_h);   
    Dis_1string(LogPis_QianYou, DatPis_DianLiu);   
}   
   
void Disp_UnitKwh(void)   
{   
    Dis_1sign(Sign_k);Dis_1sign(Sign_V1);Dis_1sign(Sign_V0);   
    Clr_1sign(Sign_A2);Clr_1sign(Sign_ar);Dis_1sign(Sign_h);   
    Dis_1string(LogPis_QianYou, DatPis_Yougong);   
}   
   
void Disp_UnitKarh(void)   
{   
    Dis_1sign(Sign_k);Clr_1sign(Sign_V1);Clr_1sign(Sign_V0);   
    Clr_1sign(Sign_A2);Dis_1sign(Sign_ar);Dis_1sign(Sign_h);   
    Dis_1string(LogPis_QianYou,DatPis_Wugong);   
}  

⌨️ 快捷键说明

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