您的当前位置:首页正文

智能安防报警系统设计与实现..

2021-03-17 来源:年旅网


中文摘要 .............................................................. 2 英文摘要 .............................................................. 3 1 绪 论 ............................................................. 4 2 智能安防报警系统总体设计 ........................................... 5

2.1 系统硬件设计 .................................................. 5 2.2 系统软件设计 .................................................. 6 3 电话信号识别与电话接口电路 ......................................... 8

3.1 振铃检测电路 .................................................. 8 3.2 自动摘挂机电路 ................................................ 9 4 凌阳音频播放 ...................................................... 10 4.1 凌阳音频压缩和输出介绍 ....................................... 10 4.2 凌阳语音播放编程步骤 ......................................... 10 5 DTMF收发器MT8888原理和应用 ....................................... 16

5.1 DTMF收发器MT8888简介 ........................................ 16 5.2 MT8888引脚排列与功能 ......................................... 16 5.3 MT8888的组成 ................................................. 17 5.4 MT8888的工作模式 ............................................. 20 5.5 MT8888的应用 ................................................. 22

5.5.1 与SPCE061A接口 ......................................... 22 5.5.2 MT8888初始化 ............................................ 23 5.5.3 DTMF信号发送 ............................................ 24 5.5.4 电话信号音检测 .......................................... 25

6 显示模块 .......................................................... 26

6.1 凌阳显示模块简介 .............................................. 26 6.2 凌阳显示模块原理 .............................................. 29 6.3 凌阳显示模块应用 .............................................. 30 7 报警探测装置 ...................................................... 36 结论 ................................................................. 38 谢辞 ................................................................. 39 参考文献 ............................................................. 40 附录1 系统硬件电路图 ................................................. 42 附录2 源程序 ......................................................... 45

目录

1

智能安防报警系统设计与实现

摘 要:本文系统的阐述了集防盗、防火和紧急呼救于一体,功能强大,适合于大

众群体的智能安防报警系统的设计。本设计是专门为家庭用户设计的智能安防报警系统,具有完善的门磁检测、烟雾检测、燃气检测和屏幕显示等功能。本系统采用凌阳SPCE061A实验仪控制,当室内发生非法侵入时,无线门磁探测器向系统发送报警信号,系统启动语音播放程序通过喇叭高声播放预存的相应语音文件报警,实验仪上的LCD显示相应的警报类型,同时通过MT8888启动拨号程序,拨打预存的电话号码并检测电话信号音,反复拨打直至电话接通。电话接通后通过凌阳实验仪的另一路音频输出在电话中播放预存的相应语音文件。当发生火情或燃气泄漏时,无线烟雾探测器或燃气探测器向系统发送相应的报警信号,系统就会如上进行处理,播放与之相应的语音文件。

关键词:SPCE061A;MT8888;DTMF;电话报警;LCD

2

Abstract: This paper described a set of security, fire and emergency SOS integrated,

powerful, suitable for public groups Intelligent Alarm System design. The design is specifically for home users of Intelligent Design Security Alarm System is the perfect Magnetometer detection, smoke detection, Gas detection and display, and other functions. The system uses Sunplus SPCE061A experimental instrument control, when the room is unlawful intrusion, Magnetometer detectors wireless system to send alarm signals Voice activated player shouted through loudspeakers to broadcast voice stored in the corresponding paper reported Experiment on the LCD display alerts corresponding types, through MT8888 activated dialing procedures, Call the telephone numbers stored and Telephone Signal Detection and repeatedly call up telephone access. After the telephone connected through Sunplus experimental instrument another channel audio output on the phone broadcast stored in the corresponding sound files. When fires or gas leakage, wireless smoke detectors or gas detector corresponding to transmit alarm signals As system will be processed, broadcast speech with the corresponding documents.

Keywords:SPCE061A;MT8888;DTMF;telephone alarm;LCD

3

1 绪 论

信息时代的到来,高新技术的迅猛发展,世界正面临由工业经济向知识经济转变的重大历史时期,城市数字化和建筑智能化是历史发展的必然。近些年来,我国智能建筑技术飞速发展,提升了传统建筑产业的科技含量,呈现了巨大的市场潜力。随着社会经济的飞速发展,人们的生活水平有了较大的提高。但与此同时,社会人口的流动性大大增加,社会结构和社会治安也变得日趋复杂,人们对家庭生命财产的安全越来越重视,安全防范意识日益提高,人们对于安防产品的要求也愈来愈高。随着社会的发展,越来越多的家庭会选用智能安防报警系统。

众所周知,市民对于家庭防盗报警产品一直有着殷切的期望。但是,一般家庭的经济承受能力与他们对防盗报警设备的性能要求之间,始终无法达到平衡,有时甚至存在着矛盾。而且市场现有产品功能不全面,性能不稳,误报率高。传统的机械式(防盗网、防盗窗)家居防卫系统在实际使用中也逐渐暴露出了许多隐患和弊端。近些年来,随着科学技术的飞速发展和电子计算机的广泛普及,家庭安防产品出现了前所未有的新变化。家庭防盗报警系统逐步朝着智能化、数字化、人性化方向发展。防盗报替系统不仅作为报警用,还可以开发出诸如紧急求助、医疗、家政、呼叫等附加功能。本论文所设计的智能安防报警系统就是防盗、防火等功能集于一体的适合于大众群体的综合报警系统。

本系统采用凌阳SPCE061A实验仪控制,当室内发生侵入、火灾、可燃气体等情况时通过电话和喇叭报警。异常情况发生后,相应的检测装置发出信号,单片机启动拨号程序,拨打预存的号码。电话接通后调用语音播放程序播放相应的录音,同时现场也通过喇叭播放报警信号,液晶显示屏上显示险情类型。

本系统均采用技术较为成熟的电子元器件,价格低廉,可靠性高,容易实现,整体价格控制在较低的水平,具有很好的市场前景。

4

2 智能安防报警系统总体设计

本智能安放报警系统由硬件和软件两大部分组成。下面分别介绍两方面的设计方案。

2.1 系统硬件设计[1,2]

图2.1 系统硬件框图

系统硬件由凌阳实验仪、DTMF信号收发芯片MT8888、自动摘挂机电路、振铃检测电路和各个报警检测装置等组成。系统硬件框图如图2.1所示。

凌阳实验仪是用于初学凌阳16位系列单片机的实验设备和实践手段,能最大程度激发学生的学习兴趣,巩固单片机的知识,从而达到事半功倍的效果。它大致分为软件部分和硬件部分,两者相辅相成,互为补充。软件为硬件提供编译环境、代码下载、通信软件等;硬件是软件代码的实现。实验仪具备如下功能: 1. CPU为凌阳SPCE061A 16位SOC单片机。

2. 采用动态扫描方式驱动1×8矩阵键盘、4位8段数码管、8个LED灯。 3. 提供5V/3.3V可选I/O输出电压。

4. 提供一路0~3.3V可调模拟电压,可方便地完成AD的数据采集实验。 5. 扩展RS232接口,可直接与计算机进行通信,或者进行单片机之间的双机通信。

6. 扩展SIO存储芯片SPR4096A,可选择512K Byte Flash 或者4K Byte SRAM存储方式。

7. 扩展USB接口,提供完整的单片机通讯程序、上位机驱动程序及应用范例。

5

8. 扩展带背光的128×64点阵液晶SPG12063YS2, SPG12063YS2自带驱动芯片SPLC501,SPLC501是凌阳的一款LCD驱动芯片,它采用最新的COG技术使驱动和液晶合二为一。

9.扩展了两路音频输出电路,采用凌阳功放芯片SPY0030,通过它可以体验SPCE061A给您带来的听觉效果。

10. 扩展了MIC输入电路,配合SPCE061A内部的AGC和OPI电路,可获得不错的语音数据。

11. 提供PROBE/EZ_PROBE两种在线编程、调试模式。

12. 提供所有外围电路的原理图、IDE环境下的所有实验的源代码(40个),以及方便快捷的网络支持,使您能快速地掌握各种设计方法。

凌阳单片机I/O口占用如表2.1所示。

表2.1 I/O口占用表

I/O引脚 IOA15-IOA12 IOB15-IOB13 说 明 输入/输出,接MT8888的数据总线D3-D0 输出,分别与MT8888的RS0、、相连,通过程序控制,模拟MT8888的读写时序,以对MT8888进行读写控制 IOB7-IOB5 IOB3(EXT2) IOB2(EXT1) IOB0 报警信号输入 信号音检测输入 振铃音检测输入 输出,自动摘挂机控制 DTMF信号收发器选用加拿大Mitel公司的MT8888,它是该公司生产的DTMF信号编/解码系列芯片中较新的一种,该芯片功能强,功耗低,工作稳定可靠。同类产品还有MT8870、MT8880等,MT8870只有接收功能,MT8880虽然也有收发功能,但MT8888与其相比,MT8888能与更多型号的单片机配合,而且外围电路简单。

2.2 系统软件设计

本系统软件设计调试在μ'nSP® IDE 1.8.4开发环境中进行,μ'nSP® IDE 是由

6

凌阳科技提供的一个集成开发环境它集程序的编辑编译链接调试和仿真等功能为一体具有友好的交互界面下拉菜单快捷键和快速访问命令列表等使程序设计工作更加方便高效此外它的软件仿真功能可以不连接仿真板模拟硬件的部分功能来调试程序。

系统程序主要使用C语言编写,部分使用汇编语言。程序循环查询各个报警输入端口的状态,某报警输入端口有输入时程序即转到相应程序段执行。系统程序流程如图2.2所示。

图2.2 系统程序流程图

7

3 电话信号识别与电话接口电路

3.1 振铃检测电路[2,3,8,10]

本系统采用如图3.1所示的振铃检测电路,全桥整流电路防止电话线正负极反接。电话没有接通时,电话线两端电压只有50V左右。而4759是一个60V的稳压管,此时不会导通,IOB2输出高电平。电话呼叫时线路上的交流信号经过整流后形成脉动电流,其峰值能击穿稳压管,从而形成光耦时断时通,IOB2输出时高时低形成方波。通过对此方波计数就可检测振铃次数。

图3.1 振铃检测电路

电话线路中的信号音有忙音、拥塞音、回铃音和拨号音等几种,如图3.2所示。我国的信号音要满足GB3378-82和GB3380-82标准。

图3.2 电话信号音(450Hz+25Hz)续断时间

当MT8888工作在呼叫处理模式时,若检测到有效信号音,IRQ /CP引脚输出方

8

波,因此,通过在5s内对此方波计数,可判断出信号音种类,计数值大于1792为拨号音,1024~1791为忙音,256~1023为回铃音,小于255为无效信号音。

3.2 自动摘挂机电路[8,10]

本系统采用如图3.3所示的自动摘挂机电路。单片机控制IOB0输出,IOB0输

出为低电平时,光耦P521不通,则三极管C2383也不导通,电话处于挂机状态。而当IOB0输出为高电平时C2383导通,使得电话线两端电压降到10以下,从而是电话处于摘机状态。如此即通过SPCE061A控制IOB0输出来实现摘挂机控制。

图3.3 自动摘挂机电路

9

4 凌阳音频播放

4.1 凌阳音频压缩和输出介绍[1]

音频质量分为几个不同的等级: 电话质量:200Hz~3.4KHz AM质量:50Hz~7KHz FM质量:20Hz~15KHz CD质量:10Hz~20KHz

凌阳音频压缩方法一般指的是电话质量标准即频率在200Hz~3.4KHz。 压缩分为无损压缩和有损压缩。无损压缩一般指磁盘文件压缩,压缩比低(2:1~4:1)。而有损压缩则是指音/视频文件压缩,压缩比可高达100:1。

凌阳音频压缩算法根据不同的压缩比分为以下几种: SACM-A2000:压缩比为8:1、8:1.25、8:1.5 SACM-S480: 压缩比为80:3、80:4.5 SACM-S240: 压缩比为80:1.5

这几种算法的音质是递减的,本系统中的语音播放采用SACM-A2000算法。 凌阳实验仪扩展了两路音频输出电路,采用凌阳功放芯片SPY0030,简化了外围电路的设计和搭建,如图4.1所示。

图4.1 凌阳实验仪音频输出电路

4.2 凌阳语音播放编程步骤[11]

10

本系统最重要的功能是发生异常情况时自动拨打预存的电话号码,播放相应的语音。所以语音播放功能的实现在整个系统中非常重要。凌阳实验仪本身带有两路音频输出电路,很有利于此功能的实现和完善,一路现场播放,另一路通过电话线送出。

凌阳语音播放编程步骤如下: (1) 新建一个工程文件; (2) 新建一个C文件; (3) 编写语音播放程序;

#define SPEECH_1 0 #define DAC1 1 #define DAC2 2

#define Ramp_UpDn_Off 0 #define Ramp_Up_On 1 #define Ramp_Dn_On 2 #define Ramp_UpDn_On 3 #define Manual 0 #define Auto 1 #define Full 1 #define Empty 2 #define Mode 1 #include \"A2000.h\" main() {

extern long RES_HH_24K_SA,RES_HH_24K_EA; //定义语音资源的首末地址标号 long int Addr; //定义地址变量 int Ret = 0;

//定义获取语音数据变量并初始化 if(Mode == 1)

11

//采用自动方式播放 {

SACM_A2000_Initial(1); //自动方式播放初始化

SACM_A2000_Play(SPEECH_1,DAC1,Ramp_UpDn_On); //定义语音索引号、播放通道、允许音量增/减调节 while(1)

SACM_A2000_ServiceLoop(); //获取语音数据,将其填入解码队列 }

if(Mode == 0) //采用手动方式播放 {

addr=RES_HH_24K_SA; //送入语音队列的首址 SACM_A2000_Initial(0); //手动方式播放的初始化 SACM_A2000_InitDecoder(DAC1); //开始对A2000的语音数据以手动方式解码 while(1) {

if(SACM_A2000_TestQueue()!=Full) {

Ret =SP_GetResource(Addr); SACM_A2000_FillQueue(Ret); Addr++; }

if(Addr< RES_HH_24K_EA ) //如果该段语音未播完,即未到达末地址时SACM_A2000_Decoder();

// 获取资源并进行解码,再通过中断服务子程序送入DAC通道播放 else

SACM_A2000_Stop(); //否则,停止播放

4) 新建汇编文件ISR.asm;

12

( .text

.include hardware.inc .include A2000.inc .public _FIQ; _FIQ:

PUSH R1,R4 to [sp]; r1=0x2000;

test r1,[P_INT_Ctrl]; jnz L_FIQ_TimerA; R1=0x0800;

test r1,[P_INT_Ctrl]; jnz L_FIQ_TimerB; L_FIQ_PWM: R1=C_FIQ_PWM; [P_INT_Clear]=r1; POP R1,R4 from[sp]; reti; L_FIQ_TimerA: [P_INT_Clear]=r1; //SACM_A2000语音播放

call F_FIQ_Service_SACM_A2000; pop R1,R4 from[sp]; reti; L_FIQ_TimerB: [P_INT_Clear]=r1; pop R1,R4 from[sp]; RETI;

(5) 添加语音资源文件(通过压缩工具压缩后的文件); (6) 在工程中加入hardware.asm文件;

(7) 拷贝所需库文件和头文件到工程文件夹中,所需的库文件为sacmv25.lib,

13

头文件为a2000.h,a2000.inc,hardware.inc;

(8) 连接库文件:点击Project/setting/link,点击library modules的浏

览按钮,选中sacmv25.lib;

(9) 添加SPEECH表:打开resource.asm文件,在end table后根据工程中

的语音资源添加代码,比如:

.public T_SACM_A2000_SpeechTable

T_SACM_A2000_SpeechTable: .dw _RES_HH_24K_SA

凌阳实验仪语音播放流程如图4.2、4.3和4.4所示

图4.2 手动方式主程序流程图

14

图4.3 语音播放主程序流程图

图4.4 中断服务子程序流程图

15

5 DTMF收发器MT8888原理和应用

5.1 DTMF收发器MT8888简介[3,4]

MT8888是采用CMOS 工艺生产的DTMF信号收发一体集成电路,它的发送部分采用信号失真小、频率稳定性高的开关电容式D/A变换器,可发出16种双音多频DTMF信号。接收部分用于完成DTMF信号的接收、分离和译码,并以4位并行二进制码的方式输出。MT8888芯片集成度高、功耗低,可调整双音频模式的占空比,能自动抑制拨号音和调整信号增益,还带有标准的数据总线,可与TTL电平兼容,并可方便地进行编程控制。

MT8888是一种具有Intel微处理器接口的功能较强的双音多频(DTMF)发送和接收器件。可用于寻呼系统、交换机系统和移动通信、转帐卡系统、互接拨号器、数字通信和计算机等领域。其主要功能有:

(1)完整的DTMF发送和接收功能; (2)高速Intel微处理器接口; (3)可工作于自动音频突发模式; (4)可调整保护时间; (5)呼叫音检测到-30dBm。

5.2 MT8888引脚排列与功能[5]

MT8888引脚排列如图5.1所示。各个引脚功能为: IN+、IN-(1,2)—运放的同相和反相输入端;

GS(3)—增益选择端。在该引脚与IN-引脚间接反馈电阻可调节运放增益; Vref(4)—基准电压输出端。通常为VDD/2,作为运放的偏置电压; VSS(5)—芯片电源负端,接地;

OSC1、OSC2(6、7)—时钟或振荡器的输入、输出端。两引脚间接3.579545MHz晶体与内部电路构成芯片振荡器;若由外部电路提供时钟,则OSC2引脚开路;

TONE(8)—DTMF信号输出端,也可通过编程设置为单音输出;

(9)—微处理器写输入端,低电平有效,与TTL电平兼容;

16

(10)—片选信号输入端,低电平有效。该引脚可由微处理器的地址锁存信号

(ALE)直接提供;

RS0(11)—寄存器选择控制输入端;

(12)—微处理器读输入端,低电平有效,与TTL电平兼容;

IRQ /CP(13)—中断请求信号,为开漏输出。在中断模式下,当一个有效DTMF

信号突发发送或接收时,输出低电平信号。若控制寄存器设定电路工作于呼叫处理(CALL)模式和中断使能,则该端输出代表运放输入的方波信号音,但该信号频率必须落在呼叫处理滤波器的带宽内;

D0~D3(14-17)—数据总线,与TTL电平兼容。输入需发送的DTMF编码或输出译码的DTMF信号数据。当CS=1时呈高阻状态;

Est(18)—初始控制输出。若电路检测到一种有效的单音对时,Est为高电平;若信号丢失,则Est返回低电平;

St/GT(19)—控制输入/时间监测输出。若St电压大于门限VTSt,电路寄存被检测的DTMF单音对,并更新输出锁存器内容。若St电压低于VTSt,则电路不接收一新单音对,GT输出的作用是设置外部时间监测常数;

VDD(20)—芯片电源正端,典型值为+5V。

图5.1 MT8888引脚图

5.3 MT8888的组成[3,6]

MT8888的内部结构图如图5.2所示,具有信号放大、拨号抑制滤波、输入信号的高低频带通滤波、译码、锁存、D/A转换和混频等功能。其硬件电路由接收、发送

17

和控制三个部分组成。

接收部分的前置输入电路可以有单端输入和差分输入两中形式,如图5.3所示。 单端输入电压增益AVRF/RIN 差分输入电压增益AVdiffR5/R1 差分输入阻抗ZINdiff2R12(wC)2

元件典型值C1=C2=0.01F,R1R4R5100k,

R260k,R337.5k,R3=(R2R5)/(R2+R5)

图5.2 MT8888内部结构图

(a) 差分输入

18

(b) 单端输入 图5.3 输入电路原理图

DTMF产生器是发送部分的主体,它产生全部16种失真小、精度高的标准双音信号,这些频率均由3.5795MHz晶体振荡器产生。电路由数字频率合成器、行/列可编程分频器、开关电容式D/A变换器组成。行和列单音正弦波经混合、滤波后产生双音信号。

写操作时,总线上的4位数据被锁存,可编程分频器进行8中取2的编码变换,定时长度确定该信号的频率,当分频器达到由输入编码确定的计数值时,产生复位脉冲,计数器重新计数,改变定时长度可变频率。编码电路由开关电容式D/A变换器组成,得到高精度的量化电平。低噪声加法放大器完成行和列单音信号的混合。输出级有带通滤波器,用来衰减大于8kHz的谐波。

此外,发送部分还包括单音信号产生器,能产生高频组和低频组的任一单音正弦波。该功能亦需编程选择。

图5.4 控制电路原理图

19

MT8888的控制电路如图5.4所示,C1放电,在有效时间tGTP内Est维持高平,当

VC=VTSt时(控制逻辑的门限电平),GT输出信号驱动VC至电源电压VDD,经延时后,控

制逻辑把片内状态寄存器的延迟输出标志位置提高,如选择中断模式,当延迟标志位置高时,IRQ/CP引脚由高电平变为低电平,为CPU提供中断请求信号。延迟控制电压的跳变沿把数据锁存至输出端。

5.4 MT8888的工作模式[2,6]

MT8888是集DTMF发送和接收功能的器件,内带呼叫处理滤波器。接收部分与DTMF接收器件MT8870类似,发送部分包括行、列计数器和D/A变换器,另外增加了一些控制寄存器和接口、数据总线缓冲器,很容易实现与微处理器的直接接口,其功能框图如图5.2所示。MT8888通过微处理器接口可以由RS0、

、D0~D3

等信号选择与设定内部寄存器,并控制电路的工作状态或工作模式。它共有5个不同作用的寄存器:发送数据寄存器(TDR)、接收数据寄存器(RDR)、状态寄存器(SR)、控制寄存器A(CRA)和控制寄存器B(CRB),其控制关系如表5.1所示。

表5.1 内部寄存器控制关系 RS0 0 0 1 1 0 1 0 1 1 0 1 0 功 能 数据写入TDR 数据从RDR读出 数据写入SR 数据从SR读出 MT8888共有6种工作模式,它们分别为:

(1)DTMF模式:发送与接收DTMF信号。输入数据经TDR控制可编程行、列计数器、D/A变换器,合成需要发送的DTMF信号。或DTMF信号经拨号音抑制、分离带通滤波器、监频与确认,译成相应的4比特码,经RDR输至数据总线。DTMF编译码对应关系如表5.2所示。

表5.2 DTMF编译码对应关系表

双音频键 十进制数 0 1 2 3 4 3 4 5 5 6 7 8 9 * # 12 A 13 B 14 C D 10 1 2 6 7 8 9 11 15 0 (2)呼叫处理(CALL)模式:电路可以检测电话呼叫过程中的各种信号音,只要信

20

号的频率落在320Hz-510Hz范围内,片内呼叫处理滤波器便可滤出。经限幅得到的方波信号,由号滤出,则

/CP端输出,以用于微处理器对呼叫性质和类别进行判断。若无信/CP端始终保持低电平。

(3)突发(BURST)模式:在DTMF模式下,工作于突发状态,信号突发和暂停时间各为51±1ms;在CALL模式下,工作于突发状态,信号突发和暂停时间各为102±2ms,此时电路只可发送DTMF信号,但不能接收。

(4)单/双音(S/)产生模式:电路可产生单音或DTMF信号(由CRB控制),用于测试和监测。

(5)测试(TEST)模式:使电路从DTMF接收部分得到延迟监测信号,并从端输出。

(6)中断模式:此模式下若选择DTMF状态,当DTMF信号被接收或出现在监测时间内,或准备发送更多数据(突发模式下)时,则

/CP端下接至低电平。

/CP

表5.3 控制寄存器A(CRA)的功能

控制位 符号 功 能 逻辑“1”时可输出信号音,逻辑“0”时关闭输出信号音 模式选择位:逻辑“1”为CP模式,逻辑“0”为DTMF模式 中断允许位:逻辑“1”使能产生中断,逻辑“0”使不能产生中断 寄存器选择位:逻辑“1”时,下一个写周期选CRB,继而写周期返回选CRA;逻辑“0”时,下次还写CRA 表5.4 控制寄存器B(CRB)的功能

位 符号 功 能 逻辑“0”选择突发模式,逻辑“1”时,由TOUT位终止突发模式 TEST 测试方式控制:高电平设定电路工作于测试方式。 单/双音产生选择位:逻辑“0”设定电路产生DTMF信号;逻辑“1”设定电路列或行(由C/位决定)单音频信号输出。 b0 b1 b2 b3 TOUT CP/DTMF IRQ RSEL b0 b1 b2 S/ D C/R b3 列或行单音选择。高电平选择列单音输出;低电平选择行单音输出。该位与S/位一起使用。 21

表5.5 状态寄存器(SR)的功能

位 名称 中断请求 突发模式下发送寄存器空 接收寄存器满 DTMF信号标志位 状态标志设定 中断发生,b1或b2=0 暂停时间结束,准备发送新数据 接收寄存器的数据有效 检测不到DTMF信号时置位 状态标志清除 读完状态寄存器后清除 读完状态寄存器后清除 读完状态寄存器后清除 检测DTMF信号已清除 b0 b1 b2 b3 各种模式的选择由控制寄存器(CRA和CRB)的相应位完成,如表5.3和表5.4所示。状态寄存器SR各位所表示的关系如表5.5所示。

5.5 MT8888的应用[7,8,9]

5.5.1 与SPCE061A接口

MT8888与单片机接口电路如图5.5所示。它的接收部分采用单端输入,由一个0.01uF的电容和两个100K的电阻组成,其输入增益为两个电阻的比值,本系统中为1,DTMF IN接入电话线。DTMF OUT从TONE引脚输出,如图5.6所示通过LM358放大变压器耦合连入电话线。片选CS直接接地,上电即处于选中状态。

图5.5 MT8888与SPCE061A的接口电路

D0-D3接凌阳单片机的IOA12-IOA15,IRQ /CP通过上拉电阻接IOB3,在呼叫处理模式时,若检测到有效信号音,IRQ /CP输出方波,因此,通过在5s内对此方波计数,

22

可判断出信号音种类,计数值大于1792为拨号音,1024~1791为忙音,256~1023为回铃音,小于255无效信号音;RD、WR分别接IOB13、IOB14,RS0完成对该芯片内部寄存器的选择,与IOB15相连。通过编程对IOB13、IOB14、IOB15控制模拟读写时序以对该芯片进行读写操作。

图5.6 DTMF信号放大电路

5.5.2 MT8888初始化

MT8888的初始化是一个软件复位的过程,这个过程需要在上电100ms内完成,有特定的顺序,如图5.7所示。对其初始化需要根据MT8888的读写时序进行,考虑每步操作之间的延时时间,如图5.8、5.9所示。

图5.7 MT8888初始化流程

23

图5.8 MT8888读时序图

图5.9 MT8888写时序图

5.5.3 DTMF信号发送

图5.10 DTMF信号发送流程

24

在拨号程序中,需要拨号初始化设置,把MT8888设定为DTMF模式,并使之工作于突发模式,不允许中断,写发送寄存器后读状态寄存器SR,若SR的b1=1,则表示本次发送结束,可发送下一个号码。发送程序流程如图5.10所示。

5.5.4 电话信号音检测

号码拨出以后,还需要检测电话信号音,以判断拨号后可能出现的拨号音、忙音、回铃音等信号音。同样,也需要信号音检测初始化,写CRA=1110B,再写CRB=0001B,使MT8888工作于呼叫处理(CALL)模式,TONE OUT不能输出,允许中断,非突发模式。电话信号音检测流程如图5.11所示。

图5.11 电话信号音检测流程图

25

6 显示模块

6.1 凌阳显示模块简介

液晶显示器(LCD)以其重量轻、体积小、电压低、功耗小、显示内容丰富等优点,逐渐在仪器仪表、工业控制等领域得到广泛应用。

凌阳实验仪自身扩展带背光的128×64点阵液晶SPG12063YS2, SPG12063YS2自带驱动芯片SPLC501,SPLC501是凌阳的一款LCD驱动芯片,它采用最新的COG技术使驱动和液晶合二为一,其功能强,使用方便,可方便地实现显示字符、数字、汉字、图形等功能。跳线“LCD”为LCD模组的数据线、控制线与SPCE061A的I/O间的连接接口。“LIGHT”为背光控制接口,连接后背光灯亮,否则背光灯灭。

SPLC501单芯片液晶驱动,可以直接与其他微控制器接口总线相连。微控制器可以将显示数据通过8位数据总线或者串行接口写到SPLC501A的显存中。下列是SPLC501的特点:

(1)内置8580位显示RAM。RAM中的一位数据控制液晶屏上的一个象素点的

亮、暗状态。“1”亮“0”暗。

(2)具有65行驱动输出和132列驱动输出(注:模组中的液晶显示面板仅为

64行、128列)

(3)可以直接与80系列和68系列微处理器相连。 (4)内置晶振电路,也可以外接晶振

(5)工作温度范围为-40摄氏度~+85摄氏度

SPLC501电气特征:

表6.1 绝对最大范围

参数 符号 范围 -0.3 ~ 7 ―7~+0.3 -4~+0.3 -3~+0.3 电源电压3 V5 ,Vout -12~+0.3 V 单位 V V 电源电压1 Vdd 电源电压2 Vss 26

电源电压4 V1,v2,V3,V4 V5~+0.3 V 输入电压 Vin -0.3~Vdd+0.3 V 输出电压 Vo -0.3~Vdd+0.3 工作温度 Topr -40 ~+80 摄氏度 储存温度 Tstr -55~+125 摄氏度 表6.2 电特性

参数 符号 条件 最小 典型 最大 单位 应用脚 电源 参考Vdd 2.7 3.3 Vdd 电压电压 1 V 工作 2.4 5.5 电压 Vdd 电源 参考Vss2 -3.3 -2.7 V 电压 Vss2 电压2 工作Vss2 -6.0 -1.8 电压 Vss2 电源 参考V5 -12 -4.5 V V5 电压电压 3 工作V1, 4×V5 Vdd 电压 V2 V1,V2 工作V3, V5 0.6×电压 V4 V5 V3,V4 高电压输入 Vihc 0.8×Vdd Vdd 低电压输入 Vilc Vss 0.2×V Vdd 高电压输入 Vchc Ich=0.5m0.8×Vdd Vdd A V 低电压输入 Vclc Icl=0.5mVss 0.2×A Vdd 输入漏电流 Ili Vin=Vdd -1.0 1.0 or Vss 输出漏电流 Ilo -3.0 3.0 uA 27

无驱动耗电 Issq 0.01 5 uA 晶体振荡频率 Fosc 18 22 26 kHz 表6.3 液晶显示模组的基本参数

显示黄色模式STN液晶 模式 显示128X64点阵地图形液晶显示 格式 输入兼容68/80系列MPU数据输入 数据 背光 黄绿色LED 模块72.8(长)×73.6(宽)×9.5(高)尺寸 mm 视屏58.84(宽)×35.79(长)mm 尺寸 点大0.42(宽)×0.51(长)mm 小 像素0.46(宽)×0.56(长) 尺寸 表6.4 LCD模组各引脚说明(默认为6800时序)

引脚类说明 符号 型 DB0~I双向数据口 DB7 /O RESEI复位(低有效) T A0P I数据/使命字控28

CS R/W EP III制位 片选(低有效) 读/写信号 全能端(低有效) 6.2 凌阳显示模块原理

SPLC501液晶显示模组的显示器上的显示点与驱动控制芯片中的显示缓存RAM是一一对应的;SPLC501A芯片中共有65(8 Page x 8 bit+1)X 132 个位的显示RAM区。而显示器的显示点阵大小为64X128点,所以实际上在SPLC501液晶显示模组中有用的显示RAM区为64 X 128个位;按byte为单位划分,共分为8个Page,每个Page为8行,而每一行为128个位(即128列)。

SPLC501液晶显示模组中,驱动控制芯片的显示RAM区每个byte的数据对应屏上的点的排列方式为:纵向排列,低位在上高位在下,如图6.1所示。

SPLC501液晶显示模组的显示屏上的每一个点都对应有SPLC501A片内的显示缓存RAM中的一个位,显示屏上64X128个点分别对应着显示RAM的8个Page,每一个Page有128个byte的空间对应。因此可知显示RAM区中的一个Page空间对应8行的点,

而该Page中的一个byte数据则对应一列(8个点),如图6.2所示。

图6.1 字节数据排列情况

29

图6.2 显示RAM区与显示屏点映射图

用户如要点亮LCD屏上的某一个点时,实际上就是对该点所对应的显示RAM区中的某一个位进行置1操作;所以就要确定该点所处的行地址、列地址。从上图中可以看出,SPLC501液晶显示模组的行地址实际上就是Page的信息,每一个Page应有8行;而列地址则表示该点的横坐标,在屏上为从左到右排列,Page中的一个Byte对应的是一列(8行,即8个点),达128列。

可以根据这样的关系在程序中控制LCD显示屏的显示。

6.3 凌阳显示模块应用

实验仪默认的连接方式是:DB0~DB7接到IOA0~IOA7;CS具体连接方式视实际情况而定。若端口复用,则CS可连接至IOB2,若无需端口复用,CS可简化连接至DGND;RESET接到系统的RESET,A0P接到IOB3,R/W接到IOB4,EP接到IOB5。背光选择“LIGHT”连接后,背光亮。

SPLC501C函数库中提供了34个函数,这些函数功能基本包括SPLC501C初始化、绘图、放置图片、和西文字符显示功能。本函数库,可作为图形、和文字输入部分程序底层程序,以加快项目进程。

30

程序IO口的设定:

液晶接口需要八根数据线和三根控制线。具体定义在splc501c_io.inc中进行完成,其中C_AOP_Pin、C_EP_Pin、C_RWP_Pin、C_DataBus分别定义了控制端口和数据端口的位选择。若数据端口选择IO口的高八位,则C_BusHighLow置1,否则置0。但应保证数据口使用IOA(或IOB)的高八位或低八位端口,且顺序连接。如液晶的DB0~DB7顺序连接至port.0~port.7或port.8~port.15。控制线同时安排在一个端口内,次序可随机设定。

例如:

//================================================================ //SPLC501C Library Pin Definition

//================================================================ //6800 Control Pin

//================================================================ //User can change any of control pins at any bit, except user select the IO port //of control pin the same as control bus.

//================================================================ // FEDCBA9876543210

//.define C_AOP_Pin 00100000000000b; //IO AOP //.define C_EP_Pin 01000000000000b; //IO EP

//.define C_RWP_Pin 10000000000000b; //IO as RWP // FEDCBA9876543210

.define C_AOP_Pin 0000000100000000b; //IO AOP .define C_EP_Pin 0000001000000000b; //IO EP .define C_RWP_Pin 0000010000000000b; //IO as RWP

//================================================================ //Define the SPLC Data Bus Pin //Only Two Type Can Select

//================================================================ // FEDCBA9876543210

.define C_DataBus 1111111100000000b; //IO Data Bus .define C_BusHighLow 1; //Set Data High/Low Byte 1:High //.define C_AddressBus 0000000011111111b; //IO Data Bus //.define C_DataBus 0000000011111111b; //IO Data Bus

31

//.define C_BusHighLow 0; //Set Data High/Low Byte 0:Low

//================================================================ //================================================================ //Set Control Pins Port

//================================================================ //Set Control Pins At Port A

.define P_IO_Control_Data 0x7000; //P_IOA_Data .define P_IO_Control_Buffer 0x7001; //P_IOA_Buffer .define P_IO_Control_Dir 0x7002; //P_IOA_Dir .define P_IO_Control_Attrib 0x7003; //P_IOA_Attrib

//================================================================ //Set Control Pins At Port B

//.define P_IO_Control_Data 0x7005; //P_IOB_Data //.define P_IO_Control_Buffer 0x7006; //P_IOB_Buffer //.define P_IO_Control_Dir 0x7007; //P_IOB_Dir //.define P_IO_Control_Attrib 0x7008; //P_IOB_Attrib

//================================================================ //================================================================ //Set Control Bus Port

//================================================================ //Set Control Bus At Port A

//.define P_IO_Data_Data 0x7000; //P_IOA_Data //.define P_IO_Data_Buffer 0x7001; //P_IOA_Buffer //.define P_IO_Data_Dir 0x7002; //P_IOA_Dir //.define P_IO_Data_Attrib 0x7003; //P_IOA_Attrib

//================================================================ //Set Control Bus At Port B

.define P_IO_Data_Data 0x7005; //P_IOB_Data

32

.define P_IO_Data_Buffer 0x7006; //P_IOB_Buffer .define P_IO_Data_Dir 0x7007; //P_IOB_Dir .define P_IO_Data_Attrib 0x7008; //P_IOB_Attrib

;=================================================================

以上设定数据口在IOB的高八位,控制线在IOA内。AOP—porta.8、EP—porta.9、R/WP—porta.a。当然控制线和数据线可以在一个端口。

程序中参数的说明:

1.位置参数是在一个字节范围内正整数,LCD显示范围x∈ [0,127], y∈[1,64]。 2.FG-Rectange、FG-Bar函数参数是先输入右下角点,再左上角点。如果次序错误,可能进入死循环。

3.函数模式一般通过模式设定函数进行设置。有的函数有模式参数,此时模式的设定只在本函数范围内。如果函数运行完成,下一个需要模式的函数如果未进行模式设定,那么这个函数的模式,由程序模式寄存器R_GraphicMode中的标志决定,和上一个函数中模式的设定无关。

例如:FG_PutBitmap(short BmpNum,short BmpX,short BmpY,short Mode) 4.如果模式参数错误,将无法正确设定模式。 5.如果位置参数错误或超出范围,将无法预料结果。 6.字体的宽度以在LCD上实际显示宽度为准。

7.有效西文字符ASCII范围[32,227]。如果错误,可能进入死循环。 以下程序是利用SPLC501C显示字符、图形的例子:

#include \"lab_parameter.h\" extern mode2; extern dance1; extern w1;

//============================================================= // 函数名称: main()

// 功能描述: 在LCD上显示文字、图形 // 语法格式: main() //入口参数: 无

33

// 出口参数: 无

// 注意事项: 仅为用户模型

//============================================================= main() {

Init_irq5(); Init_sys();

FG_InitGraphic(); FG_SetLineStyle(3); FG_Ellipse(60,30,15,15);

//画椭圆

FG_PutStr(\"I LOVE YOU!\ FG_PutStr(\"SUNPLUS\//送字串

F_Delay(); FG_ClearScreen(1);

//以全黑清屏 FG_PutPixel(30,30); FG_ClearScreen(0); FG_PutPixel(30,30); F_Delay(); FG_ClearScreen(1); FG_PutPixel(30,30,1); FG_ClearScreen(0); FG_PutPixel(30,30,1); FG_ClearScreen(1); FG_PutPixel(30,30,2); FG_ClearScreen(0); FG_PutPixel(30,30,2); FG_SetLineStyle(0);

FG_PutPixel(30,29);

34

FG_SetBMPMode(DG_BMP_COVER); FG_ClearScreen(1); F_Delay();

FG_PutBitmap(&mode2,127,64); //画点图,点图信息在于mode2中

FG_ClearScreen(0);

FG_PutBitmap(&mode2,127,64); FG_SetBMPMode(DG_BMP_CLEAR); FG_ClearScreen(1);

FG_PutBitmap(&mode2,127,64); FG_ClearScreen(0);

FG_PutBitmap(&mode2,127,64); FG_SetBMPMode(DG_BMP_XOR); FG_ClearScreen(1);

FG_PutBitmap(&mode2,127,64); FG_ClearScreen(0);

FG_PutBitmap(&mode2,127,64); FG_ClearScreen(1); F_Delay();

FG_GetCharHeight(\"a\FG_GetCharHeight(\"a\FG_GetCharHeight(\"a\FG_GetCharHeight(\"a\FG_GetCharHeight(\"a\

FG_SetLineStyle(DG_LINE_HOLLOW_ERASE); FG_Rectangle(10,10,30,40); FG_SetLineStyle(0);

FG_PutPixel(30,30); FG_SetLineStyle(0);

//修改画线类型

//画框 35

}

FG_PutPixel(30,29);

FG_SetLineStyle(DG_RECT_DOTTED); FG_Rectangle(10,10,30,40);

7 报警探测装置

报警探测装置是整个智能家庭安防报警系统的输入,是本系统重要的组成部分。本设计中采用三种报警探测装置,门磁探测器、火灾探测器和燃气探测器。

表7.1 YHAF-T221无线门磁探测器

功能 主要技术参数 工作电压:DC12V 工作电流:8-20mA 静态电流:3uA 防盗检测 工作频率:315MHz(260-440MHz频率可选) 感应间隔:6秒-3分种自行设定 编码类型:固定码/滚动码 编码方式:焊盘 36

外型尺寸(宽*高*厚):71×36×15mm 外壳颜色:白色 请尽量安装在上面或隐蔽的地方 安装说明 主件和副件安装间隙应≤2mm 主要用于门、窗或物体分离的探测报警 表7.2 YHAF-Y281无线烟雾探测器

功能 主要技术参数 工作电压:DC9V 工作电流:15-130mA 火情检测 静态电流:15uA 工作频率:315MHz(260-440MHz频率可选) 编码类型:固定码/滚动码 外型尺寸(直径*厚):180×38mm 安装说明 请尽量安装在需要探测区域的中间 表7.3 YHAF-Y282无线燃气探测器

功能 主要技术参数 工作电压:220V 工作电流:180mA 发射距离:200米 燃气检测 工作频率:315MHz(260-440MHz频率可选) 编码类型:固定码/滚动码 外型尺寸(长*厚):110×45mm 安装说明 无线燃气探测器请尽量安装在厨房 门窗一般是窃贼要进入室内的必经之路,必须要有可以报警的第一道防线。门磁开关就是一种可靠廉价的报警设备,可对家庭和重要场所提供基本的保护。一旦安装于门框上磁控开关错位离开,则立即发出报警信号。

火灾是发生频率较高的灾害,无论是电气设备、吸烟不慎、人为等原因都可能引发楼宇火灾。所以火灾报警宜早不宜迟,在火灾发生的初始阶段及时报警,及时

37

采取灭火措施最好。火灾发生大多是由局部物体的燃烧开始的,燃烧会产生烟雾、热量及火焰。因此,通过检测烟雾、温度异常(如室温超过50-60'C),就可以判断火情,及时发出火灾报警,以便能有效的扑灭火源,免于成灾。

根据家居环境特点,其发生火灾均属于A类火灾,即火灾发生初期,会产生大量的烟雾。因此,为了完成自动监测火灾发生,采用了感烟探测器(离子感烟探测器)作为智能安防报警控制器自动检测室内火灾发生的传感器。

可燃气体包括天然气、煤气、烷等,当其在某场所的浓度超过一定值时,偶遇明火便会发生燃烧或爆炸,是非常危险的。室内用的煤气或液化天然气发生泄露时,也会造成煤气中毒等人员伤亡事件。可燃气体探测器用在可燃气体存在的场所,是防止火灾或保安的一项重要措施。可燃物质燃烧时除有大量烟雾、热量和火灾之外,还有许多可燃性气体产生,如一氧化碳、氢气、甲烷等等。利用可燃气体探测器监测这些可燃气体的浓度值,即时发出火灾报警信号,即时采取灭火措施,是非常必要的,所以安防系统不能缺少可燃气体探测器。

本系统选用的报警探测装置技术参数如表7.1、7.2和7.3所示。

结论

本设计是基于凌阳实验仪设计,并配合双音多频收发器MT8888和放大芯片LM358等电子元器件搭建的外围芯片的智能家庭安防报警系统。

本智能家庭安防报警系统最主要的特点是将防盗和防火等多种异常情况报警功能集成于一体,结构简单,性能可靠,工作稳定,解决了当今市场上同类产品功能单一,误报率高和价格相对偏高的问题,填补了市场的空白,有很好的市场前景。

系统采用的双音多频收发芯片MT8888兼具DTMF信号收发和电话信号音检测,所以只要增加一些简单的电路就可以扩展出更多实用的功能,比如增加红外收发装置后可以实现通过电话对某些家用电器的远程控制,这样整个系统功能将会更加完善。功能上如此高的扩展性更进一步加强了本系统的性价比。

在未来的社会里,安防数字化会朝着高度智能化和高度系统集成化和网络化的方向发展。我们有理由相信,在不久的将来,将会有更多性能稳定、性价比高、人性化、数字化的智能安防产品出现在我们的生活中,我们的家居环境也会由此变得

38

更加的安全与和谐。与此同时,我国的安防产业也必将会在新的世纪里有更加长足的发展

谢辞

经过此次毕业设计巩固和加深了此前学习的专业知识的理解,对本专业有了进一步的认识。毕业设计的过程中不仅仅需要接触并掌握许多陌生的知识,在自己动手制作外围电路时还锻炼了实践能力,真正认识到理论与实践的差距。即使理论上可行,但在具体实践的过程中很可能出现各种各样的问题,而且任何一个小问题都可能导致实验的失败。

无论软件还是硬件的调试都应该分成一块一块进行,这样有利于找出问题。如果整体一起调试,出现问题时都很难找到问题的源头。调试的过程也锻炼了坚持不懈、严谨求实的精神,获得了很大的收获。此次毕业设计中经常碰到不熟悉的知识,要求有相当的查资料和自学的能力和态度。利用其间学到的知识,不仅有利于完成毕业设计,更增长了自己的见识开阔了自己的眼界,扩充了自己的知识面。

本毕业论文是在电气与自动化工程学院董学平老师的精心指导下完成的,他的严谨的治学态度、求实的工作作风给我留下了深刻的印象,在此对董老师表示衷心

39

的感谢和敬意。

[参考文献]

[1] 张培仁等:《十六位单片微处理器原理及应用(凌阳SPCE061A)》,清华大学出

版社,(2005),18-52,60-63,130-163,226-260,280-286

[2] 代新鹏:王书茂.MT8888在家庭安全自动报警系统中的应用,微计算机信息,

21卷,5期,(2005),113-114 [3] 杨霖,范寿康:双音多频接收发送器MT8888C及其应用,军事通信技术,21卷,

3期,(2000),52-56

[4] MT8888C-Integrated DTMF Transceiver with Intel Micro Interface. MITEL,

(1999) [5] 温强,赖志昌,王丽慧:双音多频发送接收器MT8888及其应用,自动化技术

与应用,19卷,2期,(2000),47-51

[6] 张立臣:DTMF信号收、发芯片MT8888原理及应用,国外电子元器件,2001年

9期,30-31

[7] 吕仁礼,周金和,李茂详:电话DTMF数据收发模块的设计,电子技术应用,24卷,4期,(1998),46-48 [8] 张德民等:《电话机原理与维修》,重庆:西南师范大学出版社,(2002),38-56

40

[9] LM158/LM258/LM358/LM2904-Low Power Dual Operational Amplifiers

National Semiconducter January 2000 [10] 侯继红:《Protel 99SE中文版实用技术教程》,北京:中国电力出版社,(2004),

11-71

[11] 吴国凤等:《C语言程序设计教程》,中国科技大学出版社,(2003),36-60,

88-115

41

附录1 系统硬件电路图

42

43

44

附录2 源程序

#include \"A2000.h\" #include \"SPCE061V004.H\" #include \"lab_parameter.h\" unsigned int i,j,status; unsigned int type; //status( 报警输入状态)

unsigned int hm[7]={0x4000,0x6000,0x5000,0xa000,0x6000,0x3000,0x2000}; unsigned int result,ys,n,SR,num,point=100;

//======MT8888初始化========================================== void InitialMT8888() {

void InitialARD(); void InitialAWR(); //1.读状态寄存器SR //Set_IOB_Data(0x0001);

InitialARD();//初始化A口读,(输入)

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RS0=1 Set_IOB_Buffer(Get_IOB_Buffer()&0xcfff);//RS0=1,RD=0 ys=0;//RD=0

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RD=1 ys=0;//RD=1

SR=Get_IOA_Data();//读状态寄存器 ys=0;

//2.写CRA=0000B

InitialAWR();//初始化A口写,(高电平输出) Set_IOA_Buffer(0x0000);//写CRA=0000B

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RS0=1

45

Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//WR=0 ys=0;//WR=0

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 ys=0;//WR=1 //3.写CRA=0000B Set_IOA_Buffer(0x0000);

Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//WR=0 ys=0;//WR=0

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 ys=0;//WR=1 //4.写CRA=1000B Set_IOA_Buffer(0x8000);

Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//WR=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 ys=0;

//5.写CRB=0000B Set_IOA_Buffer(0x0000);

Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//WR=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 ys=0;

//6.读状态寄存器SR InitialARD();

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RS0=1 Set_IOB_Buffer(Get_IOB_Buffer()&0xcfff);//RD=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RD=1

46

ys=0;

SR=Get_IOA_Data();//读状态寄存器 Watchdog_Clear(); }

//======A口初始化D3-D0为悬浮输入,D3-D0,IOA15-IOA12 void InitialARD() {

Set_IOA_Dir(0x0000); Set_IOA_Attrib(0xf000); Set_IOA_Data(0x0000);

}

//======A口初始化D3-D0为高电平同相输出,D3_D0,IOA15-IOA12 void InitialAWR() {

Set_IOA_Dir(0xf000); Set_IOA_Attrib(0xf000); Set_IOA_Data(0xf000);

}

void Delay() {

unsigned int t2; for(t2=0;t2<15;t2++) { ys=0;

}

}

//************延时1.5s,摘机后延时***************** void Delay4()

47

{

unsigned int t2; for(t2=0;t2<3;t2++) { F_Delay(); Watchdog_Clear();

}

}

//=========延时5S================================ void Delay5() {

unsigned int t2; for(t2=0;t2<11;t2++) { F_Delay(); Watchdog_Clear();

}

}

//========延时8s================================= void Delay7() {

unsigned int t2; for(t2=0;t2<16;t2++) { F_Delay();

Watchdog_Clear(); } }

48

//========长延时================================= void Delay10() {

unsigned int t; for(t=0;t<20;t++) }

//========延时30S======================= void Delay30() {

unsigned int t; for(t=0;t<60;t++) { }

//B口初始化IOB7-IOB4低电平输入,IOB3,IOB2为悬浮输入,IOB0为低电平输出 //IOB1为低电平输出,IOB15-IOB13为RS0, WR,RD,高电平输出,IOB11~8带下拉电阻输入 void InitialB() {

Set_IOB_Dir(0xe003); Set_IOB_Attrib(0xe00f); Set_IOB_Data(0xe000); }

F_Delay(); Watchdog_Clear(); } {

F_Delay(); Watchdog_Clear(); }

49

//=放音程序***======================================= void PlayRespond(unsigned int dex) {

SACM_A2000_Initial(1); SACM_A2000_Play(dex,3,3);

while((SACM_A2000_Status()&0x0001) != 0) {

Watchdog_Clear();

SACM_A2000_ServiceLoop();

}

SACM_A2000_Stop(); }

//===自动摘机程序============================== void zidongzhaiji() {

unsigned int temp1; Watchdog_Clear(); temp1=Get_IOB_Buffer(); Set_IOB_Buffer(0x0001|temp1); }

//====自动挂机程序========================== void zidongguaji() {

unsigned int temp2; Watchdog_Clear(); temp2=Get_IOB_Buffer(); Set_IOB_Buffer(0xfffe&temp2); }

50

//=====拨号前准备,写控制寄存器================ void bohaozb() {

void InitialAWR(); //写控制寄存器

//1.写CRA=1001B,TONE OUT能输出DTMF模式,不允许中断,下次写CRB Watchdog_Clear(); InitialAWR();

Set_IOA_Buffer(0x9000);

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RS0=1 Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//RS0=1,WR=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 //2.写CRB=0000B,设定为突发模式 Set_IOA_Buffer(0x0000);

Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//WR=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 }

//===========读状态寄存器==================== void readsr() { Watchdog_Clear(); InitialARD();

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RS0=1 Set_IOB_Buffer(Get_IOB_Buffer()&0xcfff);//RS0=1,RD=0 ys=0;//

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RD=1

51

ys=0;

}

//=============写发送寄存器动作========== void wrjcq() { Set_IOB_Buffer(Get_IOB_Buffer()|0x7000);//RS0=0 Set_IOB_Buffer(Get_IOB_Buffer()&0x7fff);//RS0=0 Set_IOB_Buffer(Get_IOB_Buffer()&0x2fff);//RS0=0,WR=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0x7000);//RS0=0,WR=1

}

//=====自动拨号程序================================= void zidongbohao() { i=0; n=7;

InitialMT8888();

//=========循环拨号码============================= while(iInitialAWR();//A口高电平输出

Set_IOA_Buffer(num); wrjcq();//写发送寄存器

Watchdog_Clear();

52

F_Delay(); do {

readsr();//读状态寄存器SR }

while((Get_IOA_Data()&0x2000)!=0x2000);

}

}

//==============信号音检测初始化====================== void xinhaoInitial() {

void InitialAWR();

//1.写CRA=1110B,TONE OUT不能输出,CP模式,允许中断,下次写CRB Watchdog_Clear();

InitialAWR();//初始化A口写 Set_IOA_Buffer(0xe000);

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//RS0=1 Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//RS0=1,WR=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 //2.写CRB=0001B Set_IOA_Buffer(0x1000);

Set_IOB_Buffer(Get_IOB_Buffer()&0xafff);//WR=0 ys=0;

Set_IOB_Buffer(Get_IOB_Buffer()|0xe000);//WR=1 ys=0; }

//==============信号音检测============================

53

xinhaoyinjc() {

void xinhaoInitial(); point=100; result=0;

xinhaoInitial();//信号音检测初始化

while(Get_IOB_Data()&0x0008)//IOB3为信号音检测输入脚,悬浮输入,EXT2 ;//如

IOB3为1,则一直循环等待;若IOB1为0了,则启动计数器计数5s

Set_TimerA_Data(0x0000);//初值设为0

Set_TimerA_Ctrl(0x003d);//对EXT2开始计数,来自IOB3 Delay5();//延时5S

Set_TimerA_Ctrl(0x003e);//停止计数 result=Get_TimerA_Data();//读计数结果

//大于1792为拨号音,1024~1791为忙音,256~1023为回铃音,小于255无信号音 if(result>1791)//拨号音(2250)? { point=0;

}

else if((result>1024)&&(result<=1791))//为忙音(1125)? { point=1;

}

else if((result>256)&&(result<=1024))//为回铃音(450)? { point=2;

}

else//<=256

{

54

point=3;

}

}

//******主程序********************************* main () {

asm(\"IRQ OFF\");//关中断

InitialB();//B口初始化

InitialMT8888();//MT8888初始化

while(1)//大循环; {

asm(\"INT IRQ\");//开中断 Set_INT_Ctrl(0x0100);//设置屏蔽,开EXT1(IOB2) SR=0; type=0;

Watchdog_Clear();//清看门狗

FG_InitGraphic();

status=Get_IOB_Data();

if(status&0x0020)//盗警? {

F_Delay();//防抖动延时 if(Get_IOB_Data()&0x0020) {

type=1;

FG_PutStr(\"SOMEONE BREAK IN\ }

}

if(status&0x0040)//火警?

55

{

F_Delay();//防抖动延时 if(Get_IOB_Data()&0x0040) {

type=2;

FG_PutStr(\"FIRE ALARM\ }

}

if(status&0x0080)//燃气报警? { F_Delay();//防抖动延时 if(Get_IOB_Data()&0x0080) {

type=3;

FG_PutStr(\"GAS ALARM\ }

}

if(type)//有报警 { asm(\"IRQ OFF\"); //关中断 PlayRespond(type-1);//第一次放音 for(i=0;i<0xffff;i++);

PlayRespond(type-1);//第二次放音 for(i=0;i<0xffff;i++);

PlayRespond(type-1);//第三次放音 for(i=0;i<0xffff;i++); loop: zidongzhaiji();

Delay4();//摘机后延时

56

zidongbohao();//自动拨号 F_Delay();//延时

xinhaoyinjc();//信号音检测

//判断,0为拨号音,1为忙音,2为回铃音,3为无信号音 switch(point)

{ case 0://拨号音,没拨通,挂机重拨 { zidongguaji(); Delay4();//延时 goto loop; break;

}

case 1://忙音,没拨通,挂机重拨 { zidongguaji(); Delay4();//延时 goto loop; break; }

case 2://有回铃音,拨通了 { do {

xinhaoyinjc();//再检测信号音 }

while(point==2);

F_Delay();

57

PlayRespond(type-1);//第一次放音 for(i=0;i<0xffff;i++);

PlayRespond(type-1);//第二次放音 for(i=0;i<0xffff;i++);

PlayRespond(type-1);//第三次放音

FG_ClearScreen(1);

}

}

} }

for(i=0;i<0xffff;i++);

zidongguaji();

asm(\"INT IRQ\");//开中断 break;

}

case 3://无信号音,没拨通,挂机重拨 { zidongguaji(); Delay4();//延时 goto loop; break;

}

58

因篇幅问题不能全部显示,请点此查看更多更全内容