1、本系统的主要功能
可通过系统RECORD按钮来储存20 秒的留言信息并可以通过用户随意修改,而且,20 秒的语音既可以整个录为1段,又可以在适当调整后,分段来录。同时又可通过键盘输入5个预拨的电话号码(可随意修改),电话号码的位长为12位,在每按一个键时,蜂鸣器发出拨号音来提醒用户该键是否有效。本系统利用电话线进行报警信号传输,当传感器电路检测到有人闯入时,即发出触发信号作为报警信号, 经放大转换为数字信号后,送入CPU。CPU延时10 秒,若是主人进入,则可在这10秒内利用复位键使CPU复位,否则自动摘机电路开始工作并通过电话线拨出预先设置好的电话号码,并通过电话线播放事先录制好的提示语音。
2、系统的硬件组成
整个电话防盗报警系统以Atmel的AT89C51单片机为控制核心,此外,MT8888DTMF编解码芯片完成拨号、语音电路,ISD1420语音存储芯片用来存储提示语音,串行E2PROMAT24CO1A用来存储电话号码等信息,再加上键盘输入模块,传感器接收模块。整个系统的原理方框图如图1所示。
三、系统软件设计
软件设计中,各个模块要实现的一些基本功能由单独的文件来实现,并给出相应的头文件,供主函数或其它高层的模块调用。下面来叙述各个模块的实现过程。
1、MT8888相关的软件设计
MT8888内部有1个只读的接收数据寄存器,1个只写的发送数据寄存器,2个控制控制寄存器及1个状态寄存器。利用MT8888完成DTMF 编解码,监控电话线状态等功能时,主要是通过对上述5个寄存器进行相应的读写操作来实现的。MT8888模块的基本操作(函数)包括:
1)MT8888 的初始化,对应程序中的Init8888()函数系统在上电之后进行其它操作之前,必须有一个软件复位操作,以完成MT8888的初始化工作。一般在上电后l00毫秒时进行以下初始化步骤(共有6 步的读写操作):
①读状态寄存器
②往控制寄存器写数据0
③再往控制寄存器写数据0
④往控制寄存器写数据8
⑤往控制寄存器写数据0
⑥读状态寄存器
void Init8888(void) //初始化MT8888//
{
ReadStaReg(); //READ
WriteConReg(0); //WRITE 1
WriteConReg(0); //WRITE 2
WriteConReg(8); //WRITE 3
WriteConReg(0); //WRITE 4
ReadStaReg( ) ; //READ
}
2)拨号前的初始化,对应程序中的InitToneO ut()函数为了使得MT8888 能稳定、可靠的工作,在每次利用MT8888进行DTMF拨号以前都需初始化一次。该过程有3步:
①调用上面1)中的Init8888()函数
②往控制寄存器中写数据Oxc。表示中断使能、选择DTMF模式、暂时禁止Tone 输出。且下一次写控制寄存器时是对寄存器B 进行操作
③往控制寄存器中写数据0。表示不选择BURST 模式,发送DTMF 时的持续时间由程序来控制。
void InitToneOut(void)
{
Init8888();
WriteConReg(0xc);
WriteConReg(0);
}
3)拨号过程中拨一个数字的操作,对应程序中的Write-DataReg ()函数
拨号时,AT89C51 除了往MT8888 的数据总线上送出相应数字之外,还必须通过控制寄存器A 的最低位来控制发送音频的持续时间。这是因为在上面2)的初始化时,没有选择BURST模式。
void WriteDataReg(uchar dat) //往发送寄存器中写一个字节//
{
P1=0XC0;
dat&= 0xf;
P1=dat;
P1&=0x4f;
P1=0xff;
WriteConReg(7);
delay_ms(120);
WriteConReg(6);
delay_ms(120);
ReadStaReg( ) ;
}
2、Main()函数设计
Main()函数实现了整个报警系统的主要功能:接受检测信号输入、自动拨打电话并报警及接受用户修改电话号码等。在Main()函数上电后并对MT8888初始化之后,将通过无条件的While (1)循环在6种状态之间转移。
系统状态的定义如下:
Typedef enum STA(Idle=0,Dial,Detect,Play, ModifyCode,Wait ForReset)STATUS; //系统状态的枚举//
typedef enum DSTA (_D_Unknown =0,_D_ FirstPulses,_DJudge}DETECTSTATUS;//检测状态 Detect 里面的状态枚举//
DETECTSTATUS DetState;
STATUS SysState;