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

📄 main.c

📁 内容摘要: LHD6000主板主芯片程序 ISD1730时序说明: 参考:void Send_1Byte(uchar ucData_s)和uchar Receive_1Byte(void)的说明.
💻 C
📖 第 1 页 / 共 5 页
字号:
                    for(;KB_RECV_BUFF_LEN > ucTmp_PKBMsg; ucTmp_PKBMsg++)
                    {
                        g_aucKBRecvdBuff[ucTmp_PKBMsg] = 0xFF;
                    }
                    //正确就写入24C04
                    if (FlagKBExeOK)   //写入电话号码,g_aucKBRecvdBuff[4]~g_aucKBRecvdBuff[9]
                    {
                        ClrWdt();
                        if (BYTES_PER_TEL != PageWrite(g_aucKBRecvdBuff + 4, uiAdd_PKBMsg, BYTES_PER_TEL))
                        {
                            FlagKBExeOK = 0;
                            break;
                        }
                        ucTmp_PKBMsg = g_ucTelExist;
                        if (0 != g_aucKBRecvdBuff[4])
                        {
                            /*if (0 == (g_ucTelExist&0x01)) //新设号码将拨不接警中心 // !!!! .
                            {
                                g_ucAdemcoEvts = 0;
                            }*/
                            g_ucTelExist |= (0x01 << (g_aucKBRecvdBuff[3]-1));
                            //if (1 == g_aucKBRecvdBuff[3])
                            {
                                //g_FlagAdmFail = 0;
                            }
                        }
                        else
                        {
                            g_ucTelExist &= ~(0x01 << (g_aucKBRecvdBuff[3]-1));
                            if (0 == (g_ucTelExist&0xFE))
                            {
                                g_FlagCallEnd = 1;
                                if (g_FlagCalling && (1 != g_ucPhoneIndex))//g_ucAdemcoEvts = 0;
                                {
                                    Hangup();
                                }
                            }
                            if ((0 == (0x30&g_ucTelExist))
                                && (0 != (g_ucAlarmTypes&(0x01<<(ALARM_TYPE_NUM_FORC-1)))))
                            {
                                g_FlagCallEnd = 1;
                                if (g_FlagCalling && ((g_ucPhoneIndex<5) && (1!=g_ucPhoneIndex)))
                                {
                                    Hangup();
                                }
                            }
                            if (0 == (g_ucTelExist&0x01))//2006-12-18 是否清//不要清
                            {
                                g_ucAdemcoEvts = 0;
                                if (g_FlagCalling && (1 == g_ucPhoneIndex))
                                {
                                    Hangup();
                                }
                            }
                            //号码清除后判断是否还要拨号
                            if (g_FlagCallEnd && (0 == g_ucAdemcoEvts))
                            {
                                Hangup();
                            }
                        }
                        if (ucTmp_PKBMsg != g_ucTelExist)
                        {
                            WriteByte(g_ucTelExist, EEPROM_ADD_TEL_EXIST);
                        }
                    }
                }
				///***************************发送/接收错误,回复执行错误命令
                else
                {
                    FlagKBExeOK = 0;   //发送/接收错误,但回复执行错误命令。下同。
                }
                break;  //命令高字节g_aucKBRecvdBuff[2]等于0x11结束
            //switch (g_aucKBRecvdBuff[2]) 分支
            case 0x12:
                //撤、布防。1外出,2夜间(留守),3撤防
                //不限制撤布防
                ucTmp_PKBMsg = g_aucKBRecvdBuff[3] >> 4;
                if (6 < ucTmp_PKBMsg)
                {
                    FlagKBExeOK = 0;
                    break;
                }

                switch (g_aucKBRecvdBuff[3] & 0x0F)
                {
                    case 0x01:  //键盘外出布防
                        /*if (0 == g_ucAlarmWireZone | g_ucAlmWrlsZn)*/
                        if ((!g_FlagHasAlarm) && (!g_FlagInDelaying))
                        {
                            if (IS_OUT_GUARDING)
                            {
                                return; //不回复,不让键盘发声.字键盘自己处理可以break
                            }
                            GoToOutGuard();
                            if (!g_FlagPrtcl41)
                            {
                                RcdCntctIDEvt((CHANGE_GUARD_CTID_INDEX+1)|0x80,
                                                   ucTmp_PKBMsg); //g_aucKBRecvdBuff[LOCATN_KB_ID]);
                            }
                        }
                        else
                        {
                            FlagKBExeOK = 0;
                        }
                        break;
                    case 0x02:  //键盘留守布防
                        if ((!g_FlagHasAlarm) && (!g_FlagInDelaying)
                            && !(IS_OUT_GUARDING && (g_FlagLckgPwd   //2006-10-7
                                                     || (0 == ucTmp_PKBMsg) ))
                           )
                        {
                            if ((!g_FlagPrtcl41) && (!IS_HOME_GUARDING))
                            {
                                RcdCntctIDEvt((HOME_GUARD_CTID_INDEX+1)|0x80,
                                                   ucTmp_PKBMsg); //g_aucKBRecvdBuff[LOCATN_KB_ID]);
                            }
                            GoToHomeGuard();
                        }
                        else
                        {
                            FlagKBExeOK = 0;
                        }
                        break;
                    case 0x03:  //键盘撤防
                        if ((0 == ucTmp_PKBMsg) || g_FlagLckgPwd) //2006-10-7 add g_FlagLckgPwd
                        {
                            FlagKBExeOK=0;
                            break;
                        }
                        if (!g_FlagPrtcl41) //&& ((!IS_LAX_GUARDING) || g_FlagHasAlarm))
                        {
                            RcdCntctIDEvt((CHANGE_GUARD_CTID_INDEX+1)|0x40,
                                               ucTmp_PKBMsg); //g_aucKBRecvdBuff[LOCATN_KB_ID]);
                        }
                        GoToDisguard();
                        
                        /*if (g_FlagDialOK && (1 == g_ucPhoneIndex))
                        {
                            ;//空,接警中心时不理撤防
                        }
                        else*/
                        if ((0 == g_ucAdemcoEvts)
                            || (2 <= g_ucPhoneIndex))
                        {
                            Hangup();
                        }
                        break;
                    default:
                        FlagKBExeOK = 0;
                        break;
                }
                break;  //命令高字节g_aucKBRecvdBuff[2]等于0x12结束
            //switch (g_aucKBRecvdBuff[2]) 分支
            case 0x13:  //报警
                switch (g_aucKBRecvdBuff[3])
                {
                    case 0x08:  //紧急按钮
                        ucZoneNum_PKBMsg = 0x17;
                        break;
                    case 0x09:  //胁持密码报警
                        ucZoneNum_PKBMsg = 0x18;
                        ucTmp_PKBMsg = g_ucAlarmTypes; //撤防函数会清报警.
                        GoToDisguard();
                        g_ucAlarmTypes = ucTmp_PKBMsg;
                        if (g_FlagPrtcl41)
                        {
                            //g_ucAdemcoEvts--; // !! 暂时不考虑事件满的情况
                        }
                        else //胁持报警后接警中心不会认为主机处于撤防状态
                        {
                            RcdCntctIDEvt((CHANGE_GUARD_CTID_INDEX+1)|0x40, 0x98);
                        }
                        break;
                    case 0x0A:  //密码防猜
                        {
                            ucZoneNum_PKBMsg = 0;   //不需函数ProcZnSign()做报警处理

                            //ucTmp_PKBMsg = Hex_BCD(BCD_Hex(g_ucHour) + HOURS_LCK_PWD);
                            ClrWdt16();
                            //WriteByte(YES, EEPROM_ADD_LCKG_PWD); //2006-12-11
                            if (g_ucMinute >= 0x30)
                            {
                                /*ucTmp_PKBMsg = BCD_Hex(ReadTime(REG_HR));
                                ucTmp_PKBMsg = Hex_BCD((ucTmp_PKBMsg+1)%24);
                                WriteByte(ucTmp_PKBMsg, EEPROM_ADD_LCKPWD_HOUR);*/
                                //与上面的执行结果等价,
                                WriteByte(Hex_BCD((BCD_Hex(ReadTime(REG_HR)) + 1) % 24),
                                          EEPROM_ADD_LCKPWD_HOUR);
                            }
                            else
                            {
                                WriteByte(ReadTime(REG_HR), EEPROM_ADD_LCKPWD_HOUR);
                            }
                            WriteByte(Hex_BCD((BCD_Hex(g_ucMinute)+30)%60), EEPROM_ADD_LCKPWD_MIN);
                            //WriteByte(ucTmp_PKBMsg, EEPROM_ADD_LCKPWD_HOUR);

                            //WriteByte(ReadTime(REG_DATE), EEPROM_ADD_LCKPWD_DATE); //开机不保存,不需要这些
                            //WriteByte(ReadTime(REG_MONTH), EEPROM_ADD_LCKPWD_MON);
                            //WriteByte(ReadTime(REG_YR), EEPROM_ADD_LCKPWD_YR);
                            g_FlagLckgPwd = 1;

                            //广播是否锁定需密码的操作
                            //g_aucKBRecvdBuff[4] = 0x09;
                            SendKBSysInfo(7, 7);
                        }
                        break;
                    default:
                        ucZoneNum_PKBMsg = 0;
                        FlagKBExeOK = 0;
                        break;
                }
                //if (!FlagKBExeOK) //C51不能正确编译,之后去掉,使用ucZoneNum_PKBMsg区分
                {
                    if (ProcZnSign(ucZoneNum_PKBMsg))
                    {   //有报警,广播报警
                        //RecordAlarm(ucZoneNum_PKBMsg);
                        //SendAlarm();
                    }
                    return;//2006-8-23 键盘会响的问题
                }
                break;  //命令高字节g_aucKBRecvdBuff[2]等于0x13结束
            //switch (g_aucKBRecvdBuff[2]) 分支
            case 0x14:  //遥控器对码
                if ((0x05 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3]))
                {
                    g_aucAuxSendBuff[0] = AUX_CMD_ADD_RMT_H;    //对应遥控器对码,1表示遥控器1对码
                    g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
                    g_FlagHasAuxMsgSend = 1;
                    g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
                    //等待辅助CPU对码成功再通知键盘成功
                    return;
                }
                else
                {
                    FlagKBExeOK = 0;
                }
                break;  //命令高字节g_aucKBRecvdBuff[2]等于0x14结束
            case 0x15:  //清除遥控器对码
                if (0x99 == g_aucKBRecvdBuff[3])
                {   //清除所有遥控器对码
                    g_aucAuxSendBuff[0] = 0x16;
                    g_aucAuxSendBuff[1] = 06;
                    g_FlagHasAuxMsgSend = 1;
                    g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
                }
                else if ((0x05 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3]))
                {   //清除对应遥控器对码
                    g_aucAuxSendBuff[0] = AUX_CMD_RMV_RMT_H;
                    g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
                    g_FlagHasAuxMsgSend = 1;
                    g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
                }
                else
                {
                    FlagKBExeOK = 0;
                }
                break;
            //switch (g_aucKBRecvdBuff[2]) 分支
            case 0x16:  //无线防区对码
                if ((0x16 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3])
                    && IsBCD(g_aucKBRecvdBuff[3]))
                {   //无线防区1~8对码
                    g_aucAuxSendBuff[0] = AUX_CMD_ADD_ZN_H;
                    g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
                    g_FlagHasAuxMsgSend = 1;
                    g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
                    //等待辅助CPU对码成功再通知键盘成功
                    return;
                }
                else
                {
                    FlagKBExeOK = 0;
                }
                break;
            case 0x17:  //清除无线防区对码
                if (0x99 == g_aucKBRecvdBuff[3])
                {   //清除所有无线防区
                    g_aucAuxSendBuff[0] = 0x15;
                    g_aucAuxSendBuff[1] = 0x05;
                    g_FlagHasAuxMsgSend = 1;
                    g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
                }
                else if ((0x16 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3])
                         && IsBCD(g_aucKBRecvdBuff[3]))
                {   //清除1~8防区对码
                    g_aucAuxSendBuff[0] = 0x14;
                    g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
                    g_FlagHasAuxMsgSend = 1;
                    g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;

⌨️ 快捷键说明

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