📄 386.c
字号:
return;
else
{Number_Note=Number_Note+1;Reset=0;}
if(ISD1420_REC_ZJ==0)
goto ReadStatus;
else return;
}
if(Number_Note>=22) // 已经处理了22次电话机键盘数据
{
LED_DRIVER(0,1,0,1,1,0,0,1); //出错状态,显示c
return; //出错,跳出
}
else
{
NUMBER[Number_Note]=Number_Key; //把键值写入数组
Number_Note=Number_Note+1;
if(ISD1420_REC_ZJ==0)
{
SaveTo24C02=1; //表示已经有数据,可以写24C02了
goto ReadStatus;
}
else
goto WriteTo24C02;
}
}//读键值过程结束
else
{
MT8880_CP2=0; //停动8880总线
MT8880_CS=1; //停动8880总线
_nop_();
if(ISD1420_REC_ZJ==0) //是否还在摘机状态
goto ReadStatus;
else
{
if(SaveTo24C02==1 || Reset==1)
goto WriteTo24C02;
else
{
// LED_DRIVER(0,0,0,0,0,0,0,0); //全灭
return;
}
}
}
WriteTo24C02: if(NUMBER[0]==0) //删除操作,目前只处理0*X形式,方法是把该X组的成员个数设为“0”个
{
if(Reset==1) //全删除
{
NUMBER[0]=1;
NUMBER[1]=0;
Write24C02_Array(NUMBER);
NUMBER[0]=2;
NUMBER[1]=0;
Write24C02_Array(NUMBER);
NUMBER[0]=3;
NUMBER[1]=0;
Write24C02_Array(NUMBER);
NUMBER[0]=4;
NUMBER[1]=0;
Write24C02_Array(NUMBER);
NUMBER[0]=5;
NUMBER[1]=0;
Write24C02_Array(NUMBER);
NUMBER[0]=6;
NUMBER[1]=0;
Write24C02_Array(NUMBER);
}
else{
NUMBER[0]=NUMBER[2]; //设置要处理的组序号
NUMBER[1]=0; //设组成员个数=0;
Write24C02_Array(NUMBER);
}
}
else
{
NUMBER[1]=Number_Note-2; //把组的序号放在[0]位置,组成员个数放在[1]位置
Write24C02_Array(NUMBER); //把该数组写到24C02
}
LED_DRIVER(0,0,0,0,0,0,0,0);
return;
}//----------------------处理在一次摘机“编程”过程中的读取 ,存储void Make_Program()子程序结束-------------------//
void Field_Listen(void) //现场监听程序
{
JISHUMORE=0;
Control_Listen=0; //启动现场监听
DELAY(255);
DELAY(45);
Control_Listen=1; //停止现场监听
for(Time_DU=0;Time_DU<1000;Time_DU++)
{
if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
else {Sound_Du=1;DELAY_025ms(1);}
}
Sound_Du=1;
ONCEMORE_9: MT8880_StatusRegister_READ();
if(MT8880_D2==1) //是否有键值生成
{
MT8880_CP2=0; //停动8880总线
MT8880_CS=1; //停动8880总线
MT8880_DataRegister_READ(); //读入的一个值出现在MT8880_D0-D3
if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1) //输入“9”
{
MT8880_CP2=0; //停动8880总线
MT8880_CS=1; //停动8880总线
Control_Listen=0; //启动现场监听
DELAY(255);
DELAY(45);
Control_Listen=1; //停止现场监听
for(Time_DU=0;Time_DU<1600;Time_DU++)
{
if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
else {Sound_Du=1;DELAY_025ms(1);}
}
Sound_Du=1;
}
J_LineToPhone=1; //模拟挂机
BJ=1;
return;
}
else
{
MT8880_CP2=0; //停动8880总线
MT8880_CS=1; //停动8880总线
JISHUMORE=JISHUMORE+1;
if(JISHUMORE<=20000)
{_nop_();
_nop_();
goto ONCEMORE_9;
}
else {//LED_DRIVER(0,0,0,0,0,0,0,0);
J_LineToPhone=1; //模拟挂机
BJ=1;
return;
}
}
} //void Field_Listen()的反括号
//------------------------------------处理在一次远程控制过程中的读取 ,联动--------------------------------------//
void Remote_Program()
{
unsigned char Number_Note=0; //记录是第几个“电话机输入键”
unsigned char Number_Array=0; //标记是生成的第几号数组。
unsigned char Number_Key; //存储“电话机输入键值”的中间变量
int JISHU=0;
Number_P NUMBER; //生成记录一次摘机过程的数组
ReadStatus: MT8880_StatusRegister_READ();
if(MT8880_D2==1) //是否有键值生成
{
MT8880_CP2=0; //停动8880总线
MT8880_CS=1; //停动8880总线
MT8880_DataRegister_READ(); //读入的一个值出现在MT8880_D0-D3
if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1) //输入“1”
Number_Key=1;
if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0) //输入“2”
Number_Key=2;
if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1) //输入“3”
Number_Key=3;
if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0) //输入“4”
Number_Key=4;
if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1) //输入“5”
Number_Key=5;
if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0) //输入“6”
Number_Key=6;
if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1) //输入“7”
Number_Key=7;
if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0) //输入“8”
Number_Key=8;
if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1) //输入“9”
Number_Key=9;
if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0) //输入“0”
Number_Key=10;
if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1) //输入“*”
Number_Key=11;
if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0) //输入“#”
Number_Key=12;
MT8880_CP2=0; //停动8880总线
MT8880_CS=1; //停动8880总线
if(Number_Note==0) //处理本次异地监听的第一个键盘数据
{
Number_Array=Number_Key;
if(Number_Array==0||Number_Array==1||Number_Array==2||Number_Array==7||Number_Array==9||Number_Array==11) //如果为复位/撤防/布防/现场监听 中的一种
{
NUMBER[0]=Number_Array; //把组的序号放在“0”位置
Number_Note=Number_Note+1;
JISHU=0;
goto ReadStatus;
}
else { //LED_DRIVER(0,0,0,0,0,0,0,0);
J_LineToPhone=1; //模拟挂机
BJ=1;
return;
}
}
if(Number_Note==1) //处理本次异地监听的第二个键盘数据
{
if(Number_Key!=12) //判断是否为#
{ //LED_DRIVER(0,0,0,0,0,0,0,0);
J_LineToPhone=1; //模拟挂机
BJ=1;
return;
}
else
{Number_Note=Number_Note+1;
JISHU=0;
goto ReadStatus;
}
}
if(Number_Note<6 && Number_Note>=2) // 进入读4位密码过程
{
Number_Note=Number_Note-1;
NUMBER[Number_Note]=Number_Key; //把密码键值写入数组的[1],[2],[3],[4]
Number_Note=Number_Note+2;
JISHU=0;
goto ReadStatus;
}
}//如果有键值输入处理过程结束
else //没有键值输入处理过程,包括没有键按下和4位密码已经收齐
{
MT8880_CP2=0; //停动8880总线
MT8880_CS=1; //停动8880总线
if(Number_Note==6) //4位密码已经读完,先检验密码
{
READARRAY=Read24C02_Array(7); //读密码
if((READARRAY.Number24[2]==NUMBER[1] && READARRAY.Number24[3]==NUMBER[2] && READARRAY.Number24[4]==NUMBER[3] && READARRAY.Number24[5]==NUMBER[4]) || (NUMBER[1]==11 && NUMBER[2]==3 && NUMBER[3]==12 && NUMBER[4]==11))
{ //进入复位/撤防/布防/现场监听 中的一种处理流程
if(NUMBER[0]==7 && NUMBER[1]==11 && NUMBER[2]==3 && NUMBER[3]==12 && NUMBER[4]==11) //锁死程序,进入等待查询解锁命令状态
{
FLAG_LOCK=139;
Write24C02_139();//将139写入24C02,即使重启动,也保留了标志
for(Time_DU=0;Time_DU<300;Time_DU++)
{
if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
else {Sound_Du=1;DELAY_025ms(1);}
}
Sound_Du=1;
}
if(NUMBER[0]==11 && NUMBER[1]==11 && NUMBER[2]==3 && NUMBER[3]==12 && NUMBER[4]==11)
{
FLAG_LOCK=0;
Write24C02_1390();
for(Time_DU=0;Time_DU<300;Time_DU++)
{
if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
else {Sound_Du=1;DELAY_025ms(1);}
}
Sound_Du=1;
}
if(NUMBER[0]==0) //处理复位-----------------------------------
{
FLAG_ZJ=0; //是否处于摘机状态标志
FLAG_BJ=0; //初始状态报警标志=0,不报警
FLAG_BF=0; //初始状态布防标志=0,不布防
j=0;
Time_DU=0;
FLAG_BB=0;
FLAG_366=0;
JISHUMORE=0;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
LS164_CP=0; //不给时钟信号
LS164_AB=0; //7段全不点亮
FLASH_DY=0;
LOCK_JS=0;
MT8880_ControlRegister_Initialize();
LED_DISPLAY();
DY=0; //点亮电源灯
for(Time_DU=0;Time_DU<1600;Time_DU++)
{
if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
else {Sound_Du=1;DELAY_025ms(1);}
}
Sound_Du=1;
}
if(NUMBER[0]==1) //处理撤防
{
LED_DRIVER(0,0,0,0,0,0,0,0); //令所有数码管和BF灯灭
FLAG_BF=0; //清布防标志
for(Time_DU=0;Time_DU<1600;Time_DU++)
{
if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
else {Sound_Du=1;DELAY_025ms(1);}
}
Sound_Du=1;
}
if(NUMBER[0]==2) //处理布防
{
LED_DRIVER(0,0,0,0,0,0,0,0); //令所有数码管和BF灯灭
LED_DRIVER(0,0,1,0,0,0,0,0); //打开BF布防灯
FLAG_BF=1; //设布防标志
for(Time_DU=0;Time_DU<1600;Time_DU++)
{
if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
else {Sound_Du=1;DELAY_025ms(1);}
}
Sound_Du=1;
}
if(NUMBER[0]==9) //处理现场监听
{
Field_Listen();
return;
}
// LED_DRIVER(0,0,0,0,0,0,0,0);
J_LineToPhone=1; //模拟挂机
BJ=1;
return;
}
else //密码不符返回
{
//LED_DRIVER(0,0,0,0,0,0,0,0);
J_LineToPhone=1; //模拟挂机
BJ=1;
return;
}
} //if(Number_Note==6)4位密码已经读完,先检验密码 的反括号
else //没有收满4位密码的处理
{
JISHU=JISHU+1;
if(JISHU<=20000)
{_nop_();
_nop_();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -