📄 display.c
字号:
#include <string.h>
#include <stdlib.h>
#include <msp430xe42x.h>
#include "inc\Port.h"
#include "inc\Common.h"
#include "inc\Type.h"
#include "inc\General.h"
#include "inc\Mem.h"
#include "inc\Data.h"
#define dispnum 6
#define dispnum2 21
const char NumSeg[16] =
{
DS_Chr_0, DS_Chr_1, DS_Chr_2, DS_Chr_3,
DS_Chr_4, DS_Chr_5, DS_Chr_6, DS_Chr_7,
DS_Chr_8, DS_Chr_9, DS_Chr_A, DS_Chr_b,
DS_Chr_C, DS_Chr_d, DS_Chr_E, DS_Chr_F
};
void DspNum( char *Addr, int Lenth, char *SegPtr ) //将数值转换成LCD显示的格式
{
if( Lenth > 4) return;
while( Lenth>0 )
{
if(Lenth == 1) SegPtr-- ;
*SegPtr-- |= NumSeg[*Addr & 0x0F];
*SegPtr-- |= NumSeg[((*Addr)>>4) & 0x0F];
Addr++;
Lenth--;
}
}
void DspNum1( char *Addr, int Lenth, char *SegPtr )
{
if( Lenth > 4) return;
while( Lenth>0 )
{
*SegPtr-- |= NumSeg[*Addr & 0x0F];
*SegPtr-- |= NumSeg[((*Addr)>>4) & 0x0F];
Addr++;
Lenth--;
}
}
void ZeroDark( char *LCDSeg )
{
char i;
for( i=0; i<7; i++ )
{
if(i == 2) i++;
if( LCDSeg[i] == NumSeg[0] ) LCDSeg[i] = 0;
else break;
}
}
void Display(void)
{
char i;
if( DisK.DisInv!=0) return; //轮询时间 3s
for( i=0; i<12; i++ ) Buffer[i] = 0;
if( DisK.DisInv == 0 )
{
DisK.DisInv=3;
DisK.DisPtr++; //轮显表指针
if( DisK.DisPtr >= 10 ) DisK.DisPtr = 1;
}
switch (DisK.DisPtr)
{
case 1: // 电量
FRAM_Read( (char*)&Buffer[20], EC_Pp0, 4 );
DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
Buffer[8] |= DS_Chr_Dot;
ZeroDark( (char*)&Buffer[0] );
Buffer[9] |= DS_T1+DS_T2+DS_T3;
Buffer[10] |= DS_Kw+DS_T4;
Buffer[11] |= DS_h;
break;
case 2: // FEE1电量
FRAM_Read( (char*)&Buffer[20], EC_Pp1, 4 );
DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
Buffer[8] |= DS_Chr_Dot;
ZeroDark( (char*)&Buffer[0] );
Buffer[10] |= DS_Kw;
Buffer[11] |= DS_h;
Buffer[9] |= DS_T1;
break;
case 3: // FEE2电量
FRAM_Read( (char*)&Buffer[20], EC_Pp2, 4 );
DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
Buffer[8] |= DS_Chr_Dot;
ZeroDark( (char*)&Buffer[0] );
Buffer[10] |= DS_Kw;
Buffer[11] |= DS_h;
Buffer[9] |= DS_T2;
break;
case 4: // FEE3电量
FRAM_Read( (char*)&Buffer[20], EC_Pp3, 4 );
DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
Buffer[8] |= DS_Chr_Dot;
ZeroDark( (char*)&Buffer[0] );
Buffer[10] |= DS_Kw;
Buffer[11] |= DS_h;
Buffer[9] |= DS_T3;
break;
case 5: // FEE4电量
FRAM_Read( (char*)&Buffer[20], EC_Pp4, 4 );
DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
Buffer[8] |= DS_Chr_Dot;
ZeroDark( (char*)&Buffer[0] );
Buffer[10] |= DS_Kw+DS_T4;
Buffer[11] |= DS_h;
break;
case 6: // 电压
DspNum( (char*)&Energy.Real_VRMS[0], 4, &Buffer[DS_BDig] );
Buffer[8] |= DS_Chr_Dot;
ZeroDark( (char*)&Buffer[0] );
Buffer[10]|=0x20; //'V'
break;
case 7: // 电流
DspNum( (char*)&Energy.Real_I1RMS[0], 4, &Buffer[DS_BDig] );
Buffer[8] |= DS_Chr_Dot;
ZeroDark( (char*)&Buffer[0] );
Buffer[10]|=0x80; //'A'
Buffer[11]|=0x08;
break;
case 8: // 日期
DspNum1( (char*)&Clk.Day[0],3,&Buffer[DS_BDig]);
Buffer[2]|=0x01;
break;
case 9: //时间
DspNum1( (char*)&Clk.Sec[0],3,&Buffer[DS_BDig]);
Buffer[5]|=0x08;
Buffer[7]|=0x08;
Buffer[2]|=0x08;
break;
default:
break;
}
if( (Flag.Esp & F_CH1_Reverse )||(Flag.Esp&F_CH2_Reverse) ) {Buffer[9] |= DS_Revs;}// Buffer[0] |= DS_S1;}//Energy Reverse
if( Flag.Event & F_Op_T ) Buffer[1] |= DS_S2; //开端钮盖
if( Flag.Event & F_Op_C ) Buffer[0] |= DS_S1; //开盖检测
if( Flag.Event & F_MF ) Buffer[11] |= DS_S5; //磁场检测
if( Flag.Event & F_Steal_Power ) Buffer[4] |= DS_S4; //窃电
if( Flag.Event & F_Abn_Cu ) Buffer[3] |= DS_S3; // 不平衡
if( Flag.Event & F_Overcurrent ) Buffer[11] |= DS_S6; //过电流
if( Flag.Commu & F_Coming ) Buffer[10] |= 0x08; //Communication Flag
if( (~P1IN & P_RelayAsk )&&( Flag.Power & F_PwrUp )) Buffer[2] |= DS_SWITCH; //relay control
if( ( Flag.Relay & F_Err )||(Flag.Error & F_Fram)||(Flag.Error & F_E2Prom) ) Buffer[11] |= DS_S8; //Relay Control Error
if( Flag.Disk & LowBatt ) Buffer[9] |= DS_Bat; //Low Battery voltage
if(( Flag.Event & F_Voltage)&& ( Energy.Real_Vrms > 50.0)) Buffer[11]|=DS_S7;
if( Flag.Run & R_PhAdj ) Buffer[11]|=DS_S7;
/* Refresh LCD Buffer */
for( i=0; i<12; i++ ) LCDMEM[i] = Buffer[i];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -