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

📄 lcd.c

📁 MSP430FE42X复费率电表DEMO(编译器 IAR 3.42A)
💻 C
字号:
#ifdef TAMPER_DETECTION 
#define NomMaxPages  12
#else
#define NomMaxPages  11
#endif
const DSPINFO DspInfo[] =
{
//标识,显示数据地址,           LCDMEM[0][1]信息,LCDMEM[8][9]显示信息,小数点等显示信息
0x0000, SM.ClkBcd.Day,           0,       0,       0,        D_DATA,     D_4H + D_6H,
0x0000, SM.ClkBcd.Sec,           0,       0,       0,        D_TIME,     D_P1 + D_P2,
0x1000, SM.CMon.KwhPp.Fee[0],    CHAR_E,  0,       0,        D_ENERGY,   D_KW + D_h + D_6H,
0x1000, SM.CMon.KwhQp.Fee[0],    CHAR_q,  0,       0,        D_ENERGY,   D_6H,

0xA000, DM.ubActPower1,          CHAR_P,  CHAR_1,  0,        0,          D_KW + D_4H,
#ifdef TAMPER_DETECTION
0xA000, DM.ubActPower2,          CHAR_P,  CHAR_2,  0,        0,          D_KW + D_4H,
#endif
0xA000, DM.ubReActPower,         CHAR_r,  CHAR_P,  0,        0,          D_KW + D_4H,
0xA000, DM.ubAppPower,           CHAR_A,  CHAR_P,  0,        0,          D_KW + D_4H,

0xA100, DM.ubV1RMS,              CHAR_U,  0,       0,        0,          D_6H,
0xA200, DM.ubIRMS,              CHAR_C,  0,       0,        0,          D_4H,
0xA300, DM.ubPF,                 CHAR_P,  CHAR_F,  0,        0,          D_4H,

0xA400, DM.ubMainFr,             CHAR_F,  CHAR_r,  0,        0,          D_6H,

0xA500, DM.ubTemperature,        CHAR_t,  0,       0,        0,          0,

#ifdef TAMPER_DETECTION 
0xF000, (unsigned char *)(&SM.Cfg.EspPar.uiAdaptI1),  0, 0, 0, 0,      0,
0xF000, (unsigned char *)(&SM.Cfg.EspPar.uiAdaptI2), 0, 0, 0, 0,      0,
#endif

0xF000, (unsigned char *)(&SM.Cfg.EspPar.uiGainCorr1),   0, 0, 0, 0,      0,
0xF000, (unsigned char *)(&SM.Cfg.EspPar.lPowerOffset1), 0, 0, 0, 0,      0,
0xF000, (unsigned char *)(&SM.Cfg.EspPar.iPhaseCorr1),   0, 0, 0, 0,      0,
#ifdef TAMPER_DETECTION 
0xF000, (unsigned char *)(&SM.Cfg.EspPar.uiGainCorr2),   0, 0, 0, 0,      0,
0xF000, (unsigned char *)(&SM.Cfg.EspPar.lPowerOffset2), 0, 0, 0, 0,      0,
0xF000, (unsigned char *)(&SM.Cfg.EspPar.iPhaseCorr2),   0, 0, 0, 0,      0,
#endif 

0xF000, (unsigned char *)(&SM.Cfg.EspPar.uiV1Gain),  0, 0, 0, 0,      0,

0xF000, (unsigned char *)(&SM.Cfg.EspPar.ulIGain),  0, 0, 0, 0,      0,

0xF000, (unsigned char *)(&SM.Cfg.EspPar.iTempSampleOffset), 0, 0, 0, 0,      0,


// *****************************************************************************

0xE000, (unsigned char *)(&DM.EspRs.lActEnergy1), 0, 0, 0, 0,      0,

};

#ifdef TAMPER_DETECTION
const unsigned char LcdPtr[][3]=
{
  0,0,0,
  9,NomMaxPages+1,2,
  9,NomMaxPages+2,2,
    
  4,NomMaxPages+3,2,
  4,NomMaxPages+4,3,  
  4,NomMaxPages+5,2,
  
  5,NomMaxPages+6,2,
  5,NomMaxPages+7,3,
  5,NomMaxPages+8,2,
  
  8,NomMaxPages+9,2,
  9,NomMaxPages+10,2,
  12,NomMaxPages+11,2
};
#else
const unsigned char LcdPtr[][3]=
{
  0,0,0,
  4,NomMaxPages+1,2,
  4,NomMaxPages+2,3,
  4,NomMaxPages+3,2,
  
  7,NomMaxPages+4,2,
  8,NomMaxPages+5,2,
  11,NomMaxPages+6,2
  //21,NomMaxPages+16,0
};
#endif

const unsigned char Digit[] =
{
	CHAR_0,
	CHAR_1,
	CHAR_2,
	CHAR_3,
	CHAR_4,
	CHAR_5,
	CHAR_6,
	CHAR_7,
	CHAR_8,
	CHAR_9,
	CHAR_A,
	CHAR_B,
	CHAR_C,
	CHAR_D,
	CHAR_E,
	CHAR_F
};

