dtmf.cpp
来自「包括傅里叶变换和傅里叶反变换」· C++ 代码 · 共 105 行
CPP
105 行
/*
GPE13(KSCAN2) DV
GPG6(KSCAN1) D3
GPF2(EINT2) D2
GPG11(EINT19) D1
GPF0(EINT0) D0
*/
#include "DTMF.h"
unsigned char DTMF_Init(void)
{
unsigned char receive_data=0;
_int32 b;
b = GetGPECON();
b &= ~((1<<26)|(1<<27));
SetGPECON(b);
b = GetGPEUP();
b &= ~(1<<13);
SetGPEUP(b);
b = GetGPFCON();
b &= ~((1<<4)|(1<<5)|(1<<0)|(1<<1));
SetGPFCON(b);
b = GetGPFUP();
b &= ~((1<<0)|(1<<2));
SetGPFUP(b);
b = GetGPGCON();
b &= ~((1<<12)|(1<<13)|(1<<22)|(1<<23));
SetGPGCON(b);
b = GetGPGUP();
b &= ~((1<<6)|(1<<11));
SetGPGUP(b);
if(GetGPEDAT() & (1<<13))
{
receive_data |= 0x10;
}
if(GetGPGDAT() & (1<<6))
{
receive_data |= 0x08;
}
if(GetGPFDAT() & (1<<2))
{
receive_data |= 0x04;
}
if(GetGPGDAT() & (1<<11))
{
receive_data |= 0x02;
}
if(GetGPFDAT() & (1<<0))
{
receive_data |= 0x01;
}
return(receive_data);
}
unsigned char ReadDTMF(unsigned char last_status,unsigned char *valid_data)
{
unsigned char receive_data=0;
*valid_data = 0;
if(GetGPEDAT() & (1<<13))
{
receive_data |= 0x10;
}
if(GetGPGDAT() & (1<<6))
{
receive_data |= 0x08;
}
if(GetGPFDAT() & (1<<2))
{
receive_data |= 0x04;
}
if(GetGPGDAT() & (1<<11))
{
receive_data |= 0x02;
}
if(GetGPFDAT() & (1<<0))
{
receive_data |= 0x01;
}
if((receive_data ^ last_status) & 0x10)
{
if(receive_data & 0x10)
{
*valid_data = 0x0f & receive_data;
}
return(receive_data);
}
return(last_status);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?