#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; } } 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; } #if 1 void L1_relay_on(vU8 n,vU8 val) { U8 i = 0; for(i=0;i> i) & 0x1) { // L1_relay_on(i,((val >> i) & 0x1 == PROTO_RELAY_KAI ? RELAY_KAI : RELAY_BI)); L1_relay_on(i, val >> i & 0x1); } } } } 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); //闭合 } //全关(断开) 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