📄 display.c
字号:
#include "includes.h"
unsigned char LcdInterval;
unsigned char LcdStopInterval = 0;
unsigned char LcdOpenInterval;
unsigned char DisplayBitLocation;
unsigned char LcdDispFlag;
unsigned char DisplayFlashFlag = LCD_DISPLAY_OFF_FLAG;
unsigned char UserKeyDownNum = 0;
const unsigned char _LcdCodeHex[16] =
{
LCD_CODE_INFO_0,
LCD_CODE_INFO_1,
LCD_CODE_INFO_2,
LCD_CODE_INFO_3,
LCD_CODE_INFO_4,
LCD_CODE_INFO_5,
LCD_CODE_INFO_6,
LCD_CODE_INFO_7,
LCD_CODE_INFO_8,
LCD_CODE_INFO_9,
LCD_CODE_INFO_A,
LCD_CODE_INFO_b,
LCD_CODE_INFO_C,
LCD_CODE_INFO_d,
LCD_CODE_INFO_E,
LCD_CODE_INFO_F
};
const unsigned char _LcdCnExes[][2] =
{
{ LCD_CN_INFO_ADDR_SUM, LCD_CN_INFO_SUM },
{ LCD_CN_INFO_ADDR_PEAK, LCD_CN_INFO_PEAK },
{ LCD_CN_INFO_ADDR_APEX, LCD_CN_INFO_APEX },
{ LCD_CN_INFO_ADDR_CALM, LCD_CN_INFO_CALM },
{ LCD_CN_INFO_ADDR_VALE, LCD_CN_INFO_VALE }
};
const unsigned char _LcdSyExes[] =
{
LCD_SY_INFO_PEAK,
LCD_SY_INFO_APEX,
LCD_SY_INFO_CALM,
LCD_SY_INFO_VALE
};
const unsigned char _LcdSyUAlarm[] =
{
0,
LCD_EN_INFO_UA,
LCD_EN_INFO_UB,
LCD_EN_INFO_UA|LCD_EN_INFO_UB,
LCD_EN_INFO_UC,
LCD_EN_INFO_UA|LCD_EN_INFO_UC,
LCD_EN_INFO_UB|LCD_EN_INFO_UC,
LCD_EN_INFO_UA|LCD_EN_INFO_UB|LCD_EN_INFO_UC
};
const unsigned char _LcdSyIAlarm[] =
{
0,
LCD_EN_INFO_IA,
LCD_EN_INFO_IB,
LCD_EN_INFO_IA|LCD_EN_INFO_IB,
LCD_EN_INFO_IC,
LCD_EN_INFO_IA|LCD_EN_INFO_IC,
LCD_EN_INFO_IB|LCD_EN_INFO_IC,
LCD_EN_INFO_IA|LCD_EN_INFO_IB|LCD_EN_INFO_IC
};
const unsigned char _LcdCodeHigh4[] =
{
0
};
const unsigned char _LcdInfo2Code6Bcd[] =
{
LCD_CODE_INFO_H, LCD_CODE_INFO__,
LCD_CODE_INFO_L, LCD_CODE_INFO__,
LCD_CODE_INFO_A, LCD_CODE_INFO_C,
LCD_CODE_INFO_R, LCD_CODE_INFO_C
};
const unsigned char _LcdInfo4Code4Bcd[] =
{
LCD_CODE_INFO_NONE, LCD_CODE_INFO_U, LCD_CODE_INFO_A, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_U, LCD_CODE_INFO_b, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_U, LCD_CODE_INFO_C, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_1, LCD_CODE_INFO_A, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_1, LCD_CODE_INFO_b, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_1, LCD_CODE_INFO_C, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_F, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_P, LCD_CODE_INFO_H, LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_A, LCD_CODE_INFO_P, LCD_CODE_INFO_H, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_b, LCD_CODE_INFO_P, LCD_CODE_INFO_H, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_C, LCD_CODE_INFO_P, LCD_CODE_INFO_H, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_C, LCD_CODE_INFO_L, LCD_CODE_INFO_r, LCD_CODE_INFO_NONE,
LCD_CODE_INFO_C, LCD_CODE_INFO_o, LCD_CODE_INFO_d, LCD_CODE_INFO_E
};
const unsigned char _LcdContentCode_H[] =
{
0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,
4,5,6,7,
8,9,10,
11,11,11,11,11,12,12,12,12,12,
13,13,13,13,13
};
const unsigned char _LcdContentCode_L_00[] =
{
0,2,4,5,7,9,10,11
};
const unsigned char _LcdSyUI[] =
{
LCD_EN_INFO_UA,
LCD_EN_INFO_UB,
LCD_EN_INFO_UC,
LCD_EN_INFO_IA,
LCD_EN_INFO_IB,
LCD_EN_INFO_IC
};
void DisplayReinit(void)
{
DisplayBitLocation = 0;
LcdInterval = 0;
LcdStopInterval = 0;
LcdOpenInterval = 0;
LcdDispFlag |= LCD_DISP_NEXT;
LcdDispFlag &=~ ( LCD_DISP_FLG_PAGEUP | LCD_DISP_FLG_PAGEDOWN );
}
void DisplayContentReinit(void)
{
if(LcdDispFlag&(LCD_DISP_FLG_PAGEDOWN|LCD_DISP_FLG_PAGEUP))
{
InitDisplayPageInfo();
return;
}
FramRead( ADDR_OF_CYCDISP_TIME, (unsigned char *)&_SysPotInfo.disptime, 2 );
_SysPotInfo.disptime = Bcd2HexChar(_SysPotInfo.disptime);
_SysPotInfo.dispstoptime = Bcd2HexChar(_SysPotInfo.dispstoptime);
if(IsPowerOn())
{
FramRead( DISP_CONTENT1, (unsigned char *)&_SysPotInfo.dispcontent[0], DISPLAY_ITEM_BYTE );
}
else
{
FramRead( DISP_CONTENT2, (unsigned char *)&_SysPotInfo.dispcontent[0], DISPLAY_ITEM_BYTE );
}
if( IsEqualSpecialData( (unsigned char *)&_SysPotInfo.dispcontent[0], 0, DISPLAY_ITEM_BYTE ) == OK )
{
_SysPotInfo.dispcontent[0] = 0x03;
}
if( IsEqualSpecialData((unsigned char *)&_SysPotInfo.dispcontent[0], 0, DISPLAY_ITEM_BYTE ) != OK )
{
LcdDispFlag|=LCD_DISP_FLG_ACTIVE;
}
}
void ClearLcd(void)
{
LCDMEM[0] = 0;
LCDMEM[1] &= ( AlarmOpenCoverBoard |LCD_CN_INFO_ALARM | LCD_CN_INFO_LOWPWR | LCD_CN_INFO_PWRCUT | LCD_CN_INFO_PGM );
LCDMEM[2] &= ( _LcdSyUAlarm[7] |_LcdSyIAlarm[7] );
LCDMEM[3] = 0;
LCDMEM[4] = 0;
LCDMEM[5] = 0;
LCDMEM[6] = 0;
LCDMEM[7] = 0;
LCDMEM[8] = 0;
LCDMEM[9] = 0;
LCDMEM[10] = 0;
LCDMEM[11] = 0;
LCDMEM[12] = 0;
LCDMEM[13] = 0;
LCDMEM[14] = 0;
LCDMEM[16] &= ( LCD_EN_INFO_WATT | LCD_EN_INFO_VAR );
LCDMEM[17] = 0;
LCDMEM[18] = 0;
LCDMEM[19] = 0;
LcdPcf8576Operation(0,0,20);
}
void LargeLedDisplay2Code6Bcd( unsigned char pos, unsigned char *data )
{
LCDMEM[LCD_CODE_ADDR_05] |= _LcdInfo2Code6Bcd[pos];
LCDMEM[LCD_CODE_ADDR_06] |= _LcdInfo2Code6Bcd[pos+1];
LCDMEM[LCD_CODE_ADDR_07] |= _LcdCodeHex[*(data+2)>>4];
LCDMEM[LCD_CODE_ADDR_08] |= _LcdCodeHex[*(data+2)&0x0F];
LCDMEM[LCD_CODE_ADDR_09] |= _LcdCodeHex[*(data+1)>>4];
LCDMEM[LCD_CODE_ADDR_10] |= _LcdCodeHex[*(data+1)&0x0F];
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[*(data)>>4];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[*(data)&0x0F];
}
void LargeLedDisplay8Bcd(unsigned char *data)
{
LCDMEM[LCD_CODE_ADDR_05] |= _LcdCodeHex[*(data+3)>>4];
LCDMEM[LCD_CODE_ADDR_06] |= _LcdCodeHex[*(data+3)&0x0F];
LCDMEM[LCD_CODE_ADDR_07] |= _LcdCodeHex[*(data+2)>>4];
LCDMEM[LCD_CODE_ADDR_08] |= _LcdCodeHex[*(data+2)&0x0F];
LCDMEM[LCD_CODE_ADDR_09] |= _LcdCodeHex[*(data+1)>>4];
LCDMEM[LCD_CODE_ADDR_10] |= _LcdCodeHex[*(data+1)&0x0F];
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[*(data)>>4];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[*(data)&0x0F];
}
void LargeLedDisplay6Bcd(unsigned char *data)
{
LCDMEM[LCD_CODE_ADDR_05] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_06] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_07] |= _LcdCodeHex[*(data+2)>>4];
LCDMEM[LCD_CODE_ADDR_08] |= _LcdCodeHex[*(data+2)&0x0F];
LCDMEM[LCD_CODE_ADDR_09] |= _LcdCodeHex[*(data+1)>>4];
LCDMEM[LCD_CODE_ADDR_10] |= _LcdCodeHex[*(data+1)&0x0F];
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[*(data)>>4];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[*(data)&0x0F];
}
void LargeLedDisplay4Code4Bcd(unsigned char pos, unsigned char *data)
{
LCDMEM[LCD_CODE_ADDR_05] |= _LcdInfo4Code4Bcd[pos];
LCDMEM[LCD_CODE_ADDR_06] |= _LcdInfo4Code4Bcd[pos+1];
LCDMEM[LCD_CODE_ADDR_07] |= _LcdInfo4Code4Bcd[pos+2];
LCDMEM[LCD_CODE_ADDR_08] |= _LcdInfo4Code4Bcd[pos+3];
LCDMEM[LCD_CODE_ADDR_09] |= _LcdCodeHex[*(data+1)>>4];
LCDMEM[LCD_CODE_ADDR_10] |= _LcdCodeHex[*(data+1)&0x0F];
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[*(data)>>4];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[*(data)&0x0F];
}
void LargeLedDisplay4Bcd(unsigned char *data)
{
LCDMEM[LCD_CODE_ADDR_05] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_06] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_07] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_08] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_09] |= _LcdCodeHex[*(data+1)>>4];
LCDMEM[LCD_CODE_ADDR_10] |= _LcdCodeHex[*(data+1)&0x0F];
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[*(data)>>4];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[*(data)&0x0F];
}
void LargeLedDisplay4Code3Bcd(unsigned char pos, unsigned short data)
{
LCDMEM[LCD_CODE_ADDR_05] |= _LcdInfo4Code4Bcd[pos];
LCDMEM[LCD_CODE_ADDR_06] |= _LcdInfo4Code4Bcd[pos+1];
LCDMEM[LCD_CODE_ADDR_07] |= _LcdInfo4Code4Bcd[pos+2];
LCDMEM[LCD_CODE_ADDR_08] |= _LcdInfo4Code4Bcd[pos+3];
LCDMEM[LCD_CODE_ADDR_09] |= _LcdCodeHex[(unsigned char)((data>>12)&0x0F)];
LCDMEM[LCD_CODE_ADDR_10] |= _LcdCodeHex[(unsigned char)((data>>8)&0x0F)];
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[(unsigned char)((data>>4)&0x0F)];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[(unsigned char)(data&0x0F)];
}
void LargeLedDisplay1Bcd(unsigned char data)
{
LCDMEM[LCD_CODE_ADDR_05] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_06] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_07] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_08] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_09] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_10] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_11] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[data&0x0F];
}
void LargeLedDisplay2Bcd(unsigned char data)
{
LCDMEM[LCD_CODE_ADDR_05] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_06] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_07] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_08] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_09] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_10] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[(data>>4)&0x0F];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[data&0x0F];
}
void LargeLedDisplay6BcdSpec(unsigned char *data)
{
LCDMEM[LCD_CODE_ADDR_05] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_06] |= _LcdCodeHex[*(data+2)>>4];
LCDMEM[LCD_CODE_ADDR_07] |= _LcdCodeHex[*(data+2)&0x0F];
LCDMEM[LCD_CODE_ADDR_08] |= _LcdCodeHex[*(data+1)>>4];
LCDMEM[LCD_CODE_ADDR_09] |= _LcdCodeHex[*(data+1)&0x0F];
LCDMEM[LCD_CODE_ADDR_10] &=~ (0x7F);
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[*(data)>>4];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[*(data)&0x0F];
}
void DisplayContentCode(void)
{
unsigned short temp;
temp = (unsigned short)DisplayBitLocation;
temp = Hex2BcdShort( temp );
LCDMEM[LCD_SY_INFO_ADDR_P2] |= LCD_SY_INFO_P2;
LCDMEM[LCD_CODE_ADDR_01] |= _LcdCodeHex[ ( temp >> 12 ) & 0x0F ];
LCDMEM[LCD_CODE_ADDR_02] |= _LcdCodeHex[ ( temp >> 8 ) & 0x0F ];
LCDMEM[LCD_CODE_ADDR_03] |= _LcdCodeHex[ ( temp >> 4 ) & 0x0F ];
LCDMEM[LCD_CODE_ADDR_04] |= _LcdCodeHex[ temp & 0x0F ];
}
void DisplayDeviceNum(void)
{
unsigned char data[3], temp = 0;
if( DisplayBitLocation == 8 )
{
memcpy( data, (unsigned char *)&_SysDisplayRam.PmNum[0], 3 );
temp = 2;
}
else
{
memcpy( data, (unsigned char *)&_SysDisplayRam.PmNum[3], 3 );
}
LargeLedDisplay2Code6Bcd( temp, data );
}
void DisplayMeterNum(void)
{
DISP_CN_MNUM();
DisplayDeviceNum();
}
void DisplayDoubleMaoHao(void)
{
DISP_COLON_FRONT();
DISP_COLON_REAR();
}
void DisplayDateTimeData(unsigned char *dt)
{
LargeLedDisplay6Bcd(dt);
DisplayDoubleMaoHao();
}
void DisplayDateTime(void)
{
if( DisplayBitLocation == 5 )
{
DisplayDateTimeData( &SystemTime[SPACE_OF_DAY] );
DISP_CN_DATE();
}
else
{
DisplayDateTimeData( &SystemTime[SPACE_OF_SECOND] );
DISP_CN_TIME();
LcdDispFlag |= LCD_DISP_TIME;
}
}
const unsigned char _disp_baud_rate[] =
{
LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_3,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_6,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_1, LCD_CODE_INFO_2,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_2, LCD_CODE_INFO_4,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_4, LCD_CODE_INFO_8,
LCD_CODE_INFO_NONE, LCD_CODE_INFO_NONE, LCD_CODE_INFO_9, LCD_CODE_INFO_6,
LCD_CODE_INFO_1, LCD_CODE_INFO_1, LCD_CODE_INFO_5, LCD_CODE_INFO_2,
};
void DisplayBondrate(void)
{
unsigned char br = JudgeUart0BaudRate()*4;
LCDMEM[LCD_CODE_ADDR_07] |= _disp_baud_rate[br];
LCDMEM[LCD_CODE_ADDR_08] |= _disp_baud_rate[br+1];
LCDMEM[LCD_CODE_ADDR_09] |= _disp_baud_rate[br+2];
LCDMEM[LCD_CODE_ADDR_10] |= _disp_baud_rate[br+3];
LCDMEM[LCD_CODE_ADDR_11] |= _LcdCodeHex[0];
LCDMEM[LCD_CODE_ADDR_12] |= _LcdCodeHex[0];
LCDMEM[LCD_EN_INFO_ADDR_BPS] |= LCD_EN_INFO_BPS;
}
void DisplayPointerNext(void)
{
DisplayBitLocation++;
if( DisplayBitLocation >= DISPLAY_ITEM )
{
DisplayBitLocation = 0;
}
}
void PageUpNext(void)
{
if( LcdDispFlag & LCD_DISP_FLG_PAGEUP )
{
DisplayBitLocation++;
if( DisplayBitLocation >= DISPLAY_ITEM )
{
DisplayBitLocation = 0;
}
}
}
void PageDownNext(void)
{
if( DisplayBitLocation == 0 )
{
DisplayBitLocation = DISPLAY_ITEM;
}
if( DisplayBitLocation )
{
DisplayBitLocation--;
}
}
const unsigned char _disp_power_item[]={0,2,3,4};
void DisplayPowerData(void)
{
unsigned long pwrdata,temp;
unsigned char item;
item = _disp_power_item[DisplayBitLocation];
LCDMEM[_LcdCnExes[item][0]] |= _LcdCnExes[item][1];
LCDMEM[LCD_CN_INFO_ADDR_PWR] |= LCD_CN_INFO_PWR;
LCDMEM[LCD_SY_INFO_ADDR_P10] |= LCD_SY_INFO_P10;
if( DisplayBitLocation < 4 )
{
LCDMEM[LCD_CN_INFO_ADDR_ACTIVE] |= LCD_CN_INFO_ACTIVE;
LCDMEM[LCD_CN_INFO_ADDR_POSITIVE] |= LCD_CN_INFO_POSITIVE;
if( !(PowerStateFlag & PS_BREAKPOWER_FLAG ) )
{
LoadEnergy( (unsigned char *)&pwrdata, 0xFF, item );
}
else
{
pwrdata = _SysDisplayRam.ActivePosPwr[DisplayBitLocation];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -