📄 display.c
字号:
/************************** (C) 2005 485表项目 *******************************
项 目: 485表项目
编译环境 : IARAVR 编译器 4.12A
模块名称 : Display.c
版 本 : V 1.0
建立时间 : 2008-5-3 21:51
修改时间 : 2008-5-3 22:18
作 者 : 郝瑜云
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
功能描述 : 显示相关子程序
程序结构 : Display() 显示主程序
|
_________________________|________________________
| | | |
RamFill() DevideDataToBuff() HEXToBCD8() Write6024()
| | | |
清除RAM 拆分数据至缓冲 BCD转换 写数据
包括显示灭零
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
修改 :
******************************************************************************/
#include "Include.h"
//-----------------------------------------------------------------------------
// LCD 显示标志定义
//----------------------------------------------------------// 常规标志显示定义
void _DISP_KWH(void);
void _DISP_DIANLIANG(void);
void _DISP_SHANGYUE(void);
void _DISP_SHANG(void);
void _DISP_SHIJIAN(void);
void _DISP_C1(void);
void _DISP_C2(void);
void _DISP_C3(void);
void _DISP_ZERO2(void);
void _DISP_ZERO1(void);
void _DISP_JUHAO(void);
void _DISP_CHANGSHU(void);
//----------------------------------------------------------// 特殊标志显示定义
#define _DISP_TONGXUN() SETBIT(GeneralVar.Buff[16],4)
#define _DISP_BIANCHENG() SETBIT(GeneralVar.Buff[15],0)
//#define _DISP_SUODING() SETBIT(GeneralVar.Buff[15],1)
//#define _DISP_DIANCHI() SETBIT(GeneralVar.Buff[15],2)
#define _DISP_FANXIANG() SETBIT(GeneralVar.Buff[13],4)
//-----------------------------------------------------------------------------
//*****************************************************************************
// 函数 : void Display(void) *
// *
// 功能 : LCD 显示子程序 *
// 注释 : *
//*****************************************************************************
void Display(void)
{
//INT8U i,consttmp[10];
if(CHKBIT(TimeBits,EnDisplay)) // 检查刷新LCD标志
{
CLRBIT(TimeBits,EnDisplay);
//---------------------------------------------------------------------
RamFill(GeneralVar.Buff,0,20); // 清除显示缓冲区
DispUnion.DispLong = 0; // 清除显示字符
//---------------------------------------------------------------------
if(CHKBIT(TimeBits,PushDispKey))
{
CLRBIT(TimeBits,PushDispKey);
// CLRBIT(TimeBits,OffLcdPower);
SETBIT(TimeBits,EnDisplay); // 允许显示刷新
DispVar.DispTimer = 0; // 显示定时器清零
//---------------------------------------------------------------------
if(++DispVar.DispCode >= _LUNXIAN_MAX)
{
DispVar.DispCode = 0;
}
}
switch(DispVar.DispCode)
{
case 0: // 显示当前电量
BuildPower();
//PowerVar.ActInPow[0]=0x12;
//PowerVar.ActInPow[1]=0x34;
//PowerVar.ActInPow[2]=0x56;
//PowerVar.ActInPow[3]=0x78;
CopyRam(PowerVar.ActInPow,DispUnion.DispNum,4); // 转换当前电量到显示缓冲
HEXToBCD8(DispUnion.DispNum,4);
// #ifdef _DISP_6_ADD_1
// DispUnion.DispLong >>= 4;
// DevideDataToBuff(1);
// _DISP_ZERO1();
// #endif
// #ifdef _DISP_6_ADD_2
DevideDataToBuff(0);
_DISP_ZERO2();
// #endif
_DISP_KWH();
_DISP_DIANLIANG();
break;
case 1: // 显示局号末8位
CopyEEPToRam(ADDRESS_C032E,DispUnion.DispNum,4);
DevideDataToBuff(0);
_DISP_JUHAO();
break;
case 2: // 显示表常数
DispUnion.DispNum[1] = _PulseConst;//PowerVar.PulseConst;
HEXToBCD8(DispUnion.DispNum+1,1);
DevideDataToBuff(5);
_DISP_CHANGSHU();
_DISP_KWH();
break;
//-----------------------------------------------------------------
case 3: // LCD 测试
RamFill(GeneralVar.Buff+5,0xFF,12);
break;
//-----------------------------------------------------------------
default:
break;
}
// if(CHKBIT(ACSR,ACO) == 0)
// {
if(CHKBIT(ComBits,CommFlag)) {_DISP_TONGXUN();} // 检查通讯标志
if(ComVar.AdjustEn == 0xAA) // 调试状态闪动
{if(CHKBIT(TimeBits,AdjustFlash)) {_DISP_BIANCHENG();}}
else if(ComVar.ProgEn == 0xAA) {_DISP_BIANCHENG();} // 检查编程标志
if(CHKBIT(PulseBits,RevPFlag)) {_DISP_FANXIANG();} // 检查反向标志
// if(CHKBIT(ComBits,ProgLock)) {_DISP_SUODING();} // 检查锁定标志
// }
//---------------------------------------------------------------------
GeneralVar.Buff[0] = 0x7C; // 器件地址
GeneralVar.Buff[1] = 0xD8; // 显示控制命令,低速方式32kHz
GeneralVar.Buff[2] = 0xE0; // 片选控制
// 闪烁方式 0.5S
if(CHKBIT(PulseBits,DisMeasure)) { GeneralVar.Buff[3] = 0xF3; }
else { GeneralVar.Buff[3] = 0xF0; }
// consttmp[0]=(GeneralVar.Buff[14]&0xF0)+(GeneralVar.Buff[13]&0x0F);
// consttmp[1]=(GeneralVar.Buff[13]&0xF0)+(GeneralVar.Buff[12]&0x0F);
// consttmp[9]=GeneralVar.Buff[12]&0xF0;
// for(i=0;i<7;i++)consttmp[i+2]=GeneralVar.Buff[5+i];
// for(i=0;i<10;i++)GeneralVar.Buff[i+5]=consttmp[i];
Write6024(); // 数据写入6024
}
}
//*****************************************************************************
// 函数原型: void DevideDataToBuff(void) *
// *
// 功 能: 显示数字填充函数 *
// 注 释: 拆分压缩BCD码数组放入显示缓冲区 *
//*****************************************************************************
void DevideDataToBuff(INT8U del_zero)
{
INT8U i;
GeneralVar.Buff[_NUM0] = DispNumTab(DispUnion.DispNum[0]);
GeneralVar.Buff[_NUM1] = DispNumTab((DispUnion.DispNum[0] >> 4));
GeneralVar.Buff[_NUM2] = DispNumTab(DispUnion.DispNum[1]);
GeneralVar.Buff[_NUM3] = DispNumTab((DispUnion.DispNum[1] >> 4));
GeneralVar.Buff[_NUM4] = DispNumTab(DispUnion.DispNum[2] );
GeneralVar.Buff[_NUM5] = DispNumTab((DispUnion.DispNum[2] >> 4));
GeneralVar.Buff[_NUM6] = DispNumTab(DispUnion.DispNum[3] );
GeneralVar.Buff[_NUM7] = DispNumTab((DispUnion.DispNum[3] >> 4));
for( i=_NUM7;i<(_NUM7+del_zero);i++ )
{
if(GeneralVar.Buff[i] == _LCDZero)
{
GeneralVar.Buff[i] =0x00;
}
else return;
}
}
//*****************************************************************************
// 函数原型: INT8U HEXToBCD(INT8U *S,INT8U cnt) *
// *
// 功 能: 十六进制到bcd转换 *
// 注 释: *S 为输入数据地址 cnt 转换数据个数 *
//*****************************************************************************
INT8U DispNumTab(INT8U c)
{
return(NumTab[c&0x0F]);
}
//*****************************************************************************
// 函数 : void InitLcd(void) *
// *
// 功能 : LCD 初始化程序 *
// 注释 : *
//*****************************************************************************
void InitLcd(void)
{
DispVar.DispTimer = 0;//18;
DispVar.DispCode = 3; // 执行LCD测试
SETBIT(TimeBits,EnDisplay);
}
//*****************************************************************************
// 函数 : void InitLcd(void) *
// *
// 功能 : LCD 符号显示特殊定义程序 *
// 注释 : *
//*****************************************************************************
void _DISP_KWH(void) // 显示 KWH
{
SETBIT(GeneralVar.Buff[15],7);
SETBIT(GeneralVar.Buff[15],5);
}
void _DISP_DIANLIANG(void) // 显示 当前电量
{
SETBIT(GeneralVar.Buff[13],5);
SETBIT(GeneralVar.Buff[14],6);
SETBIT(GeneralVar.Buff[14],5);
}
void _DISP_SHANGYUE(void) // 显示 上月
{
SETBIT(GeneralVar.Buff[13],3);
}
void _DISP_SHANG(void) // 显示 上
{
SETBIT(GeneralVar.Buff[13],7);
}
void _DISP_SHIJIAN(void) // 显示 时间
{
SETBIT(GeneralVar.Buff[14],2);
}
void _DISP_C1(void) // 显示 C1
{
SETBIT(GeneralVar.Buff[7],3);
}
void _DISP_C2(void) // 显示 C2
{
SETBIT(GeneralVar.Buff[8],3);
}
void _DISP_C3(void) // 显示 C3
{
SETBIT(GeneralVar.Buff[9],3);
}
void _DISP_JUHAO(void) // 显示 局号
{
SETBIT(GeneralVar.Buff[14],1);
}
void _DISP_CHANGSHU(void) // 显示 常数
{
SETBIT(GeneralVar.Buff[15],3);
}
void _DISP_ZERO2(void) // 显示小数点2
{
SETBIT(GeneralVar.Buff[10],0);
}
void _DISP_ZERO1(void) // 显示小数点1
{
SETBIT(GeneralVar.Buff[11],0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -