?? 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 + -