void TurnOffLed(void) { u_char i = 0; while (stProJudgeTab[i].uIDcode != INVALD_CODE) { if (stProJudgeTab[i].uIDcode != AUTOCLOSE_CODE) { if ((((tpProOutBuff *)stProJudgeTab[i].pOutputBuff)->cOutState & CREVERT) == CREVERT) //保护已复归 { LedOperate(((tpProOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum1, LED_OFF); LedOperate(((tpProOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum2, LED_OFF); } } if (stProJudgeTab[i].uIDcode == AUTOCLOSE_CODE) { if (((tpCloseOutBuff *)stProJudgeTab[i].pOutputBuff)->cOutState == FALSE) // { LedOperate(((tpCloseOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum1, LED_OFF); LedOperate(((tpCloseOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum2, LED_OFF); } } i++; } LedOperate(9, LED_OFF); }
时间: 2024-04-19 13:29:01 浏览: 6
这段代码是一个函数 `TurnOffLed`,用于关闭LED灯。函数中的逻辑如下:
1. 初始化变量 `i` 为 0。
2. 进入循环,判断 `stProJudgeTab[i].uIDcode` 是否等于 `INVALD_CODE`,如果不等于,则继续执行。
3. 如果 `stProJudgeTab[i].uIDcode` 不等于 `AUTOCLOSE_CODE`,则进入条件判断。
4. 判断条件为:如果 `((tpProOutBuff *)stProJudgeTab[i].pOutputBuff)->cOutState & CREVERT` 等于 `CREVERT`,则进入条件判断体。
5. 在条件判断体中,调用 `LedOperate` 函数,将 `((tpProOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum1` 和 `((tpProOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum2` 的LED灯状态设置为 `LED_OFF`。
6. 如果 `stProJudgeTab[i].uIDcode` 等于 `AUTOCLOSE_CODE`,则进入条件判断。
7. 判断条件为:如果 `((tpCloseOutBuff *)stProJudgeTab[i].pOutputBuff)->cOutState` 等于 `FALSE`,则进入条件判断体。
8. 在条件判断体中,调用 `LedOperate` 函数,将 `((tpCloseOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum1` 和 `((tpCloseOutBuff*)stProJudgeTab[i].pOutputBuff)->cLedNum2` 的LED灯状态设置为 `LED_OFF`。
9. 递增变量 `i`。
10. 循环回到第2步,直到 `stProJudgeTab[i].uIDcode` 等于 `INVALD_CODE`。
11. 最后调用 `LedOperate` 函数,将LED灯号为9的状态设置为 `LED_OFF`。
这段代码的作用是遍历一个名为 `stProJudgeTab` 的数据表,根据不同条件关闭相应的LED灯。