/****************************************************************************** 版权所有: 文件名称: led.c 文件版本: 01.01 创建作者: xxxxxx 创建日期: 2013-05-29 功能说明: LED处理程序 其它说明: 修改记录: */ /*------------------------------- 头文件 -------------------------------------- */ #include "head.h" /*------------------------------- 宏定义 -------------------------------------- */ #define LED_NULL (-1) #define EWEN_TEST //临时测试用 #ifndef EWEN_TEST #define QUICK_FLASH 20 // 5Hz, 亮100ms,灭100ms。5ms一次,20次为100ms #define SLOW_FLASH 100 // 1Hz, 亮0.5s,灭0.5s #else #define QUICK_FLASH 100 // 5Hz, 亮100ms,灭100ms。5ms一次,20次为100ms #define SLOW_FLASH 500 // 1Hz, 亮0.5s,灭0.5s #endif /*------------------------------ 类型结构 ------------------------------------- */ // 开出类型灯控制结构体 struct kc_led_st { u8 slow_flag; // 慢闪总标志 u8 quick_flag; // 快闪总标志 u32 slow_t; // 慢闪计数 u32 quick_t; // 快闪计数 }; /*------------------------------ 全局变量 ------------------------------------- */ struct kc_led_st g_kc_led; /*------------------------------ 函数声明 ------------------------------------- */ static int _led_kc_op(int i); /*------------------------------ 外部函数 ------------------------------------- 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性. */ // 通讯灯 static int _led_comm(void) { #ifdef CN_AREA_GUANGXI if(FUN_YX_SEND_YB) //检修压板投入,通信灯常亮 led_set_pub(PUB_LED_COMM, LED_ON); #else if(g_run_stu.bjx) //检修压板投入,通信灯常亮 led_set_pub(PUB_LED_COMM, LED_ON); #endif switch(g_led_stu[0][PUB_LED_COMM]) { case LED_ON: GPIO_LED_COMM_ON(); break; case LED_OFF: GPIO_LED_COMM_OFF();; break; } return 0; } //动作灯 static int _led_act(void) { switch(g_led_stu[0][PUB_LED_DZ]) { case LED_ON: GPIO_LED_ACT_ON(); break; case LED_OFF: GPIO_LED_ACT_OFF();; break; case LED_SLOW: if (g_kc_led.slow_t == 0) { if(GPIO_LED_ACT_STATUS()) { GPIO_LED_ACT_OFF();; } else { GPIO_LED_ACT_ON(); } } break; case LED_QUICK: if (g_kc_led.quick_t == 0) { if(GPIO_LED_ACT_STATUS()) { GPIO_LED_ACT_OFF();; } else { GPIO_LED_ACT_ON(); } } break; } return 0; } static int _led_kc_op(int i) { int channel; // 先将板卡的索引转换为开出函数的索引 channel = equ_get_do_channel(i); switch(g_led_stu[g_led_slot[EQU_SLOT_KZ].sn[i].sw][g_led_slot[EQU_SLOT_KZ].sn[i].no]) { case LED_ON: dido_do_kz(1, channel); break; case LED_OFF: dido_do_kz(0, channel); break; case LED_SLOW: if (g_kc_led.slow_t == SLOW_FLASH) { dido_do_kz(!g_kc_led.slow_flag, channel); } break; case LED_QUICK: if (g_kc_led.quick_t == QUICK_FLASH) { dido_do_kz(!g_kc_led.quick_flag, channel); } break; } return 0; } /****************************************************************************** 函数名称: led_polling_5ms 函数版本: 01.01 创建作者: xxxxxx 创建日期: 2014-12-16 函数说明: 设置开出类型LED灯的状态 参数说明: led: 灯的序号 status: 灯的状态 LED_ON, LED_SLOW, LED_QUICK, LED_OFF 返回值: 无 修改记录: */ int led_polling_5ms(void) { int i; // 遍历所有灯 for (i=0; i