void LcdCfgIni( void )
{
	SM.LcdCtl.DispTime = 3;
	SM.LcdCtl.Mode     = 0;
	SM.LcdCtl.Switch   = 0;
	SM.LcdCtl.PagePtr  = 0;
	SM.LcdCtl.SecCtr   = 0;
}

void LcdTurnOn( void )
{
	LCDCTL = LCDSG0_3 +LCD4MUX + LCDON;
}

/******************************************************************
*                             清LCD显存                           *
*******************************************************************/
void Clr_LCD_Display(void)
{
	unsigned char i;
	for (i=0; i<12; i++)
  	{
    	LCDMEM[i] = 0;
  	}
}



void LcdMemL1( unsigned int nPage, unsigned char chs )//显示的字节数
{
	unsigned char i;
	unsigned char chs1;
	chs1=3-chs;
  for( i=0;i<chs1;i++ )              //显示前导零
	{
    LCDMEM[(2*i)+2] = 0;
		LCDMEM[(2*i)+3] = 0;
  }
  /*for( i=chs;i<3;i++ )
  {
    //LCDMEM[6-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))>>4];
		
    //LCDMEM[7-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))&0x0F];
    LCDMEM[6-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))>>4];
		
    LCDMEM[7-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))&0x0F];
  }*/
  for( i=0;i<chs;i++ )
  {
    //LCDMEM[6-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))>>4];
		
    //LCDMEM[7-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))&0x0F];
    LCDMEM[6-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))>>4];
		
    LCDMEM[7-(2*i)] = Digit[(*(DspInfo[nPage].Addr1+i))&0x0F];
  }
  
}


//*********************************************
// Line = 1 or 2, else No Cut
//*********************************************
void LcdCut_0( unsigned char chs ) //清前导0
{
	unsigned char i;

	for( i=0;i<chs;i++ )
	{
		if( ((LCDMEM[i+2]&0x7F) == Digit[0]) || (LCDMEM[i+2] == 0) )
			LCDMEM[i+2] &= ~0x7F;	
		else break;
	}
}


void LcdL1F0( void )  //第一行清0
{
	unsigned char iii;
	for( iii=0;iii<7;iii++ ) LCDMEM[iii+2] = 0;
}



void Display(unsigned int nPage)
{
  switch(DspInfo[nPage].DspID&0xF000)
  {
  case 0x0000:
    {
      LcdMemL1(nPage,3);
    }break;
  case 0x1000:
    {
      LcdMemL1(nPage,3);
    }break;
  case 0xA000:
    {
      switch(DspInfo[nPage].DspID&0x0F00)
      {
      case 0x0000:		// Power
        {
          LcdMemL1(nPage,3);
          LcdCut_0(1);
        }break;  
      case 0x0100:		// U
        {
					LcdMemL1(nPage,3);
          LcdCut_0(3);
        }break;
      case 0x0200:		// I	
        {
					LcdMemL1(nPage,3);
          LcdCut_0(1);
        }break;
      case 0x0300:		// Factor
        {
					LcdMemL1(nPage,3);
          LcdCut_0(1);
        }break;  
      case 0x0400:		// Freq	
        {
					LcdMemL1(nPage,2);
          LcdCut_0(3);
        }break;
      case 0x0500:
        {
          LcdMemL1(nPage,1);
          if(MeterRunState & TEMP_FLAG)
          {
            LCDMEM[5] |= SEG_g;
          }
          else
          {
            LCDMEM[5] &= ~SEG_g;
          }
        }
      }
    }break;
  case 0xF000:
    {
      LcdMemL1(nPage,DM.tmpPtr[0]);
    }break;
  }
}




void Update_Display(void)
{
  unsigned char i,j;
  switch(DM.ucKeyMode)
  {
  case 0:
    {
      Display(SM.LcdCtl.PagePtr);
      LCDMEM[0]=DspInfo[SM.LcdCtl.PagePtr].Info[0];
	    LCDMEM[1]=DspInfo[SM.LcdCtl.PagePtr].Info[1];
	    LCDMEM[8]=DspInfo[SM.LcdCtl.PagePtr].Info[2];
	    LCDMEM[9]=DspInfo[SM.LcdCtl.PagePtr].Info[3];

    }break;
  case 1:
    {
      Display(SM.LcdCtl.PagePtr);
      LCDMEM[0]=Digit[DM.ucKeyCalibrationMode];
	    LCDMEM[1]=Digit[DM.ucKeyCalibrationStep];
	    LCDMEM[8]=0;
	    LCDMEM[9]=0;

    }break;
  }
  for(i=0,j=0x01;i<8;i++)
	{
		if(DspInfo[SM.LcdCtl.PagePtr].Info[4]&j) LCDMEM[i] |= SEG_h;
		else LCDMEM[i] &=~SEG_h;
		j <<= 1;
	}
}


⌨️ 快捷键说明

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