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

📄 config.c

📁 在电话上用单片机来实现电话报警系统
💻 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 + -