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

📄 led.c

📁 一个很好的完整的空调控制器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************** (c) 2005   佛山菱电 *****************************************
PROJECT  : AUX VRV
COMPILER : AVR GCC/ICC
MODULE   : led.c
VERSION  : 1.0.0
DATE     : 2006/01/04
AUTHOR   : 朱坤
DESCRIPTION :    LED 显示处理处理

MODIFICATIONS :
******************************************************************************/
#include "led.h"
#include "ports.h"
#include "timer.h"
#include "main.h"
#include "fan.h"
#include "swing.h"
#include "adc.h"
#include "i2c.h"

#ifdef LEDDISP
u8 TimeTmSet;               /* 设定定时时显示定时时间 10 秒 */
u8 FanTmSet;                /* 设定风速时显示设定风速 10 秒 */
u8 DispDlyCnt;              /* 模式确认延时 */
u8 FlashCntr;               /* LED 显示错误码计时 */
#if (NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 2)||(NJTYPE == 3)
u8 FlashCntr2;              /* 错误码 */
#elif (NJTYPE == 4)
u8 FlashErrNo;              /* 错误显示序号 */
u8 FlashErrCnt;             /* 错误显示循环时间 */
u8 SegBuf[8];               /* LED/数码管显示的内容 */
u8 ScanCnt;                 /* 扫描计数 0-2 */
u8 SwingTm;
u8 SwingCn;
const u8 TabSeg[]={         /* abcdefgh|  */
                    0x0FC,  /* 11111100|0 */
                    0x60,   /* 01100000|1 */
                    0x0DA,  /* 11011010|2 */
                    0x0F2,  /* 11110010|3 */
                    0x66,   /* 01100110|4 */
                    0x0B6,  /* 10110110|5 */
                    0x0BE,  /* 10111110|6 */
                    0x0E0,  /* 11100000|7 */
                    0x0FE,  /* 11111110|8 */
                    0x0F6}; /* 11110110|9 */
        //0x9e      /* 'E' */
        //0x8e      /* 'F' */
#elif (NJTYPE == 5)
u8 FlashErrNo;     /* 错误显示序号 */
u8 FlashErrCnt;    /* 错误显示循环时间 */
u8 SegBuf[6];      /* 显示缓冲区 */
u8 ChkLcdCnt;      /* 测试延时 */
u8 ScanCnt;        /* 扫描计数 */
u8 KeyBuf;         /* 暂存扫描键值 */
u8 KeyGet;         /* 得到的扫描键 */

const u8 TabSeg[]={ /* CBDE .GFA   */
        0x0F3,      /* 1111 0011 0 */
        0x0C0,      /* 1100 0000 1 */
        0x75,       /* 0111 0101 2 */
        0x0E5,      /* 1110 0101 3 */
        0x0C6,      /* 1100 0110 4 */
        0x0A7,      /* 1010 0111 5 */
        0x0B7,      /* 1011 0111 6 */
        0x0C1,      /* 1100 0001 7 */
        0x0F7,      /* 1111 0111 8 */
        0x0E7};     /* 1110 0111 9 */
        //0x37      /* 'E' */
        //0x17      /* 'F' */
void DispTime(u16 tm)
{
  u8 i;
  u8 j;

  i = (u8)(tm / 60);
  j = (u8)(i / 10);

  if (j != 0){
    SegBuf[0] |= (u8)(TabSeg[j]);
  }
  SegBuf[1] |= (u8)(TabSeg[(u8)(i % 10)]);

  i = (u8)(tm % 60);
  SegBuf[2] |= (u8)(TabSeg[(u8)( i / 10)]);
  SegBuf[3] |= (u8)(TabSeg[(u8)( i % 10)]);
}
#endif

