|
|
|
#include "bsp_relay.h"
|
|
|
|
#include "../msp/pwm.h"
|
|
|
|
#include "../app/app_paraid.h"
|
|
|
|
|
|
|
|
#if 0 //可惜sbit不能作为参数值
|
|
|
|
U8 g_relay_data[RELAY_NUM][2] =
|
|
|
|
{
|
|
|
|
RELAY_PRINTER, ULN1B,
|
|
|
|
RELAY_PC, ULN2B,
|
|
|
|
RELAY_LED, ULN3B,
|
|
|
|
RELAY_LED_FUYIN, ULN4B,
|
|
|
|
RELAY_LED_RENXIANG, ULN5B,
|
|
|
|
RELAY_12V_RESV, 5ULN6B,
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void _ULN1B_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
ULN1B = oper;
|
|
|
|
}
|
|
|
|
void _ULN2B_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
ULN2B = oper;
|
|
|
|
}
|
|
|
|
void _ULN3B_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
ULN3B = oper;
|
|
|
|
}
|
|
|
|
void _ULN4B_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
ULN4B = oper;
|
|
|
|
}
|
|
|
|
void _ULN5B_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
ULN5B = oper;
|
|
|
|
}
|
|
|
|
void _ULN6B_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
ULN6B = oper;
|
|
|
|
}
|
|
|
|
void _ULN8B_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
ULN8B = oper;
|
|
|
|
}
|
|
|
|
|
|
|
|
void _CBC_HANDLER(U8 oper)
|
|
|
|
{
|
|
|
|
switch(oper)
|
|
|
|
{
|
|
|
|
case RELAY_KAI:
|
|
|
|
D_pwer12_off();
|
|
|
|
break;
|
|
|
|
case RELAY_BI:
|
|
|
|
D_pwer12_on();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
struct _s_relay_oper s_relay_oper[RELAY_NUM] =
|
|
|
|
{
|
|
|
|
//status这里全部为RELAY_BI,如果系统看门狗重启,值会保存在flash_page0,从而读取设定
|
|
|
|
//oper_max_time这里全部为0,真实值由flash->page1设定
|
|
|
|
//relay_name, relay_handler, initital, status, oper_max_time, oper_stmp
|
|
|
|
{RELAY_PRINTER, _ULN1B_HANDLER, RELAY_BI, RELAY_BI, 0, 0}, //常闭
|
|
|
|
{RELAY_PC, _ULN2B_HANDLER, RELAY_KAI, RELAY_KAI, 0, 0}, //常开
|
|
|
|
{RELAY_LED, _ULN3B_HANDLER, RELAY_BI, RELAY_BI, 0, 0}, //常闭
|
|
|
|
{RELAY_LED_FUYIN, _ULN4B_HANDLER, RELAY_KAI, RELAY_KAI, 0, 0}, //常开
|
|
|
|
{RELAY_LED_RENXIANG,_ULN5B_HANDLER, RELAY_KAI, RELAY_KAI, 0, 0}, //常开
|
|
|
|
{RELAY_12V_RESV, _ULN6B_HANDLER, RELAY_BI, RELAY_BI, 0, 0},
|
|
|
|
{RELAY_PRINTER_1, _ULN8B_HANDLER, RELAY_BI, RELAY_BI, 0, 0}, //常闭
|
|
|
|
{RELAY_CBC, _CBC_HANDLER, RELAY_NONE, RELAY_NONE, 0, 0}, //无常闭常开特性
|
|
|
|
};
|
|
|
|
|
|
|
|
U8 L2_relay_convert_and_do(int i,int val)
|
|
|
|
{
|
|
|
|
U8 oper = val;
|
|
|
|
if(s_relay_oper[i].relay_initial == RELAY_BI) //常闭
|
|
|
|
{
|
|
|
|
oper = val;
|
|
|
|
}
|
|
|
|
else if(s_relay_oper[i].relay_initial == RELAY_KAI) //常开
|
|
|
|
{
|
|
|
|
oper = !val;
|
|
|
|
}
|
|
|
|
return oper;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
void L1_relay_on(vU8 n,vU8 val)
|
|
|
|
{
|
|
|
|
U8 i = 0;
|
|
|
|
for(i=0;i<RELAY_NUM;i++)
|
|
|
|
{
|
|
|
|
if(s_relay_oper[i].relay == n)
|
|
|
|
{
|
|
|
|
if(n == RELAY_PC) //PC属于按键,每次发送指令 都代表按下(断开)
|
|
|
|
{
|
|
|
|
if(val == RELAY_KAI)
|
|
|
|
{
|
|
|
|
s_task_relay.pc = PC_GUANJI;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
s_task_relay.pc = PC_KAIJI;
|
|
|
|
}
|
|
|
|
s_task_relay.pc_stmp = s_nos_tick.t_1s;
|
|
|
|
val = RELAY_BI; //短路
|
|
|
|
}
|
|
|
|
s_relay_oper[i].relay_handler(L2_relay_convert_and_do(i,val));
|
|
|
|
s_relay_oper[i].relay_status = val;
|
|
|
|
s_relay_oper[i].relay_oper_stmp = s_nos_tick.t_1s;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//#else
|
|
|
|
void L1_relay_on(vU8 n,vU8 val)
|
|
|
|
{
|
|
|
|
U8 i = 0;
|
|
|
|
for(i=0;i<RELAY_NUM;i++)
|
|
|
|
{
|
|
|
|
if(s_relay_oper[i].relay == n)
|
|
|
|
{
|
|
|
|
#ifdef BOARD_MAIN04_GM35
|
|
|
|
if(n == RELAY_PC) //PC属于按键,每次发送指令 都代表按下(断开)
|
|
|
|
{
|
|
|
|
if(val == RELAY_KAI)
|
|
|
|
{
|
|
|
|
s_task_relay.pc = PC_GUANJI;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
s_task_relay.pc = PC_KAIJI;
|
|
|
|
}
|
|
|
|
s_task_relay.pc_stmp = s_nos_tick.t_1s;
|
|
|
|
val = RELAY_KAI;
|
|
|
|
}
|
|
|
|
#elif defined BOARD_MAIN03_A9
|
|
|
|
//xxx
|
|
|
|
#endif
|
|
|
|
if(n == RELAY_12V_RESV) //12v继电器保留,暂不工作,以减少功率
|
|
|
|
{
|
|
|
|
val = s_relay_oper[i].relay_initial;
|
|
|
|
}
|
|
|
|
s_relay_oper[i].relay_handler(val);
|
|
|
|
s_relay_oper[i].relay_status = val;
|
|
|
|
s_relay_oper[i].relay_oper_stmp = s_nos_tick.t_1s;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
void L2_do_relay(U8 *buf)
|
|
|
|
{
|
|
|
|
U8 val = buf[0], index = buf[1] ,i = 0;
|
|
|
|
|
|
|
|
if(index == 0xFF) //操作所有继电器
|
|
|
|
{
|
|
|
|
if(val == RELAY_BI)
|
|
|
|
{
|
|
|
|
L2_relay_poweron_all();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
L2_relay_poweroff_all();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for(i=0;i<RELAY_NUM;i++)
|
|
|
|
{
|
|
|
|
if((index >> i) & 0x1)
|
|
|
|
{
|
|
|
|
// L1_relay_on(i,((val >> i) & 0x1 == PROTO_RELAY_KAI ? RELAY_KAI : RELAY_BI));
|
|
|
|
L1_relay_on(i, val >> i & 0x1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
//全关(断开)
|
|
|
|
void L2_relay_poweroff_all(void)
|
|
|
|
{
|
|
|
|
_CBC_HANDLER(RELAY_KAI);
|
|
|
|
L1_relay_on(RELAY_PC, RELAY_KAI);
|
|
|
|
L1_relay_on(RELAY_PRINTER, RELAY_KAI);
|
|
|
|
L1_relay_on(RELAY_PRINTER_1, RELAY_KAI);
|
|
|
|
}
|
|
|
|
|
|
|
|
void L2_relay_poweron_all(void)
|
|
|
|
{
|
|
|
|
U8 i = 0;
|
|
|
|
_CBC_HANDLER(RELAY_BI);
|
|
|
|
for(i=0;i<RELAY_NUM;i++)
|
|
|
|
{
|
|
|
|
if(s_relay_oper[i].relay == RELAY_CBC)
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
else if(s_relay_oper[i].relay == RELAY_PC)
|
|
|
|
{
|
|
|
|
//开机,短路2-3s
|
|
|
|
L1_relay_on(s_relay_oper[i].relay, RELAY_BI);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
L1_relay_on(s_relay_oper[i].relay, s_relay_oper[i].relay_initial);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
void L2_relay_init(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
ULN1B = 0;
|
|
|
|
ULN2B = 0;
|
|
|
|
ULN3B = 0;
|
|
|
|
ULN4B = 0;
|
|
|
|
ULN5B = 0;
|
|
|
|
ULN6B = 0;
|
|
|
|
ULN8B = 0;
|
|
|
|
_CBC_HANDLER(RELAY_BI); //闭合
|
|
|
|
//set output
|
|
|
|
|
|
|
|
BITN_0(P1M1,BITN5);BITN_1(P1M0,BITN5);
|
|
|
|
BITN_0(P6M1,BITN2);BITN_1(P6M0,BITN2);
|
|
|
|
BITN_0(P6M1,BITN1);BITN_1(P6M0,BITN1);
|
|
|
|
BITN_0(P6M1,BITN0);BITN_1(P6M0,BITN0);
|
|
|
|
BITN_0(P1M1,BITN3);BITN_1(P1M0,BITN3);
|
|
|
|
BITN_0(P1M1,BITN4);BITN_1(P1M0,BITN4);
|
|
|
|
BITN_0(P4M1,BITN4);BITN_1(P4M0,BITN4);
|
|
|
|
|
|
|
|
|
|
|
|
//继电器上电初始化 继电器 1响应,0恢复默认状态(常开 or 常闭)
|
|
|
|
ULN1B = 0;
|
|
|
|
ULN2B = 0;
|
|
|
|
ULN3B = 0;
|
|
|
|
ULN4B = 0;
|
|
|
|
ULN5B = 0;
|
|
|
|
ULN6B = 0;
|
|
|
|
ULN8B = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BITN_0(P6M1,BITN4);BITN_1(P6M0,BITN4);
|
|
|
|
BITN_0(P6M1,BITN5);BITN_1(P6M0,BITN5);
|
|
|
|
_CBC_HANDLER(RELAY_BI); //闭合
|
|
|
|
}
|