⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 本代码以AVR单片机为主控制器
💻 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 + -