📄 led.c
字号:
/**************** (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 + -