📄 lcd.c
字号:
#include "Lcd.h"
const DisData DisPlay_Info[] =
{
//标识,显示数据地址,显示项目信息1,2, 显示提示信息1,2, 小数单位标识信息
0x00, &Second, //时间
0x01, &Day, //日期
0x02, YgKwhZ, //有功电量
0x03, YgKwhJ,
0x04, YgKwhF,
0x05, YgKwhP,
0x06, YgKwhG,
0x07, WgKwhZ,
0x08, WgKwhJ,
0x09, WgKwhF,
0x10, WgKwhP,
0x11, WgKwhG, //无功电量
0x12, ubV1Rms,
0x13, ubIRms,
0x14, iPowerFct,
};
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
};
/******************************************************************
* 清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 DispBit )//显示的字节数
{
unsigned char i,dd;
LCDMEM[0] = Digit[(DisPlay_Info[nPage].ID)>>4];
LCDMEM[1] = Digit[(DisPlay_Info[nPage].ID)&0x0F];
LCDMEM[2] = 0x00;
LCDMEM[3] = 0x00;
if(DispBit == 6)
goto gbitend;
if(disbit1 <4 )
goto gbit1;
if((((*(DisPlay_Info[nPage].Addr1+3))>>4)!= 0x00)||(((*(DisPlay_Info[nPage].Addr1+3))&0x0f)!= 0x00))
goto gbitend;
gbit1:
if(disbit1 <3)
goto gbit2;
if(((*(DisPlay_Info[nPage].Addr1+2))>>4)!= 0x00)
goto gbitend;
else chs -= 1;
if(DispBit ==5)
goto gbitend;
if(((*(DisPlay_Info[nPage].Addr1+2))&0x0f)!= 0x00)
goto gbitend;
else chs -= 1;
gbit2:
if(((*(DisPlay_Info[nPage].Addr1+1))>>4)!= 0x00)
goto gbitend;
else chs -= 1;
if(DispBit == 3)
goto gbitend;
if(((*(DisPlay_Info[nPage].Addr1+1))&0x0f)!= 0x00)
goto gbitend;
else chs -= 1;
if(((*(DisPlay_Info[nPage].Addr1))>>4)!= 0x00)
goto gbitend;
else chs -=1;
gbitend:
for( i=0;i<chs;i++ )
{
dd = i/2;
if(i%2 == 0)
LCDMEM[9-i] = Digit[(*(DisPlay_Info[nPage].Addr1+dd))&0x0F];
else
LCDMEM[9-i] = Digit[(*(DisPlay_Info[nPage].Addr1+dd))>>4];
}
}
void dispro( unsigned char *Addr1, unsigned char chs,unsigned char DispBit )//显示的字节数
{
unsigned char i,dd;
if(DispBit == 6)
goto dppend;
if(disbit1 <4 )
goto dpp1;
if((((*(Addr1+3))>>4)!= 0x00)||(((*(Addr1+3))&0x0f)!= 0x00))
goto dppend;
dpp1:
if(disbit1 <3)
goto dpp2;
if(((*(Addr1+2))>>4)!= 0x00)
goto dppend;
else chs -= 1;
if(DispBit ==5)
goto dppend;
if(((*(Addr1+2))&0x0f)!= 0x00)
goto dppend;
else chs -= 1;
dpp2:
if(((*(Addr1+1))>>4)!= 0x00)
goto dppend;
else chs -= 1;
if(DispBit == 3)
goto dppend;
if(((*(Addr1+1))&0x0f)!= 0x00)
goto dppend;
else chs -= 1;
if(((*(Addr1))>>4)!= 0x00)
goto dppend;
else chs -=1;
dppend:
for( i=0;i<chs;i++ )
{
dd = i/2;
if(i%2 == 0)
LCDMEM[9-i] = Digit[(*(Addr1+dd))&0x0F];
else
LCDMEM[9-i] = Digit[(*(Addr1+dd))>>4];
}
}
void UpdataDisplay(void)
{
Clr_LCD_Display();
switch(Pages)
{
case 0:
{
disbit1 = 3;
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[0];
diswork[2] = Second;
diswork[3] = Minute;
diswork[4] = Hour;
dispro(&diswork[2],6,6);
LCDMEM[5] |= D_P1;
LCDMEM[7] |= D_P1;
LCDMEM[11] = D_TIME+D_Curr;
} break;
case 1:
{
disbit1 = 3;
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[1];
diswork[2] = Day;
diswork[3] = Month;
diswork[4] = Year[0];
dispro(&diswork[2],6,6);
LCDMEM[5] |= D_P1;
LCDMEM[7] |= D_P1;
LCDMEM[11] = D_DATE+D_Curr;
} break;
case 2: //有功电能总
{
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[2];
disbit1 = 4;
diswork[0] = 0x00;
diswork[1] = YgKwhZXS;
diswork[2] = YgKwhZ[0];
diswork[3] = YgKwhZ[1];
diswork[4] = YgKwhZ[2];
dispro(&diswork[1],6,3);
LCDMEM[6] |= D_E_Z;
LCDMEM[7] |= D_P1;
LCDMEM[9] |= D_h;
LCDMEM[10] = D_X + 0x80 + 0x02;
LCDMEM[11] = D_KW + D_Curr;
} break;
case 3://有功电能尖
{
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[3];
disbit1 = 4;
diswork[0] = 0x00;
diswork[1] = YgKwhJXS;
diswork[2] = YgKwhJ[0];
diswork[3] = YgKwhJ[1];
diswork[4] = YgKwhJ[2];
dispro(&diswork[1],6,3);
LCDMEM[6] |= D_E_Z;
LCDMEM[7] |= D_P1;
LCDMEM[9] |= D_h;
LCDMEM[10] = D_X + 0x80 + 0x01;
LCDMEM[11] = D_KW + D_Curr;
} break;
case 4://有功电能峰
{
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[4];
disbit1 = 4;
diswork[0] = 0x00;
diswork[1] = YgKwhFXS;
diswork[2] = YgKwhF[0];
diswork[3] = YgKwhF[1];
diswork[4] = YgKwhF[2];
dispro(&diswork[1],6,3);
LCDMEM[6] |= D_E_Z;
LCDMEM[7] |= D_P1;
LCDMEM[9] |= D_h;
LCDMEM[10] = D_X + 0x80 + 0x10;
LCDMEM[11] = D_KW + D_Curr;
} break;
case 5://有功电能平
{
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[5];
disbit1 = 4;
diswork[0] = 0x00;
diswork[1] = YgKwhPXS;
diswork[2] = YgKwhP[0];
diswork[3] = YgKwhP[1];
diswork[4] = YgKwhP[2];
dispro(&diswork[1],6,3);
LCDMEM[6] |= D_E_Z;
LCDMEM[7] |= D_P1;
LCDMEM[9] |= D_h;
LCDMEM[10] = D_X + 0x80 + 0x20;
LCDMEM[11] = D_KW + D_Curr;
} break;
case 6://有功电能谷
{
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[6];
disbit1 = 4;
diswork[0] = 0x00;
diswork[1] = YgKwhGXS;
diswork[2] = YgKwhG[0];
diswork[3] = YgKwhG[1];
diswork[4] = YgKwhG[2];
dispro(&diswork[1],6,3);
LCDMEM[6] |= D_E_Z;
LCDMEM[7] |= D_P1;
LCDMEM[9] |= D_h;
LCDMEM[10] = D_X + 0x80 + 0x40;
LCDMEM[11] = D_KW + D_Curr;
} break;
case 7://无功电能总
{
LCDMEM[0] = Digit[0];
LCDMEM[1] = Digit[7];
disbit1 = 4;
diswork[0] = 0x00;
diswork[1] = WgKwhZXS;
diswork[2] = WgKwhZ[0];
diswork[3] = WgKwhZ[1];
diswork[4] = WgKwhZ[2];
dispro(&diswork[1],6,3);
LCDMEM[6] |= D_E_Z;
LCDMEM[7] |= D_P1;
LCDMEM[10] = D_X + 0x80 + 0x10;
LCDMEM[11] = D_Curr;
} break;
case 8://电压
{
} break;
case 9://电流
{
} break;
case 10://功率因数
{
} break;
case 11://频率
{
} break;
case 8://电压
{
} break;
case 9://电流
{
} break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -