📄 dtmf.cpp
字号:
/*
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -