📄 config.c
字号:
/*------------- 泰兴电子集团 ------------------
*----------------------------------------------
*文件名: Config.C
*开发: www.at90s1200.go.nease.net
*创建日期: 2004-6-30 16:19
*创建人: 尹刚
*功能: 系统设置程序
-----------------------------------------------
-----------------------------------------------*/
#include "Global.h"
#include "MT8880.h"
#include "Sys.h"
#include "ISD.h"
#include "2402.h"
//
void ConfigSystem(void)
{
bit FgNoMusic; //存号模式下禁止放音
bit FgN1Ready; //用来接收2位命令的半进位标志
bit FgNotFirst; //用来设置延时的脉冲
bit FgRunning; //放音正在进行
bit FgNumErr; //输入号码错误标志
bit FgBCDHalf; //BCD码已存入半个字节标志
bit bp;
Byte i;
Byte BytBCD; //暂存BCD码
Byte PlayCount; //放音次数
Byte RcvNumCount; //收到的号码数目
Byte ErrCount; //错误次数
Byte idata NumBuf1[8]={1,2,3,4,5,6,7,8};
Byte idata NumBuf2[8]={1,2,3,4,5,6,7,8};
Byte idata Out1[8]={0,0,0,0,0,0,0,0};
Byte idata Out2[8]={1,1,1,1,1,1,1,1};
Byte idata *NumPoint=NumBuf1;
struct {
Byte N1;
Byte N2;
}Cmd ;
//-----------------------
InitCPUIO();
InitMT8880(DTMF8880); //DTMF模式
FgCPMode=0;
InitBreak();
UpHandle();
_Start:
//----------------------------------------------------------------------
FgDelayOver=0;
FgN1Ready=0;
SetOutTime(Time30S); //30S内无有效按键退出
while(!FgTimeOut)
{
if(FgDelayOver)
{
FgDelayOver=0;
FgN1Ready=0;
}
if(FgDTMF)
{
FgDTMF=0;
DisplayData(MTRcvBuf);
if(FgN1Ready)
{
FgN1Ready=0;
Cmd.N2=MTRcvBuf;
SBeep(1);
if((Cmd.N1 > 0) && (Cmd.N1 <= 5) && (Cmd.N2==0x0b))
{
goto _SaveNum ; //开始存号 【N *】(N=1-5)
}
else if((Cmd.N1==0x0b) && (Cmd.N2 == 0x0b))
{
goto _Record ; //开始录音 【* N】(N=0-5)
}
else if((Cmd.N1==0x0c) && (((Cmd.N2 >= 0x01) && (Cmd.N2 <= 0x05)) || (Cmd.N2==0x0a)))
{
goto _Play ; //开始放音 【# N】(N=0-5)
}
else if((Cmd.N1==0x0b) && (Cmd.N2 == 0x0c))
{
goto _Cmd ; //组合命令 【* #】
}
else if((Cmd.N1==0x0c) && (Cmd.N2 == 0x0c))
{
goto _TheEnd ;
}
else
{
SBeep(2);
}
}
else
{
Cmd.N1=MTRcvBuf;
FgN1Ready=1;
SetDelayTime(Time1S);
}
}
}
P_Speak=1; //当超时退出后放音继电器释放
ISD_PD=1;
ISD_CE=1;
P2=TwiceBuf;
LE373=1;
LE373=0;
goto _TheEnd ;
/*------------------------------------------------------------------------
-------------------------------存号---------------------------------------
-------------------------------------------------------------------------*/
_SaveNum:
Beep(1);
FgBCDHalf=0;
FgNumErr=0;
FgDelayOver=0;
FgPlayOver=0;
FgRunning=0;
FgNotFirst=0;
PlayCount=0;
FgNoMusic=0;
NumPoint=NumBuf1; //指向第一组号码缓存
SetPlayBuf(InputNum);
SetOutTime(Time30S);
while(!FgTimeOut)
{
if(!FgNoMusic)
{
if(FgDelayOver)
{
FgDelayOver=0;
FgPlayOver=0;
FgRunning=0;
FgNotFirst=0;
/*if(FgNumErr)
{
if(++ErrCount>=3)
{
ErrCount=0;
goto _Start ;
}
}*/
if(++PlayCount>=3)
{
PlayCount=0;
goto _Start ;
}
}
else
{
if(FgPlayOver)
{
if(!FgNotFirst)
{
FgNotFirst=1;
SetDelayTime(Time3S); //放音3次 + 每次放完延时3秒
}
}
else
{
if(!FgRunning)
{
if(PlayMusic(PlayBuf)) //播放用户录制语音+"请按#号确认本次报警"
{
FgRunning=1;
}
}
}
}
}
if(FgDTMF)
{
FgDTMF=0;
SBeep(1);
DisplayData(MTRcvBuf);
SetOutTime(Time30S);
if(MTRcvBuf==0x0c)
//----------------------是 " #号 ",判断是否正确-----------------
{
if((RcvNumCount>=3)&& (RcvNumCount<=31))//正确的位数,存入EEPROM
{
//---------------------------------将#号存入"高位"----------------------------------------------------------
RcvNumCount++;
if(FgBCDHalf)
{
* NumPoint = (BytBCD<<4) | 0x0c; //存入Buf
}
else {
if(RcvNumCount==17) NumPoint=NumBuf2; //指针切入第二组缓存
* NumPoint = 0x0c <<4; //存入Buf
}
//---------------------------------存入EEPROM---------------------------------------------------------------
EA=0;
bp=ISendStr(Addr24C02,(Cmd.N1-1)*8,NumBuf1,8);
if(!bp) {
SBeep(5);
goto _Start ;
}
if(RcvNumCount>16)bp=ISendStr(Addr24C02,Cmd.N1*8,NumBuf2,8);
if(!bp) {
SBeep(5);
goto _Start ;
}
EA=1;
//---------------------------------提示"号码已存入"---------------------------------------------------------
RcvNumCount=0; //清除个数,以备再用
StopPlay();
FgNoMusic=1;
SetPlayBuf(NumSaved);
PlayMusic(PlayBuf);
while(!FgPlayOver);
goto _Start ;
}
else { //错误的位数,提示号码有误
FgNumErr=1;
RcvNumCount=0;
StopPlay();
FgDelayOver=0;
FgRunning=0;
FgNotFirst=0;
PlayCount=0;
NumPoint=NumBuf1; //指向第一组号码缓存
SetPlayBuf(NumErr);
FgNoMusic=0; //允许放音3次
}
}
else
//----------------------不是 " #号 "----------------------------
{
if((MTRcvBuf <= 0x0a) && (MTRcvBuf>=0x01))
{ //是0-9存入缓存
StopPlay();
FgNoMusic=1;
FgNumErr=0;
RcvNumCount++;
if(FgBCDHalf)
{
FgBCDHalf=0;
BytBCD <<=4;
* (NumPoint++) = BytBCD | MTRcvBuf; //存入Buf
}
else {
FgBCDHalf=1;
if(RcvNumCount==17) NumPoint=NumBuf2; //指针切入第二组缓存
BytBCD=MTRcvBuf;
}
}
else { //不是0-9 提示号码有误
FgNumErr=1;
RcvNumCount=0;
StopPlay();
FgDelayOver=0;
FgRunning=0;
FgNotFirst=0;
PlayCount=0;
NumPoint=NumBuf1; //指向第一组号码缓存
SetPlayBuf(NumErr);
FgNoMusic=0; //允许放音3次
}
}
}
}
goto _Start ;
/*------------------------------------------------------------------------
-------------------------------录音---------------------------------------
-------------------------------------------------------------------------*/
_Record:
InitBreak();
SetPlayBuf(di);
PlayMusic(PlayBuf);
while(!FgPlayOver);
Beep(1);
Record(28);
Beep(1);
goto _Start ;
/*------------------------------------------------------------------------
-------------------------------放音---------------------------------------
-------------------------------------------------------------------------*/
_Play:
//Beep(1);
switch(Cmd.N2)
{
case 0x0a:
SetPlayBuf(User);
break;
case 1:
SetPlayBuf(Friend1);
break;
case 2:
SetPlayBuf(Friend2);
break;
case 3:
SetPlayBuf(Friend3);
break;
case 4:
SetPlayBuf(Friend4);
break;
case 5:
SetPlayBuf(Friend5);
break;
}
PlayMusic(PlayBuf);
while(!FgPlayOver);
if(Cmd.N2==0x0a)goto _Start ;
Delayms(500);
EA=0;
bp=IRcvStr(Addr24C02,(Cmd.N2-1)*8,Out1,8);
bp=IRcvStr(Addr24C02,Cmd.N2*8,Out2,8);
EA=1;
for(i=0;i<8;i++)
{
BytBCD=(Out1[i] & 0xf0)>>4; //先播放高位
if(BytBCD==0x0c)goto _Start ;
DisplayData(BytBCD);
if(BytBCD==0x0a) MakeVoice(0);
else MakeVoice(BytBCD);
StopPlay();
PlayMusic(PlayBuf);
while(!FgPlayOver);
BytBCD=Out1[i] & 0x0f; //再播放低位
if(BytBCD==0x0c)goto _Start ;
DisplayData(BytBCD);
if(BytBCD==0x0a) MakeVoice(0);
else MakeVoice(BytBCD);
PlayMusic(PlayBuf);
while(!FgPlayOver);
}
for(i=0;i<8;i++)
{
BytBCD=(Out2[i] & 0xf0)>>4; //先播放高位
if(BytBCD==0x0c)break;
DisplayData(BytBCD);
if(BytBCD==0x0a) MakeVoice(0);
else MakeVoice(BytBCD);
StopPlay();
PlayMusic(PlayBuf);
while(!FgPlayOver);
BytBCD=Out2[i] & 0x0f; //再播放低位
if(BytBCD==0x0c)break;
DisplayData(BytBCD);
if(BytBCD==0x0a) MakeVoice(0);
else MakeVoice(BytBCD);
PlayMusic(PlayBuf);
while(!FgPlayOver);
}
goto _Start ;
/*------------------------------------------------------------------------
-------------------------------组合命令-----------------------------------
-------------------------------------------------------------------------*/
_Cmd:
Beep(1);
goto _Start ;
_TheEnd:
Beep(2);
DownHandle();
_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -