📄 isd.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 + -