标题:
MT8880振铃检测摘机DTMF接收单片机程序
[打印本页]
作者:
晗晴微语
时间:
2016-10-25 10:32
标题:
MT8880振铃检测摘机DTMF接收单片机程序
振铃检测摘机DTMF接收程序
完整代码下载:
振铃检测摘机DTMF接收例程.rar
(17.48 KB, 下载次数: 51)
2016-10-25 10:31 上传
点击文件名下载附件
下载积分: 黑币 -5
部分源码预览:
//-----------------------------------------------------------------------------
// MT8880_DTMF_receiving.c
//-----------------------------------------------------------------------------
// Copyright 2017 尖峰学子.
//
// Program Description:
//
// 这是用于测试MT8880模块接收DTMF信号功能
// 首先,在手机拨打了号码后,通过振铃检测,自动摘机,
// 接收DTMF信号通过串口发送到PC机,并且通过P1上连接的LED来显示。通过按#号键可以远程关闭电话机
// 端口说明:
// P2^0--D0
// P2^1--D1
// P2^2--D2
// P2^3--D3
// P2^4--R/W
// P2^5--RSO
// P2^7--zj_control 控制摘挂机
// P3^2--zljc 检测振铃信号
// P3^3--IRQ 接收DTMF时产生中断信号接外部中断1
// P1 接八个led
//
// How To Test:
//
// 1) 将模块各个端口与单片机链接好;
// 3) 通过手机拨打该电话号码可以通过示波器观察振铃检测端ZLJC的信号;
// 2) 用手机拨打该电话后,运行程序后可按手机上号码;通过观察窗口可以发现接收到的数字正是你按下的键值
//
//
// 硬件要求: 51单片机 电话线 晶振:12M
// Target: MT8880 AND AT89C51
// Tool chain: Keil C51 7.50 / Keil EVAL C51
// Command Line: None
//-----------------------------------------------------------------------------
// Include Files
//-----------------------------------------------------------------------------
#include <reg51.h>
//-----------------------------------------------------------------------------
// Global Constants
//-----------------------------------------------------------------------------
#define uchar unsigned char
#define uint unsigned int
sbit zj_control=P2^7;//控制摘挂机;
uchar rx_num; //接收数据寄存器;
uchar ring_num; //振铃次数;
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
void initialize(void); //MT8880芯片初始化函数
void rece_init(void); //MT8880接收初始化函数
void StartUART( void );//串口初始化函数
void R_S_Byte(uchar R_Byte);//串口发送子函数
//-----------------------------------------------------------------------------
// /* 主函数(主程序) */
//-----------------------------------------------------------------------------
void main(void)
{
P2=0xff; //端口初始化
StartUART(); //串口初始化
initialize(); //MT8880芯片初始化子函数;
rece_init(); //接收初始化子函数;
zj_control=1;
for(;;) ; //等待接收
}
//-----------------------------------------------------------------------------
// /* MT8880芯片初始化子函数 */
//-----------------------------------------------------------------------------
void initialize(void)
{ P2=0x3f; /* 读SR */
P2=0x20; /* CRA=0000 */
P2=0x20; /* CRA=0000 */
P2=0x28; /* CRA=1000 */
P2=0x20;
} /* CRB=0000 */
//-----------------------------------------------------------------------------
// /*接收初始化子函数 */
//-----------------------------------------------------------------------------
void rece_init(void)
{
P2=0x24; /* CRA=0100 */ //设置为 DTMF收发模式
EA=1; //开总中断
ES=1; //开串口接收中断
EX0=1; //开外中断0:用于检测振铃信号
IT0=1; // 边沿触发
EX1=0; //关外中断1:用于接收DTMF信号
IT1=1; //边沿触发
}
//-----------------------------------------------------------------------------
// /*振铃检查中断服务程序 */
//请先用示波器测试振铃信号端,在有电话拨入的时候,是否产生了振铃信号再接入单片机
//入接入号不能产生中断信号,考虑是否下拉信号比较入,可考虑接个下拉电阻。
//-----------------------------------------------------------------------------
void int0(void) interrupt 0
{
ring_num++;//每次振铃将会参数25个左右的中断脉冲,
R_S_Byte(11);//发送一个0x0B到串口;
if(ring_num>=50) //在振铃响三下的时候自动摘机。
{
ring_num=0;//清除振铃计数寄存器
zj_control=0; //有来电自动摘机
EX0=0;//关闭外部中断0
EX1=1;//开外部中断1 准备接收DTMF信号
}
}
//-----------------------------------------------------------------------------
// /*dtmf接收中断服务程序 */
//-----------------------------------------------------------------------------
void int1(void) interrupt 2
{ P2=0x3f; /* 读SR */
P2=0x1f; /* 读RDR */
rx_num=P2&0x0f; //读取数据,存入接收寄存器中;
R_S_Byte(rx_num); //将接收到的DTMF信号转为数字后通过串口发送到PC机;
P1=rx_num; //通过P1端口上的LED显示接收到的数据;
//也可如此通过控制IO口的方式进而控制继电器的开关,达到控制电器的目的
if(rx_num==12) //#号键远程关闭电话机。
{
zj_control=1; //按#号键远程关闭电话机
EX0=1;//打开外部中断0 ,再次进入振铃检查
EX1=0;//关闭外部中断1
}
//此处程序可以发挥,加入密码识别,家电控制,语音提示信号切入,等等
}
//-----------------------------------------------------------------------------
// /* 串口初始化子函数 */
//-----------------------------------------------------------------------------
void StartUART( void )
{ //波特率9600
SCON = 0x50; //串口工作方式选择,选择在工作方式1
TMOD = 0x20;
TH1 = 0xfd;
TL1 =
………………
………………
复制代码
MT8880模块资料:
http://www.51hei.com/bbs/dpj-57219-1.html
作者:
admin
时间:
2016-10-25 14:25
51黑有你更精彩!!!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1