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

📄 display.c

📁 ADE7758三相电能芯片读写源程序
💻 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 + -