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

📄 isd.c

📁 在电话上用单片机来实现电话报警系统
💻 C
字号:
/*------------- 泰兴电子集团 ------------------
*----------------------------------------------
*文件名:    ISD.C 
*开发:     www.at90s1200.go.nease.net
*创建日期:  2004-6-30 16:19
*创建人:   尹刚
*功能:      语音录放程序
-----------------------------------------------
-----------------------------------------------*/

#include "global.h"

Byte  idata PlayBuf[5];		//放音缓冲区
Byte   * PlayPoint;		//放音指针

Byte  code Please[2]	={21,0};		//请输入命令
Byte  code TheOther[2]	={22,0};		//已执行命令,还有其他命令吗?
Byte  code Byby[2]	={23,0};		//谢谢使用,再见
Byte  code InputNum[2]	={24,0};		//请输入号码
Byte  code NumErr[2]	={25,0};		//您输入的号码有误,请输入正确的号码
Byte  code NumSaved[2]	={26,0};		//号码已存入
Byte  code di[2]	={27,0};		//在听到嘀的一声后开始录音
Byte  code User[2]	={28,0};		//用户录音

Byte  code Friend1[2]	={2,0};			//号码语音标识...
Byte  code Friend2[2]	={3,0};
Byte  code Friend3[2]	={4,0};
Byte  code Friend4[2]	={5,0};
Byte  code Friend5[2]	={6,0};



/**********************************************************
*名称:     Word GetAddr(Byte Number);
*功能:     得到对应的录放地址
*入口参数: Number	第几段
*出口参数: 返回Word类型地址
***********************************************************/
Word GetAddr(Byte Number)
{
	Word Addr;
	//-------------------先送控制信号
	EA=0;
	if(Number<18)				//1-10-*-#十,百,千,万,亿(数字0-9-*-#【1S】)	
		{
		Addr=(Number -1) * 11;		//录音时间+EOM时间
		RecTime=10;
		}
	else if(Number<=28)			//18-28
		{	
		switch(Number)
			{	
			case 18:		//18(市电掉电【2S】)
				Addr=187;
				RecTime=20;
				break;
			case 19:		//19(负载异常【2S】)
				Addr=187+21;
				RecTime=20;
				break;
			case 20:		//20(电池异常【2S】)
				Addr=187+21+21;
				RecTime=20;
				break;
			case 21:		//21(请输入命令【2S】)
				Addr=187+21+21+21;
				RecTime=20;
				break;
			case 22:		//22(已经执行命令,还有其他命令吗?【4S】)
				Addr=187+21+21+21+21;
				RecTime=40;
				break;
			case 23:		//23(谢谢使用,再见【2S】)
				Addr=187+21+21+21+21+41;
				RecTime=20;
				break;
			case 24:		//24(请输入号码【2S】)
				Addr=187+21+21+21+21+41+21;
				RecTime=20;
				break;
			case 25:		//25(您输入的号码有误,请重新输入【4S】)
				Addr=187+21+21+21+21+41+21+21;
				RecTime=40;
				break;
			case 26:		//26(号码已存入【2S】)
				Addr=187+21+21+21+21+41+21+21+41;
				RecTime=20;
				break;
			case 27:		//27(在听到嘀的一声后开始录音【4S】)
				Addr=187+21+21+21+21+41+21+21+41+21;
				RecTime=40;
				break;
			case 28:		//28(***用户录音***【用户设定】)
				Addr=187+21+21+21+21+41+21+21+41+21+41;
				RecTime=599-Addr;
			}
		}
	return (Addr) ;
	EA=1;
}
/**********************************************************
*放音函数	PlayMusic()
*入口参数: *p指向要播放的 段数组
*出口参数: 返回0表示放音没有完毕,操作失败,返回1 成功。
***********************************************************/

bit PlayMusic(Byte *p)
{	
	if(FgPlayReady)
	{
		EA=0;
		PlayPoint=p;
		TMOD=0x15;
		ET0=1;
		TR0=1;
		TF0=1;
		EA=1;
		return	(1);		//放音已经完毕,操作成功
	}
	else
		return	(0);		//放音没有完毕,操作失败
}

/**********************************************************
*停止放音函数	StopPlay()
*入口参数: 无
*出口参数: 无
***********************************************************/
void StopPlay(void)
{	
	EA=0;
	FgISDStarted=0;
	FgPlayReady=1;
	FgPlayOver=0;	
	ET0=0;
	//LED4=1;						//灭灯
//	P_Speak=1;					//放音继电器释放
	ISD_PD=1;
	ISD_CE=1;
 	P2=TwiceBuf;				//此处片选置 1,继电器保持
	LE373=1;
	LE373=0;
	P2=0xff;
	P0=0xff;
	EA=1;
}

/**********************************************************
*录音函数	Record()
*入口参数: Number第 N 号语音,Time录音时间(1/10秒)
*出口参数: 无
***********************************************************/
void Record(Byte Number)
{	
	Byte TmpByt;
	Word RecAddr;
	EA=0;
	RecAddr=GetAddr(Number);
	TmpByt=TwiceBuf & 0xf0;		//不影响高四位
	P0=RecAddr & 0xff;		//低位地址
	TwiceBuf=RecAddr >> 8;		//高位地址
	TwiceBuf |= TmpByt ;
	ISD_PR=0;			//PR的下降沿锁定地址(约需300ns)
	ISD_PD=0;
	P2=TwiceBuf;
	LE373=1;
	LE373=0;	
	//-------------------必需单独送片选信号
	ISD_CE=0;
	P2=TwiceBuf;
	LE373=1;
	LE373=0;
	OutTime=RecTime * 8;
	ET1=1;
	EA=1;
	TR1=1;
	K_StartOutTime=1;
	while(!FgTimeOut)
	{
		LED1=0;
	}
	FgTimeOut=0;
	LED1=1;
	ISD_PR=1;
	ISD_PD=1;
	ISD_CE=1;
 	P2=TwiceBuf;			//此处 CE 置 1
	LE373=1; 
	LE373=0;
	P2=0xff;
	P0=0xff;
	ET0=0;
}



/**********************************************************
*设置放音缓冲区
*入口参数:*p指向要复制的数组
***********************************************************/

void SetPlayBuf(Byte *p )
{	
	Byte i=0;
	EA=0;
	while(*p!=0)
	{
		PlayBuf[i++]=*p++;	
	}
	PlayBuf[i]=0;
	EA=1;
}


void MakeVoice(Word Num)
{
	Word Tmp;
	if (Num<10)
	{
		PlayBuf[0]=Num+1;
		PlayBuf[1]=0;
	}
	else if (Num<100)
	{
		PlayBuf[0]=Num/10+1;
		PlayBuf[1]=Num%10+1;
		PlayBuf[2]=0;
	}
	else if (Num<1000)
	{
		PlayBuf[0]=Num/100+1;
		Tmp=Num%100;
		PlayBuf[1]=Tmp/10+1;
		PlayBuf[2]=Tmp%10+1;
		PlayBuf[3]=0;
	}
	else if (Num<10000)
	{
		PlayBuf[0]=Num/1000+1;
		Tmp=Num%1000;
		PlayBuf[1]=Tmp/100+1;
		Tmp%=100;
		PlayBuf[2]=Tmp/10+1;
		PlayBuf[3]=Tmp%10+1;
		PlayBuf[4]=0;
	}
}

⌨️ 快捷键说明

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