📄 show_module1.c
字号:
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位
}
// -------------------------------------------------------------------------
// 处理显示的数据
void LcdDispDataApi(unsigned char Data[],unsigned char Len,unsigned char Data_Attr)
{
unsigned char i;
if (Len>4)
return;
for (i=0;i<8;i++) //清数码显示缓冲区
LcdBuffer[i+2]=0;
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<12;i++) //清数码显示缓冲区
LcdBuffer[i]=0;
LcdBuffer[9] = E_Code;
LcdBuffer[8] = R_Code;
LcdBuffer[7] = R_Code;
LcdBuffer[6] = O_Code;
LcdBuffer[5] = R_Code;
LcdBuffer[4] = _Code;
LcdBuffer[3] = GetDispCode((err>>4)&0x0F);
LcdBuffer[2] = GetDispCode( err & 0x0F);
LcdDispStatApi(StatFlg); // S---状态显示
// 上传显示数据
LcdUpData(); //刷新显示缓冲区的数据
}
//-----------------------------------------------------------------
//根据当前费率在LCD上显示费率级别
void ShowFQ(unsigned char FQdata)
{
switch (FQdata)
{
case 1:
LcdBuffer[1] |= 4; //显示“尖”
break;
case 2:
LcdBuffer[1] |= 2; //显示“峰”
break;
case 3:
LcdBuffer[1] |= 1; //显示“平”
break;
case 4:
LcdBuffer[1] |= 0x10; //显示“谷”
break;
}
}
/* ==================================================================================================================
* 文件名称:ShowID(unsigned int id)
* 文件标识:
* 摘 要: 1、显示系统数据结构中的可显示的数据项系
*输入参数: 参数为数据结构中的ID标识
*输出参数: 在LCD上显示ID项数据内容,如ID标识错误显示错误信息
* 引用函数: I2C读函数等: I2C_Read(); id搜索函数:Search()
* 当前版本:Ver 1.0
* 作 者:罗冬生
* 修改内容:
* 修改日期:
* 完成日期:
--------------------------------------------------------------------------------------------------------------------*/
//====================================================================================
// 显示ID的内容
unsigned char ShowXH(unsigned int id)
{
unsigned char ID_Numb,i;
unsigned char tempData[4];
ID_Numb = Search(id);
if (!ID_Numb) //有可显示ID
return 1; //ErrorTrue; // ShowError(0x02); //显示序号库没有这序号"error-02"
// -------------------------------------------------------------------------
// 处理显示序号
LcdBuffer[0] = GetDispCode(Disp_Count & 0x0F); // 处理显示序号
// -------------------------------------------------------------------------
// 处理显示的数据
if ((SysDataTree[ID_Numb].Icons1==0xff) && (SysDataTree[ID_Numb].Icons2==0xff))
return 1; //ErrorTrue; // ShowError(0x03); //不可显示序号 "error-03"
i= (SysDataTree[ID_Numb].Length) & 0x7f; //除去数据读写属性
if (i>4) //显示数据最大长度为4个字节
{i=4;}
MoveData_Api((SysDataTree[ID_Numb].Adr), (unsigned int)(&tempData[0])+xRAM_Adr, i);
LcdDispDataApi(tempData, i, BCD_Code); // 处理显示的数据, BCD_Code为数据类型,可以设置其他类型
// -----------------------------------------------------------------------------------------
// 显示数据汉字提示
LcdBuffer[10] = SysDataTree[ID_Numb].Icons2 ;
i = SysDataTree[ID_Numb].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[7] = LcdBuffer[5];
LcdBuffer[6] = LcdBuffer[4];
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();
ShowFQ(DQ_Fl);
}
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);
if (Key_Flg)
LcdBuffer[6] |=0x80; //显示编程锁符号
// if (DongTine_Flg)
// LcdBuffer[6] &=0x80; //显示“冬”符号
// -------------------------------------------------------------------------
// 上传显示数据
LcdUpData(); //刷新显示缓冲区的数据
return 0; // ErrorFalse;
}
// ---------------------------------------------------------------------------------------------
void DisplayCount(void)
{
unsigned char i;
i=0;
if (Disp_Count >= Disp_idLen)
Disp_Count=0;
while (ShowXH(rRttDspNo_Dtr[Disp_Count]))
{
if (rRttDspNo_Dtr[Disp_Count]==0xC33F) //费率显示
{
FlDispModule(&Disp_Count);
break;
}
Disp_Count++;
if (Disp_Count >= Disp_idLen)
Disp_Count=0;
i++;
if (i > Disp_idLen)
{
ShowXH(0x9010);
break;
}
}
}
//===============================================================================================
// 固定循环显示 ,显示序号在:Disp_Count 中
// 每一秒钟调用一次
void LcdDispModule(void)
{
if (Disp_Flg) //显示标志
{
if (Disp_Time)
{
DisplayCount(); //刷新显示缓冲区的数据
}
else
{
if (rStpDspTm_Dtr[0]) //判断停显时间
{
Disp_Time = rStpDspTm_Dtr[0];
Disp_Flg = 0; // 置停显标志
LcdSetDisplay(0); // 清显示屏 (也可以置lcd不使能)
}
else
{
Disp_Time = rShftDspTm_Dtr[0];
Disp_Count++;
DisplayCount(); //刷新显示缓冲区的数据
}
}
}
else if (!Disp_Time)
{
Disp_Flg = 1; // 置显标志
Disp_Time = rShftDspTm_Dtr[0];
Disp_Count++;
DisplayCount(); //刷新显示缓冲区的数据
}
}
//********************************************************************************
//函数名称: 按键显示模块:KeyDispModule
//函数描述: 将显示缓冲区"DispDataBuff"(显示数据结构体)的数据送液晶屏显示
//输入参数: 1、 "DispDataBuff"(显示数据结构体)的数据,见结构体;2、输入数据属性。
//输出参数: 无
//********************************************************************************
//===========================================================================================
__idata unsigned char KeyDispCount;
void KeyDispModule(void)
{
unsigned char i;
unsigned int temp,Id;
if (!Key_Disp)
{
LcdBuffer[11] |= 0x08; //显示按键符号
LcdUpData(); //刷新显示
DelayMs(5);
if (Key_Disp)
return;
while (!Key_Disp)
{
ClearWatchDog();
}
KeyDispCount++;
for (i=0;i<Disp_idLen;i++)
{
if (KeyDispCount>=Disp_idLen)
KeyDispCount=0;
temp = 2*KeyDispCount + eKeyDspNo_Dtr + e2RAM_Adr;
MoveData_Api(temp,(unsigned int)(&Id)+xRAM_Adr,2); //读出要显示ID
if (Id==0xC33F)
{
FlDispModule(&KeyDispCount);
break;
}
if (ShowXH(Id))
{
KeyDispCount++;
}
else
{
Disp_Time = rShftDspTm_Dtr[0];
Disp_Flg = 0; // 置停显标志
break;
}
}
}
}
//--------------------------------------------------------------------------------------
// 显示费率程序
unsigned char FlDispCount;
void FlDispModule(unsigned char __idata *count)
{
unsigned char tempData[6];
if (FlDispCount>=10) //10个日时段
FlDispCount=0;
MoveData_Api(3*FlDispCount + eFlTbl_Dtr+e2RAM_Adr,(unsigned int)(&tempData[0])+xRAM_Adr ,6);
LcdDispDataApi(tempData, 3, BCD_Code); // 处理显示的数据, BCD_Code为数据类型,可以设置其他类型
LcdBuffer[3] = _Code;
Set_Lcd_P6();
Set_Lcd_P2();
LcdBuffer[0]=0;
LcdBuffer[10]=7;
LcdBuffer[1]=0;
ShowFQ(tempData[0]);
if (tempData[3]==0)
FlDispCount=0;
else
{
FlDispCount++;
if (FlDispCount>=10)
FlDispCount=0;
else
(*count)--;
}
Disp_Time = rShftDspTm_Dtr[0]; //显示15秒
Disp_Flg = 0; // 置停显标志
LcdDispStatApi(StatFlg);
if (Key_Flg)
LcdBuffer[6] |=0x80; //显示编程锁符号
LcdUpData(); //刷新显示缓冲区的数据
}
//--------------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -