📄 show_module(eric).c.bak
字号:
//输入参数: 1、 "DispDataBuff"(显示数据结构体)的数据,见结构体;2、输入数据属性。
//输出参数: 无
//********************************************************************************
// 显示- 小数点处理
/*
void LcdDispPontApi(unsigned char Pont_Val)
{
if (Pont_Val & P1_Code)
Set_Lcd_P1();
// else
// Close_Lcd_P1();
if (Pont_Val & P2_Code)
Set_Lcd_P2();
// else
// Close_Lcd_P2();
if (Pont_Val & P3_Code)
Set_Lcd_P3();
// else
// Close_Lcd_P3();
if (Pont_Val & P4_Code)
Set_Lcd_P4();
// else
// Close_Lcd_P4();
if (Pont_Val & P5_Code)
Set_Lcd_P5();
// else
// Close_Lcd_P5();
if (Pont_Val & P6_Code)
Set_Lcd_P6();
// else
// Close_Lcd_P6();
}
*/
//----------------------------------------------------------------
// 显示- 状态处理
// void LcdDispStatApi(unsigned char Stat_Val)
// {
// if (Stat_Val & S1_Code) //D4位
// Set_Lcd_S1();
// if (Stat_Val & S6_Code) //D5位
// Set_Lcd_S6();
// LcdBuffer[11] = Stat_Val & 0x0F; //D0~D3位
// }
// -------------------------------------------------------------------------
// 处理显示的数据 need modify
void LcdDispDataApi(unsigned char __idata Data[],unsigned char Len,unsigned char Data_Attr)
{
unsigned char i;
if (Len>4)
return;
for (i=0;i<7;i++) //清数码显示缓冲区
LcdBuffer[i+3]=0; // modified by Eric
if (Data_Attr== Source_Code) //数据为显示码
{
for(i=0;i<Len;i++)
LcdBuffer[i+2]= GetDispCode(Data[i]);
return;
}
if (Data_Attr == BCD_Code) //数据为BCD码
{
for(i=0;i<Len;i++)
{
LcdBuffer[2*i+2] =GetDispCode((Data[i]) & 0x0F); //取低位BCD码
LcdBuffer[2*i+3] =GetDispCode(((Data[i])>>4)&0x0F); //取高位BCD码
}
return;
}
if (Data_Attr == Hex_Code) //数据为十六进制码
{
Temp32 = 0;
for (i=0;i<Len;i++)
{
TempChar[i] = Data[i];
}
Temp32 = Hex32BCD(Temp32); //数进制转换 number
for(i=0;i<4;i++)
{
LcdBuffer[2*i+2] =GetDispCode((TempChar[i]) & 0x0F); //取低位BCD码
LcdBuffer[2*i+3] =GetDispCode(((TempChar[i])>>4)&0x0F); //取高位BCD码
}
}
}
//====================================================================================
// 显示error的内容
void ShowError(unsigned char err)
{
unsigned char i;
TempChar[0]= E_Code;
for (i=0;i<11;i++) //清数码显示缓冲区 modified by Eric
LcdBuffer[i]=0;
LcdBuffer[3] = E_Code;
LcdBuffer[4] = R_Code;
LcdBuffer[5] = R_Code;
LcdBuffer[6] = _Code;
LcdBuffer[7] = GetDispCode((err>>4)&0x0F);
LcdBuffer[8] = GetDispCode( err & 0x0F);
// LcdDispStatApi(StatFlg); // S---状态显示
// 上传显示数据
LcdUpData(); //刷新显示缓冲区的数据
}
//====================================================================================
// 显示ID的内容
void ShowXH(unsigned int id)
{
unsigned char i;
for (i=0;i<(sizeof Disp_Table);i++)
{
if (id == (Disp_Table[i].ID)) //查找显示ID
break;
}
if (i==(sizeof Disp_Table)) //有可显示ID
ShowError(0x02); //显示序号库没有这序号"error-02"
else
{
// -------------------------------------------------------------------------
// 处理显示序号
LcdBuffer[0] = GetDispCode(Disp_Count & 0x0F); // 处理显示序号
// -------------------------------------------------------------------------
// 处理显示的数据
LcdDispDataApi(Disp_Table[i].Adr,Disp_Table[i].Len,BCD_Code); // 处理显示的数据
// -------------------------------------------------------------------------
// 显示数据汉字提示
LcdBuffer[10] = Disp_Table[i].Icons2 ;
i = Disp_Table[i].Icons1 ;
if ( i & Gu_seg)
{
LcdBuffer[1]=0;
switch (i & 0x17)
{
case Gu_seg:
LcdBuffer[1] = i;
break;
case Point_1:
Set_Lcd_P5(); //P5 第一位小数点
break;
case Point_2:
Set_Lcd_P4(); //P5 第二位小数点
break;
case Point_3:
Set_Lcd_P3(); //P5 第三位小数点
break;
case Point_4:
Set_Lcd_P2(); //P5 第四位小数点
break;
}
if ((i & U_FH)==U_FH) //D4,D3=11,
{ // 显示电压值
for (i=0;i<7;i++)
LcdBuffer[9-i] = LcdBuffer[8-i];
LcdBuffer[2]=u_Code; //输出电压符号u
}
else if ((i & TEMP_FH)==TEMP_FH)
{ //显示温度符号'C
LcdBuffer[5] = LcdBuffer[3];
LcdBuffer[4] = LcdBuffer[2];
LcdBuffer[3] = 0x02; //'
LcdBuffer[2] = C_Code; //C
}
}
else
LcdBuffer[1] = i ;
// -------------------------------------------------------------------------
// Pont---小数点处理
if (LcdBuffer[1] & DianLiang_seg) //置电量小数点
Set_Lcd_P4(); //P4
if (LcdBuffer[10] & (RiQi_seg ))
{ //显示20xx年xx月xx日
// Set_Lcd_P4();
LcdBuffer[9]= GetDispCode(2);
LcdBuffer[8]= GetDispCode(0);
Set_Lcd_P6();
}
if ((LcdBuffer[10] & Shi_Time) && ( LcdBuffer[10] & Jian_Time))
{ //显示时间 :xx 时xx 分xx 秒
Set_Lcd_P6();
Set_Lcd_P2();
Set_Lcd_P4();
}
if ((LcdBuffer[10] & Shi_Time) && ( LcdBuffer[10] & Duan_seg))
{ //显示时段 :xx 时xx 分-X
Set_Lcd_P4();
Set_Lcd_P2();
LcdBuffer[3] = GetDispCode(0x17); //显示代码序号17为 "-"
}
// -------------------------------------------------------------------------
// S---状态显示处理
LcdDispStatApi(StatFlg);
// -------------------------------------------------------------------------
// 上传显示数据
LcdUpData(); //刷新显示缓冲区的数据
}
}
// ---------------------------------------------------------------------------------------------
// 固定循环显示 ,显示序号在:Disp_Count 中
//
void LcdDispApi(void)
{
unsigned char i;
if (Disp_Flg) //显示标志
{
if (Disp_Time)
{
if (Disp_XH_Buffer[Disp_Count])
ShowXH(Disp_XH_Buffer[Disp_Count]); //刷新显示缓冲区的数据
else
ShowError(0x01) ;
}
else
{
Disp_Flg = 0; // 置停显标志
Disp_Time =1;
LcdSetDisplay(0); // 清显示屏 (也可以置lcd不使能)
// Stop_DispTime = 1; // 置停显时间 (也可由e2prom中的数据修改)
}
}
else
{
if (!Disp_Time)
{
Disp_Time = 5; //显示时间(也可由e2prom中的数据修改)
Disp_Flg = 1; // 置显示标志
for (i=0;i<Disp_idLen;i++)
{
Disp_Count++; // 显示序号+1
if (Disp_Count >= Disp_idLen)
Disp_Count=0;
if (Disp_XH_Buffer[Disp_Count]) //序号值=0,为无显示序号
break;
}
if (i==Disp_idLen)
ShowError(0x01) ; //显示序号为空"error-01"
else
ShowXH(Disp_XH_Buffer[Disp_Count]) ;
}
}
}
//********************************************************************************
//函数名称: LcdDisp_Module
//函数描述: 将显示缓冲区"DispDataBuff"(显示数据结构体)的数据送液晶屏显示
//输入参数: 1、 "DispDataBuff"(显示数据结构体)的数据,见结构体;2、输入数据属性。
//输出参数: 无
//********************************************************************************
unsigned long __idata Vall;
void DelyMs(unsigned int dely)
{
unsigned long __idata *val;
// unsigned char i;
unsigned int k;
for (k=0;k<dely;k++)
{
val = (unsigned long __idata *)KWhPwrT ;
*val = Vall = BCD32Inc(Vall);
}
}
//===========================================================================================
unsigned long __idata * __idata cp32;
void LcdDisp_Module(void)
{
unsigned char i;
unsigned int temp;
if (S_Flg)
{
LcdDispApi ();
// LcdInit(); //LCD初始化
cp32 =(__idata unsigned long *) KWhPwrT;
*cp32 = BCD32Inc(*cp32);
P_LED ^= 1;
EnergyModule();
MeasurementModule();
temp =10;//(unsigned int)(&SysDataTree[0]);// (unsigned int)(&rMtNo_Dtr[0]);
temp += pROM_Adr;
i=I2C_Write(I2C_SlvAdr,0x210,temp,4);// (unsigned int)(&SysDataTree[0])+pROM_Adr
// i = MoveData_Api((unsigned int)(&SysDataTree[0])+pROM_Adr,0x210+0x8000, 4);
// i |= MoveData_Api((unsigned int)KWhPwrT, eSY_PPwrTtl_Dtr + 0x8000, 4);
// i |= MoveData_Api(eSY_PPwrTtl_Dtr + e2RAM_Adr, temp + xRAM_Adr, 4);
// i |= MoveData_Api(temp + xRAM_Adr, (unsigned int)(&KWhPwrT[0]), 4);
if (i==ErrorTrue)
P_LED ^= 1;
// i = MoveData_Api((unsigned int)(&KWhPwrT[0]),0x210+0x8000, 4);
I2C_Read (I2C_SlvAdr,0x210,(unsigned int)(&KWhPwrT[4]),4);
S_Flg=0;
S_Flg=0;
}
}
//--------------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -