释放双眼,带上耳机,听听看~!
目录
介绍
- DTMF(双音多频)是一种电信信令技术,它使用两种纯音(纯正弦波)声音的混合。它在手机中用于生成拨号音。
- 每当按下一个键时,就会发送2个正弦波(较低频率和较高频率之一)的组合。有8种不同的频率,4种来自较高频率范围,4种来自较低频率范围。这为我们提供了16种不同的低频和高频组合,可以传输16个按键。
- MT8870是DTMF解码器; 它有助于解码按下的键。
- 它由bandsplit滤波器部分组成,有助于将输入信号分成较低频率和较高频率,从而有助于识别按下的按键。
- 它提供4位数字输出。这为16个不同的键提供了16种可能的输出。
- 微控制器可以读取这4位以检测按下了哪个键。
电路连接原理图
DTMF解码器与8051接口
例程
在这里,我们将MT8870 DTMF接收器/解码器模块连接到8051,它将从手机键盘接收按键输入并在LCD16x2显示器上显示解码键。
/*
* Interfacing DTMF with 8051
* https://www.qutaojiao.com
*/
#include<stdio.h>
#include<reg52.h>
#include<LCD_16x2_8-bit_Header_File.h>
#define DTMF_Input_Read P2
void External_Interrupt_Init();
volatile char Key_detect; /* flag to check Tone is received or not */
void main()
{
unsigned char DTMF_Key; /* variable to store detected key */
LCD_Init();
LCD_Clear();
DTMF_Input_Read = 0xff; /* set port as input */
LCD_String_xy(0,0,"DTMF Key:");
External_Interrupt_Init();
Key_detect = 0;
while(1)
{
MSdelay(1);
if(Key_detect) /* Key_detect = 1 indicates Tone Received*/
{
Key_detect = 0;
LCD_Command(0xc0);
DTMF_Key = 0;
DTMF_Key = (DTMF_Input_Read & 0x0f);
switch(DTMF_Key) /* detect received key*/
{
case 0x01: LCD_Char('1');
break;
case 0x02: LCD_Char('2');
break;
case 0x03: LCD_Char('3');
break;
case 0x04: LCD_Char('4');
break;
case 0x05: LCD_Char('5');
break;
case 0x06: LCD_Char('6');
break;
case 0x07: LCD_Char('7');
break;
case 0x08: LCD_Char('8');
break;
case 0x09: LCD_Char('9');
break;
case 0x0A: LCD_Char('0');
break;
case 0x0B: LCD_Char('*');
break;
case 0x0C: LCD_Char('#');
break;
}
}
}
}
void External_Interrupt_Init()
{
EA = 1; /* Enable global interrupt */
EX0 = 1; /* Enable Ext. interrupt0 */
IT0 = 1; /* Select Ext. interrupt0 on falling edge */
}
/* ISR is used to check tone is received or not */
void External0_ISR() interrupt 0
{
Key_detect = 1; /* Toggle pin on falling edge on INT0 pin */
}
本教程完整程序下载: