|
从论坛中参考hendry的DTMF软解码程序,但是在使用时始终不间断输出,在电话摘机时按键,串口接收的DTMF解码结果如下:
6666111#####11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111166611777**#####7777788800000**77788999000007777700#####8887788800###7777788888000008877700###DD88877888#####8877788000##0008877788###DD8887788800666AA333##999##########99###############################################################################################999#####00########88111BB000##88899555111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111CC666##AAA99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999966AAA66BBB1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111AAA5#006666666666666663366666666666666666666666666666666666666666666666666666666666666666666666666666666666662227774411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111BB446666666633333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333336663322233555992224411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116
实际DTMF按键为:#、9、6、3
想进行数字滤波处理一下,思路是:连续解码5次,只有连续5次一致时、且不为0时再串口输出,但是一滤波处理,解码数组就变成了0x00不知为何?检查了几遍也没看出问题!哪位高人给看一下!谢谢了!尤其欢迎hendry给出意见
void output_dtmf(void)
{
signed char ch;
unsigned char i, j;
unsigned char ch_num[5];
init_dtmf_decoder(); // 初始化解码器
j = 0;
sei();
do
{
for(i=0;i<5;i++)
{
if(!is_fifo_empty())
{
ch = read_fifo();
ch += -128;
ch_num = decode_dtmf(ch);
}
/* 验证输出测试 1 */
transmitByte(ch_num); // 解码结果正常输出!
}
for(i=0;i<5;i++) // 一致性比较
{
/* 验证输出测试 2 */
transmitByte(ch_num); // 输出为NULL!即ch_num变为0!
if(ch_num[0]==ch_num)
{
j++;
/* 验证输出测试 3 */
transmitByte(ch_num); // 输出为NULL!即ch_num变为0!
}
else
{
j = 0;
break;
}
}
if((j==4) && (ch_num[0]!=0))
{
transmitByte(ch_num[0]); // 没有输出!因为是NULL!即ch_num变为0!
j = 0;
}
} while( !(PINB & _BV(PB3)) );
cli();
}
这是hendry的DTMF软解码参考程序:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3231035&bbs_page_no=1&search_mode=1&search_text=软解码&bbs_id=1000 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|