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

📄 lcd.c

📁 简易风盘控器程序 AVR GCC MEGA8
💻 C
字号:
/**************** (c) 2005   佛山菱电 *****************************************
PROJECT  : 简易风盘控制器
COMPILER : AVR ICC for m48
MODULE   : lcd.c
VERSION  : 1.0.0
DATE     : 2005/12/12
AUTHOR   : 朱坤
DESCRIPTION :   LCD 显示处理处理

MODIFICATIONS :
******************************************************************************/
#include <avr/io.h>
#include <avr/wdt.h>
#include "lib.h"
#include "version.h"

#include "ports.h"
#include "timer.h"
#include "main.h"
#include "fan.h"
#include "lcd.h"
#include "adc.h"
#include "i2c.h"
#include "scom.h"

#ifdef LEDDISP

//u8 DispDlyCnt;           /* 模式确认延时 */
u8 FlashCntr;            /* LED 显示错误码计时 */
u8 FlashErrNo;           /* 错误显示序号 */
u8 FlashErrCnt;          /* 错误显示循环时间 */
u8 LCDBuf[4];            /* LCD 显示缓冲区 */
u8 BkgLamp;              /* 背光时间 */
u8 ShiftCnt;
u8 LeafCnt;              /* */
u8 ChkLcdCnt;

u8 LCDState;             /* 显示状态 */
u8 CanShuNoTm;           /* 显示参数编号时间 - 为 0 时显示参数值,否则显示参数编号 */
u8 CanShuNo;             /* 当前显示参数编号 */
u8 LCDTimeCount;         /* 显示持续时间 */

const unsigned char TabSeg[]={ /* fgeh abcd| */
        0x0AF,                 /* 1010 1111|0 */
        0x06,                  /* 0000 0110|1 */
        0x6D,                  /* 0111 1101|2 */
        0x4F,                  /* 0100 1111|3 */
        0x0C6,                 /* 1100 0110|4 */
        0x0CB,                 /* 1100 1011|5 */
        0x0EB,                 /* 1110 1011|6 */
        0x0E,                  /* 0000 1110|7 */
        0x0EF,                 /* 1110 111f|8 */
        0x0CF,                 /* 1100 1111|9 */
        0x0EE,                 /* 1110 1110|a */
        0x0E3,                 /* 1110 1001|b */
        0x0a9,                 /* 1010 1001|c */
        0x67,                  /* 0110 0111|d */
        0x0e9,                 /* 1110 1001|e */
        0x0E8};                /* 1110 1000|f */

const u8 ErrNo[] = {58,     /* fAmbientErr ((u8)0) 室温传感器 */
                    61,     /* fTubeInErr  ((u8)1) 盘管传感器 */
                    59,     /* fTubeMidErr ((u8)2) */
                    62,     /* fTubeOutErr ((u8)3) */
                    63,     /* fRsAddrErr  ((u8)4) 1: 内机地址冲突 */
                    65,     /* fPGErr      ((u8)5) 1: PG风机故障 */
                    56,     /* fSComErr    ((u8)6) 1: 内机与外机通信故障 */
                    66};    /* fLtdSwSt    ((u8)7) 1: 房卡断开 */

/* 风速显示 */
const u8 LeafDly_Tab[] ={30,50,25,15};       /* 120mS, 200mS, 100mS, 60mS */
const u8 fl_Tab[] = {0x00,0x30,0x0f1,0x0ff}; /* 风机风速显示 */
/* 确认 CS 为低 */
void WrLCD(u8 Dat,u8 Bitn)
{
  while (Bitn-- != 0){
   ClrWR_HT1621();
   if (ValBit(Dat,7)) {
     SetDATA_HT1621();
   } else {
     ClrDATA_HT1621();
   }
   Dat <<= 1;   /* MSB */
   NOP();
   SetWR_HT1621();
  }
}

/* LED 显示, 每 4mS 执行一次 */
void LcdDisp_Sub(void)
{
  u8 i;

  /* LCD 显示定时 */
  if (++FlashCntr >= 250) FlashCntr = 0;

  if (ChkLcdCnt != 0){            /* 检查延时 */
    /* 全部点亮3秒 */
    LCDBuf[0] = 0x0FF;
    LCDBuf[1] = 0x0FF;
    LCDBuf[2] = 0x0FF;
    LCDBuf[3] = 0x0FF;
  } else {
    /* 清除 */
    LCDBuf[0] = 0x00;
    LCDBuf[1] = 0x00;
    LCDBuf[2] = 0x00;
    LCDBuf[3] = 0x00;

    if (LCDState == 1){              /* 显示设定温度 */
      //if (ValBit(Sysflag,fContinue)){
      //  LCDBuf[2] = 0x40;
      //  LCDBuf[3] = 0x40;          /* -- */
      //} else {
//#ifndef DEBUG
        i = (u8)(SetupTp - 0x80);
        LCDBuf[3] = (u8)(TabSeg[(u8)(i / 10)]);
        LCDBuf[2] = (u8)(TabSeg[(u8)(i % 10)]);
        SetBit(LCDBuf[0],1);         /* 温标 */
//#else     /* DEBUG */
//      LCDBuf[3] = (u8)(TabSeg[(u8)(SetupTp >> 4)]);
//      LCDBuf[2] = (u8)(TabSeg[(u8)(SetupTp & 0x0f)]);
//#endif
      //}
      SetBit(LCDBuf[3],4);           /* '设定温度' */
#ifdef MONITOR
    } else if (LCDState == 2){       /* 显示参数: 先显示参数编号,再显示参数数值 */
      if (CanShuNoTm-- != 0){        /* 显示参数编号,高位的 f 点亮指示地址 */
        if (CanShuNo < 10){
          LCDBuf[3] = (u8)0x80;
          LCDBuf[2] = (u8)(TabSeg[CanShuNo]);
        } else {
          LCDBuf[3] = (u8)0x86;
          LCDBuf[2] = (u8)(TabSeg[CanShuNo - 10]);
        }
      } else {                       /* 参数值用 16 进制显示 */
        LCDBuf[3] = (u8)(TabSeg[(u8)(XianShiCanShu[CanShuNo] >> 4)]);
        LCDBuf[2] = (u8)(TabSeg[(u8)(XianShiCanShu[CanShuNo] & 0x0f)]);
      }
    } else if (LCDState == 3){       /* 显示调整参数: 先显示参数编号,再显示参数数值 */
      if (CanShuNoTm-- != 0){        /* 显示参数编号,高位的 e 点亮指示地址 */
        if (CanShuNo < 10){
          LCDBuf[3] = (u8)0x20;
          LCDBuf[2] = (u8)(TabSeg[CanShuNo]);
        } else {
          LCDBuf[3] = (u8)0x26;
          LCDBuf[2] = (u8)(TabSeg[CanShuNo - 10]);
        }
      } else {                       /* 参数值用 16 进制显示 */
        LCDBuf[3] = (u8)(TabSeg[(u8)(WaiJiShuJu[CanShuNo] >> 4)]);
        LCDBuf[2] = (u8)(TabSeg[(u8)(WaiJiShuJu[CanShuNo] & 0x0f)]);
      }
#endif
    } else {
      if ((Errorflg|
           OutSideErr) != 0){
        if (FlashCntr >= 120){    /* 故障代码闪烁 */
          if (FlashErrCnt == 0){
            FlashErrCnt = 150;    /* 3s On 20mS */
            while (1){
              if (++FlashErrNo >= 0x09) FlashErrNo = 0;
              if (FlashErrNo < 0x08){
                if ((u8)(Errorflg & BitMask[FlashErrNo]) != 0) break;
              } else if (OutSideErr != 0) break;
            }
          }

          i = ErrNo[FlashErrNo];
          if (FlashErrNo == 0x08){
            if ((i = OutSideErr) > 99) i = 99; /* 超过 99 的都显示为 99 */
          }
          LCDBuf[3] = TabSeg[(u8)(i / 10)];
          LCDBuf[2] = TabSeg[(u8)(i % 10)];
        }
      } else {
        if (AmbientTp >= 0x80){   /* 显示室温 Tr */
          i = (u8)(AmbientTp - 0x80);
          LCDBuf[3] = TabSeg[(u8)(i / 10)];
          LCDBuf[2] = TabSeg[(u8)(i % 10)];
        } else {
          i = (u8)(0x80 - AmbientTp);
    #if 1
          if (i >= 9) i = 9;
          LCDBuf[3] = 0x40;         /* '-' */
          LCDBuf[2] = TabSeg[i];
    #else
          if (i <= 9){
            LCDBuf[3] = 0x40;       /* '-' */
            LCDBuf[2] = TabSeg[i];
          } else if (i <= 19){
            LCDBuf[3] = 0x46;       /* '-1' */
            LCDBuf[2] = TabSeg[(u8)(i-10)];
          } else {
            LCDBuf[3] = 0x46;       /* '-19' */
            LCDBuf[2] =  0x0CF;
          }
    #endif
        }
        SetBit((LCDBuf[2]),4);      /* '房间温度' */
        SetBit(LCDBuf[0],1);        /* 温标 */
      }
    }

    i = (u8)(RunMode & 0x03);
    /* 显示模式,外机不允许时闪烁 */
    if (ValBit(RunMode,fSysOnOff)||(SWTime != 0)){
      SetBit((LCDBuf[0]),7);        /* 运行 */
      if (ValBit(OutDevStu,fRunEnable) ||
          ValBit(SlpTmFlag,bb2s)){
        if (i == 0x01){
          SetBit((LCDBuf[0]),6);    /* 制热 */
        } else if (i > 0x01){
          SetBit((LCDBuf[0]),4);    /* 制冷 除湿*/
        }
      }

      if (i == MODEHEAT){
        /* 电加热 */
        if (!ValBit(SysConfig,fDisHeat)) SetBit((LCDBuf[0]),5);
        /* 化霜 */
        if (ValBit(OutDevStu,fOutDeforst)) SetBit((LCDBuf[0]),3);
      }

      /* 设定风速 */
      LCDBuf[1] = fl_Tab[FanStatus & 0x03];
      /* 运行风速 */
      if (ValBit(FanStatus,fFanCtrlBit)){
        if (ShiftCnt-- == 0){
          ShiftCnt = LeafDly_Tab[(u8)((FanStatus >> 4) & 0x03)];
          ++LeafCnt;
        }
        if ((LeafCnt & 0x01) == 0){
          LCDBuf[0] |= 0x01;
        } else {
          LCDBuf[0] |= 0x04;
        }
      } else {
        LCDBuf[0] |= 0x05;
      }
    }
  }

  //SetCS_HT1621();
  //NOP();
  //NOP();
  //NOP();
  //NOP();
  ClrCS_HT1621();
  WrLCD(0x80,3);                 /* 100 */
  WrLCD(0x01,9);                 /* SYS EN */
  WrLCD(0x18,9);                 /* RC 256K */
  WrLCD(0x29,9);                 /* BIAS 1/3, 1/4 */
  WrLCD(0x03,9);                 /* LCD ON */
  //WrLCD(0x40,9);                 /* TONE 4K */
  //if (BkgLamp != 0){
  //  WrLCD(0x09,9);               /* TONE ON */
  //} else {
  //  WrLCD(0x08,9);               /* TONE OFF */
  //}

  SetCS_HT1621();
  /* 背光处理 */
  if (BkgLamp != 0){
    LCD_BK_On();
  } else {
    LCD_BK_Off();
  }
  ClrCS_HT1621();
  WrLCD(0x0A3,9);                /* 101 000110 起始地址 */
  for (i = 0; i < 4; i++){
    WrLCD(LCDBuf[i],8);          /* 输出数据 */
  }
  SetCS_HT1621();
}
#endif

/*** (c) 2005  佛山菱电 **************************** END OF FILE *************/

⌨️ 快捷键说明

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