/* LED 显示, 每 4mS 执行一次 */
void LedDisp_Sub(void)
{
#if (NJTYPE == 4)  /* 挂机 */
/*       A   B   C   D   E   F   G   H
 *       7   6   5   4   3   2   1   0  字节顺序
 *       8   7   6   5   4   3   2   1
 *位0 16 PW CLK  lK  rK  lM  rM  HOT
 *位1 15 G1 G2                   N
 *位2 14 F1 F2
 *位3 13 E1 E2
 *位4 12 D1 D2
 *位5 11 C1 C2
 *位6 10 B1 B2                       SLEEP
 *位7 9  A1 A2                       COOL
 */

  u8 i;

  /* LED 显示定时 */
  if (++FlashCntr >= 250) FlashCntr = 0;
  //if (ScanCnt == 0){
    SetBit(Sysflag1,fDataChg);
    for (i=0; i<8; i++) SegBuf[i] = 0;

    if (((Errorflg
        |Errorflg2
#ifdef EnSTYLE5
        |OutSideErr[1]
        |OutSideErr[2]
        |OutSideErr[3]
        |OutSideErr[4]
        |OutSideErr[5]
#endif
        |OutSideErr[0]) != 0)
       /*&& (SWTime == 0)*/){
      if (FlashCntr >= 120){
        i = (u8)GetErrNum();
#ifdef EnSTYLE5
        SegBuf[7] = TabSeg[(u8)(i >> 4)];
        SegBuf[6] = TabSeg[(u8)(i & 0x0F)];
#else
        if (i >= 0x0F){
          SegBuf[7] = 0x9E;   /* E */
        } else {
          SegBuf[6] = 0x8E;   /* F */
        }
        SegBuf[6] = TabSeg[(u8)(i & 0x0F)];
#endif
      }
    } else {
      FlashErrCnt = 0;

      /* 显示温度 */
      if (AmbientTp <= 0x77){
        SegBuf[7] = 0x02;    /* -9 */
        SegBuf[6] = 0x0E7;
      } else if (AmbientTp < 0x80){
        SegBuf[7] = 0x02;    /* -1 -- -8 */
        SegBuf[6] = TabSeg[(u8)(0x80 - AmbientTp)];
      } else {   /* 0 -- 99 */
        SegBuf[7] = TabSeg[(u8)((AmbientTp - 0x80) / 10)];
        SegBuf[6] = TabSeg[(u8)((AmbientTp - 0x80) % 10)];
      }

      i = (u8)(RunMode & 0x03);
      if (ValBit(RunMode,fSysOn)|(SWTime != 0)){
        /* 通风模式时,不闪烁 */
        if (
           /* 外机允许 */
           ValBit(OutDevStu[0],fRunEnable)
           /* 自动模式*/
           || (AutoCnt != 0)
           /* 检测延时未到 */
           || (DispDlyCnt < 0x0A)
           || ValBit(SlpTmFlag,bb2s)){
          if ((i == MODECOOL)||(i == MODEDRY)){
            /* 制冷 */
            SetBit((SegBuf[0]),7);
          } else if (i == MODEHEAT){
            /* 制热 */
            /* 化霜时,闪烁 */
            if (~(ValBit(OutDevStu[0],fOutDeforst)
            /* 防冷风,闪烁 */
            || ValBit(Sysflag2,fProtColdFan))
            || ValBit(SlpTmFlag,bb2s)){
              SetBit((SegBuf[1]),0);
            }
          }
        }

        if (SwingTm-- == 0){
          i = (FanStatus >> 4);
          /* 设定风速 */
          if (FanTmSet != 0) i = FanStatus;
          i &= 0x03;
          if (i == FANHI_S){
            SwingTm = 100;
          } else if (i == FANMI_S){
            SwingTm  = 180;
          } else {
            SwingTm = 255;
          }
          if (++SwingCn > 2) SwingCn = 0;
        }

        if (SwingCn == 2){
          SegBuf[4] = 0x0FF;
          SegBuf[5] = 0x0FF;
        } else if (SwingCn == 1){
          SegBuf[3] = 0x0FF;
          SegBuf[2] = 0x0FF;
        } else {
          SegBuf[1] |= 0x0FE;
        }
      }

      /* 睡眠 */
      if (ValBit(SlpTmFlag, fSleep)) SetBit((SegBuf[0]),6);

      /* 定时 */
      if (ValBit(SlpTmFlag, fTime)||
          ValBit(SlpTmFlag, fTimeOff)){
        SetBit((SegBuf[6]),0);
      }

      /* 电源 */
      SetBit((SegBuf[7]),0);
    }
    ClrBit(Sysflag1,fDataChg);
  //}
#elif (NJTYPE == 5)   /* 柜机 */
/*
 * .0 1A       .0 2A        .0 3A   .0 4A   .0 制冷  .0 定时
 * .1          .1 2F        .1 3F   .1 4F   .1 摆风  .1 . (上)
 * .2 1G       .2 2G        .2 3G   .2 4G   .2 睡眠  .2 . (下)
 * .3 SET TEMP .3 ROOM TEMP .3 段3  .3 段4  .3 段1   .3 段2
 * .4 1E       .4 2E        .4 3E   .4 4E   .4 自动  .4
 * .5 1D       .5 2D        .5 3D   .5 4D   .5 制热  .5 P
 * .6 1B       .6 2B        .6 3B   .6 4B   .6 除湿  .6 L
 * .7 1C       .7 2C        .7 3C   .7 4C   .7 通风  .7 H
 */

  u8 i;

  /* LCD 显示定时 */
  if (++FlashCntr >= 245){
    FlashCntr = 0;
    if (FanTmSet != 0)  FanTmSet--;
    if (TimeTmSet != 0) TimeTmSet--;
  }

  SetBit(Sysflag1,fDataChg);  /* 数据变化标志 */
  if (ChkLcdCnt != 0){        /* 检查延时 */
    /* 全部点亮3秒 */
    for (i=0; i<6; i++) SegBuf[i] = 0x0FF;
  } else {
    /* 清除 */
    for (i=0; i<6; i++) SegBuf[i] = 0;
    ClrBit(pRunLED,pbRunLED);    /* 灯灭 */
    if (((Errorflg
        |Errorflg2
#ifdef EnSTYLE5
        |OutSideErr[1]
        |OutSideErr[2]
        |OutSideErr[3]
        |OutSideErr[4]
        |OutSideErr[5]
#endif
        |OutSideErr[0]) != 0)
        && (SWTime == 0)){                /* 不是操作期间 */
      if (FlashCntr >= 120){              /* 闪烁 */
        i = (u8)GetErrNum();              /* 故障代码 */
#ifdef EnSTYLE5
        SegBuf[2] = TabSeg[(u8)(i >> 4)];
        SegBuf[3] = TabSeg[(u8)(i & 0x0F)];
#else
        if (i >= 0x0F){
          SegBuf[2] = 0x37;   /* E */
        } else {
          SegBuf[2] = 0x17;   /* F */
        }
        SegBuf[3] = TabSeg[(u8)(i & 0x0F)];
#endif
      }
    } else {

      /* 定时时间 */
      if (ValBit(SlpTmFlag,fTime) ||
          ValBit(SlpTmFlag,fTimeOff)){
        SetBit((SegBuf[5]),0);      /* 定时 */
        if (TimeTmSet != 0){
          SetBit((SegBuf[5]),1);      /* : */
          SetBit((SegBuf[5]),2);
          if (ValBit(SlpTmFlag,fTimeOff)){
            DispTime(TurnOff);
          } else {
            DispTime(TurnOn);
          }
        }
      } else {
        /* 显示 Tr */
        FlashErrCnt = 0;
        if (AmbientTp >= 0x80){
          i = (u8)(AmbientTp - 0x80);
          SegBuf[2] = TabSeg[(u8)(i / 10)];
          SegBuf[3] = TabSeg[(u8)(i % 10)];
        } else {
          i = (u8)(0x80 - AmbientTp);
          if (i >= 9) i = 9;
          SegBuf[2] = 0x04;    /* '-' */
          SegBuf[3] = TabSeg[i];
        }
        SetBit((SegBuf[1]),3); /* '房间温度' */
      }

      /* 显示模式,外机不允许时闪烁 */
      if (ValBit(RunMode,fSysOn)||(SWTime != 0)){
        if ((u8)(RunMode & MODEMASK) == MODEFAN){
          SetBit((SegBuf[4]),7);       /* 通风 */
          SetBit(pRunLED,pbRunLED);    /* 灯亮 */
        } else if (((ValBit(OutDevStu[0],fRunEnable) /* 外机允许 */
                     /* 自动模式*/
                     || ((AutoCnt != 0) &&
                         (ValBit(Sysflag2,fMAuto) ||
                          ((u8)(RunMode & MODEMASK) == MODEAUTO)))
                     /* 检测延时未到 */
                     || (DispDlyCnt < 0x0A)) &&
                    (((u8)(RunMode & 0x03) != MODEHEAT) ||
                     ((!ValBit(Sysflag2,fProtColdFan)) &&
                      (!ValBit(OutDevStu[0],fOutDeforst))))) ||
                   ValBit(SlpTmFlag,bb2s)){
          SetBit(pRunLED,pbRunLED);    /* 灯亮 */
          if (ValBit(Sysflag2,fMAuto)||
              ((u8)(RunMode & MODEMASK) == MODEAUTO)){
            SetBit((SegBuf[4]),4);    /* x1 自动 */
          } else if ((u8)(RunMode & MODEMASK) == MODEHEAT){
            SetBit((SegBuf[4]),5);    /* x5 制热 */
          } else if ((u8)(RunMode & MODEMASK) == MODECOOL){
            SetBit((SegBuf[4]),0);    /* x2 制冷 */
          } else if ((u8)(RunMode & MODEMASK) == MODEDRY){
            SetBit((SegBuf[4]),6);    /* x3 除湿 */
          }
        }

        /* 设定温度 */
        if (((!ValBit(SlpTmFlag,fTime)) &&
            (!ValBit(SlpTmFlag,fTimeOff))) ||
            (TimeTmSet == 0)){
          if (ValBit(Sysflag,fContinue)){
            SegBuf[0] |= 0x04;
            SegBuf[1] |= 0x04;         /* -- */
          } else {
            i = (u8)(SetupTp - 0x80);
            SegBuf[0] |= (u8)(TabSeg[(u8)(i / 10)]);
            SegBuf[1] |= (u8)(TabSeg[(u8)(i % 10)]);
            SetBit((SegBuf[0]),3);    /* '设定温度' */
          }
        }

        /* 运行风速 */
        i = (FanStatus >> 4);
        /* 设定风速 */
        if (FanTmSet != 0) i = FanStatus;
        i &= 0x03;
        if (i == FANAUTO_S){
          SetBit((SegBuf[4]),3);  /* 段1 */
          SetBit((SegBuf[5]),3);  /* 段2 */
          SetBit((SegBuf[2]),3);  /* 段3 */
          SetBit((SegBuf[3]),3);  /* 段4 */
          SetBit((SegBuf[5]),5);  /* P */
        } else if (i == FANLO_S){
          SetBit((SegBuf[4]),3);  /* 段1 */
          SetBit((SegBuf[5]),6);  /* L */
        } else if (i == FANMI_S){
          SetBit((SegBuf[4]),3);  /* 段1 */
          SetBit((SegBuf[5]),3);  /* 段2 */
        } else {
          SetBit((SegBuf[4]),3);  /* 段1 */
          SetBit((SegBuf[5]),3);  /* 段2 */
          SetBit((SegBuf[2]),3);  /* 段3 */
          SetBit((SegBuf[5]),7);  /* H */
        }

        /* 扫风显示 */
        if ((u8)(FDoorUnit & SWINGMASK) != SWINGFIXED){
          SetBit((SegBuf[4]),1);
        }

        /* x9 电加热 */
        //if (ValBit(Sysflag1,fEHeatOn)){
        //}
        /* 化霜 */
        //if (ValBit(OutDevStu[0],fOutDeforst)){
        //}

        /* T3 睡眠 */
        if (ValBit(SlpTmFlag,fSleep)) SetBit((SegBuf[4]),2);
      }
    }
  }
  ClrBit(Sysflag1,fDataChg);

  if (ValBit(Sysflag,fSysLock)){
    SetBit(pLockLED,pbLockLED);  /* 灯亮 */
  } else {
    ClrBit(pLockLED,pbLockLED);  /* 灯灭 */
  }

#else  /* NJTYPE */              /* 25/75 吸顶,18NV, 418 */
#ifndef TESTPRG
  if (++FlashCntr >= 250){       /* LED 显示定时 */
     FlashCntr = 0;
     if ((FlashCntr2 & 0x0F) != 0) FlashCntr2--;
  }

#if ((NJTYPE == 0)||(NJTYPE == 1))
     ClrBit(pProtLed,pbProtLed);      /* 电源灯亮 */
#endif

  if ((Errorflg
      |Errorflg2
#ifdef EnSTYLE5
      |OutSideErr[1]
      |OutSideErr[2]
      |OutSideErr[3]
      |OutSideErr[4]
      |OutSideErr[5]
#endif
      |OutSideErr[0]) != 0){
     if ((FlashCntr2 & 0x0F) == 0){
       FlashCntr2 = GetErrNum();
       FlashCntr = 0;
     }

//#if ((NJTYPE == 0)||(NJTYPE == 1))
//     ClrBit(pProtLed,pbProtLed);      /* 故障灯亮 */
//#endif
#if ((NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 2))
     if (((FlashCntr2 & 0x0F) <= 0x02)||(FlashCntr >= 100)){
       SetBit(pTimeLed,pbTimeLed);    /* 定时灯灭 */
       SetBit(pRunLed,pbRunLed);      /* 运行灯灭 */
     } else {
       if (ValBit(FlashCntr2,4))
         ClrBit(pTimeLed,pbTimeLed);  /* 定时灯亮 */
       if (ValBit(FlashCntr2,5))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -