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

📄 ports.c

📁 完整的空调控制器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************** (c) 2005   佛山菱电 *****************************************
PROJECT  : AUX VRV
COMPILER : AVR GCC/ICC
MODULE   : ports.c
VERSION  : 1.0.0
DATE     : 2006/01/03
AUTHOR   : 朱坤
DESCRIPTION :   I/O routines

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

u8 SWTime;                   /* 按键时间 */
u8 Key_State;                /* status of key panel */
u8 DebounceButton;           /* 按键反弹延时 100mS On 4mS */
u8 LtdSwOnCntr;              /* 房卡检测计数 */
u8 ChkLtdSwCntr;             /* 房卡检测计时 */

#if (NJTYPE == 2)
#elif (NJTYPE == 5)
u8 SWBuf;                    /* 按键缓冲 */
u8 KeyGet;
u8 SWState;                  /* 按键状态 */
u8 SWRptBuf;                 /* 重复按键 */
#define SW8    ((u8)0x80)
#define SW7    ((u8)0x40)
#define SW6    ((u8)0x20)    /* MODE */
#define SW5    ((u8)0x10)    /* SPEED */
#define SW4    ((u8)0x08)    /* Down - */
#define SW3    ((u8)0x04)    /* On/Off */
#define SW2    ((u8)0x02)    /* Up + */
#define SW1    ((u8)0x01)    /* 扫风 */
#define SWSwing SW1
#define SWUp    SW2
#define SWOnOff SW3
#define SWDown  SW4
#define SWFan   SW5
#define SWMode  SW6

/* A(0) -> C(2) ->  D(3) ->  H(1) */
const u8 md_Tab[] = {MODECOOL,MODEAUTO,MODEDRY,MODEHEAT};
#endif
/*-----------------------------------------------------------------------------
ROUTINE NAME : PORTS_Init
INPUT/OUTPUT : None

DESCRIPTION  : Configure the ports

COMMENTS     :
-----------------------------------------------------------------------------*/
void PORTS_Init(void)
{
   u8 i;
#if (NJTYPE == 0) ||(NJTYPE == 1)
   /* AUX 吸顶 */
   PORTA = 0x0F0;
   PORTB = 0x00;
   PORTC = 0x1F;
#ifdef EnPGFENGJI
#ifdef EnSTYLE5
   PORTD = 0x0F7;  //Tx 初始为高电位
#else
   PORTD = 0x0F5;  //Tx 初始为低电位
#endif
#else /* EnPGFENGJI */
#ifdef EnSTYLE5
   PORTD = 0x47;  //Tx 初始为高电位
#else
   PORTD = 0x45;  //Tx 初始为低电位
#endif
#endif /* EnPGFENGJI */
#elif (NJTYPE == 2) ||(NJTYPE == 3)
   /* AUX 挂机 */
   PORTA = 0x0F0;
   PORTB = 0x00;
   PORTC = 0x1F;
#ifdef EnPGFENGJI
#ifdef EnSTYLE5
   PORTD = 0x0F7;  //Tx 初始为高电位
#else
   PORTD = 0x0F5;  //Tx 初始为低电位
#endif
#else /* EnPGFENGJI */
#ifdef EnSTYLE5
   PORTD = 0x47;  //Tx 初始为高电位
#else
   PORTD = 0x45;  //Tx 初始为低电位
#endif
#endif /* EnPGFENGJI */
#elif (NJTYPE == 4)
   /* AUX 挂机 */
   PORTA = 0x80;
   PORTB = 0x00;
   PORTC = 0x1F;
#ifdef EnPGFENGJI
#ifdef EnSTYLE5
   PORTD = 0x0F3;  //Tx 初始为高电位
#else
   PORTD = 0x0F1;  //Tx 初始为低电位
#endif
#else /* EnPGFENGJI */
#ifdef EnSTYLE5
   PORTD = 0x43;  //Tx 初始为高电位
#else
   PORTD = 0x41;  //Tx 初始为低电位
#endif
#endif /* EnPGFENGJI */
#elif (NJTYPE == 5)
   /* 柜机 */
   PORTA = 0x00;
   PORTB = 0x03;
   PORTC = 0x1F;
#ifdef EnPGFENGJI
#ifdef EnSTYLE5
   PORTD = 0x0F3;  //Tx 初始为高电位
#else
   PORTD = 0x0F1;  //Tx 初始为低电位
#endif
#else  /* EnPGFENGJI */
#ifdef EnSTYLE5
   PORTD = 0x43;  //Tx 初始为高电位
#else
   PORTD = 0x41;  //Tx 初始为低电位
#endif
#endif /* EnPGFENGJI */
#endif /* NJTYPE */

   PORTS_Ref();
   //pdJP1  &= (u8)~(1<<pbJP1);
   pdLCTx &= (u8)~(1<<pbLCTx);
   i = 200;
   while(i--);

   //if ((ValBit(pJP1,pbJP1)) ||
   //    (ValBit(pJP1,pbJP1))){
   //  SetBit(Sysflag1,fStepMotor);  /* 1: 步进电机驱动风门 */
   //}

   //if ((!ValBit(pLCTx,pbLCTx)) &&
   //    (!ValBit(pLCTx,pbLCTx))){
   //  SetBit(Sysflag1,f1XK_YK); /* 1: 线控器,0:遥控器 */
   //  ClrBit(pLCTx,pbLCTx);     //线控器,LCTx 初始为低电位
   //}
}

void PORTS_Ref(void)
{
   SPCR = 0x00;            /* 禁止 SPI */
   TWCR = 0x00;            /* 禁止 SWI */
   //ACSR = 0x80;            /* Analog Comparator Switch Off */
#if (NJTYPE == 0) ||(NJTYPE == 1)
   /* AUX 吸顶 */
   DDRA = 0x00;
   DDRB = 0x0FF;
   DDRC = 0x0EB;
#elif (NJTYPE == 2) ||(NJTYPE == 3)
   /* AUX 挂机 */
   DDRA = 0x00;
   DDRB = 0x0FF;
   DDRC = 0x0EB;
#elif (NJTYPE == 4)
   /* AUX 挂机 */
   DDRA = 0x00;
   DDRB = 0x0FF;
   DDRC = 0x0E3;
#elif (NJTYPE == 5)
   /* 柜机 */
   DDRA = 0x0F0;
   DDRB = 0x0FC;
   DDRC = 0x0EB;
#endif /* NJTYPE */
#ifdef EnPGFENGJI
   DDRD = 0x01E; //Tx 初始为高电位
#else  /* EnPGFENGJI */
   DDRD = 0x0BE; //Tx 初始为高电位
#endif /* EnPGFENGJI */
}

/*-----------------------------------------------------------------------------
ROUTINE NAME : Get_JP

INPUT/OUTPUT :

DESCRIPTION  :
 1、读入配置开关值
 2、读入房卡开关状态

COMMENTS     :
 本过程,每4mS被调用一次
-----------------------------------------------------------------------------*/
void Get_JP(void)
{
#ifndef EnSTYLE5
   //if (ValBit(pJP1,pbJP1)){            /* JP1 */
   //  SetBit(SysConfig,fEnMemo);        /* JP1 断开,允许掉电记忆  */
   //} else {
   //  ClrBit(SysConfig,fEnMemo);        /* JP1 短接,无掉电记忆  */
   //}
#endif /* EnSTYLE5 */
   /* 房卡监测输入, 断开:不允许系统开机 */
#if 0
   if (!ValBit(pJPFC,pbJPFC)) ++LtdSwOnCntr;
   if (++ChkLtdSwCntr > 100){
      if ( LtdSwOnCntr > 15){
        ClrBit(Errorflg2,fLtdSwSt);  /* 房卡状态 1:断开 */
        ClrBit(RunMode,fLtdSwOn);
      } else {
        SetBit(Errorflg2,fLtdSwSt);  /* 房卡状态 1:断开 */
        SetBit(RunMode,fLtdSwOn);
      }
      ChkLtdSwCntr = LtdSwOnCntr = 0;
   }
#else
   ClrBit(RunMode,fLtdSwOn);
#endif
}

#if (NJTYPE == 0)||(NJTYPE == 1)
void SetOnOff(u8 KeyState)
{
   if (DebounceButton == 0) {
     Key_State = KeyState;
     if (ValBit(RunMode,fSysOnOff)){
       TurnSysOff();
       /* 清除定时关标志 */
       SlpTmFlag &= (u8)((1<<bb4ms)|(1<<bb2s)|(1<<fTime));
     } else{
       TurnSysOn();
       if (KeyState == KEY_QZIDLE_NEXT){
         SetMode(MODECOOL);
       } else {
         SetMode(MODEAUTO);
       }
       SetupTp = 0x98;             /* 设定温度 24℃  */
       ClrBit(SlpTmFlag,fTime);
       FanStatus = FANAUTO_S;
       SetFDoorUnit(SWINGAUTO);
     }
   }
}
#endif

/*-----------------------------------------------------------------------------
ROUTINE Name :  Key_Scan
Description  :

   本过程,每4mS被调用一次
-----------------------------------------------------------------------------*/
void Key_Scan(void)
{

#if (NJTYPE == 0)||(NJTYPE == 1)
   /* 按键反弹延时 */
   if (DebounceButton != 0) DebounceButton--;
   switch(Key_State){
#if (NJTYPE == 1)
     case KEY_PUSHED:
       if (!ValBit(pBUTTON,pbBUTTON)){
         SetOnOff(KEY_IDLE_NEXT);
       } else {
         if (ValBit(Sysflag1,f1XK_YK)){ /* 1: 线控器,0:遥控器 */
           Key_State = KEY_IDLE;

⌨️ 快捷键说明

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