一种使用单片机产生dtmf按键提示音的方法

文档序号:7938824阅读:619来源:国知局
专利名称:一种使用单片机产生dtmf按键提示音的方法
技术领域
本发明涉及DTMF按键提示音技术领域,特别是涉及一种使用单片机产生DTMF按键提示音的方法。
背景技术
双音多频DTMF(Dual Tone Multi Frequency)是一种在话音信道用音调来表示数字的方法,它可以用来在模拟话音信道传输信令,因此在通信中有广泛的应用。双音多频 DTMF(Dual Tone Multi Frequency),由高频群和低频群组成,高低频群各包含4个频率,如表一所示表一
低群 /Hz高群/Hz1209133614771633697123A770456B852789C941氺0#D一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字,例如将 770Hz的低频带与1336Hz的高频带组合代表数字5。因此,每个电话号码的数字具有唯一的低频带和高频带的组合,从而形成DTMF信号。在单片机系统中,按键是普遍使用的输入设备,当前DTMF按键提示音多是通过外接语音芯片或预先存储声音数据的方式实现,除了需要软件进行控制外,它们均需要额外的语音芯片或存储芯片等硬件资源。

发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种使用单片机产生DTMF 按键提示音的方法,用于解决现有技术中DTMF按键提示音只能通过外接语音芯片或预先存储声音数据的方式实现的问题。为实现上述目的及其他相关目的,本发明提供一种使用单片机产生DTMF按键提示音的方法,所述的方法包括(1)根据需要的DTMF信号,分别确定高频频率fh和低频频率Π ;(2)在单片机程序中建立数组A和数组B,数组A元素个数为对采样率除以高频频率fh的结果取整,数组B元素个数为对采样率除以低频频率Π的结果取整;数组A各元素的取值为在一个周期为Ι/fh的正弦波形内的采样点值;数组B各元素的取值为在一个周期为Ι/fl的正弦波形内的采样点值;将数组A和数组B存储在单片机内部存储器内;(3)当检测到有按键被触发时,启动单片机中的中断,在设定的叠加时间内将数组 A和数组B的两组元素进行循环叠加,并利用叠加结果产生PWM信号输出;(4)将输出的PWM信号经模拟滤波器后输送给驱动器,即可驱动发声设备得到所需的DTMF按键提示音;(5)DTMF按键提示音发音完毕,关闭单片机中的中断。优选地,所述数组A和数组B的两组元素循环叠加的具体方法为数组Ab1 j 3-2 ? · · · ‘ ^k+I ‘ · · ·
aj ;数组 B Od1, b2, . . . bm, bm+1, . . . bn};将数组A的每一个元素乘以一个叠加系数c (其中0 < c < 1),得到A1 {a^c, a2*c, . . . ak*c, ak+1*c, . . . am*c};将数组B的每一个元素乘以系数(1-c),得到B1 Ib1* (1-c),b2* (1-c),· · · bm* (1-c),bm+1* (1-c),· · · bn* (1-c)};然后再将两数组的元素循环叠加;将数组A1的第一个元素 *c与数组B1的第一个元素b^d-c)叠加,A1的第二个元素 *c和B1的第二个元素ID2* (1-c)叠加,依次进行,A1的最后一个元素am*c与B1的第 m元素bm* (1-c)叠加,然后A1的第1个元素 处与B1的第m+1个元素bm+1*(l-c)叠加,依次进行,直到A1的第k个元素ak*c与B1的最后一个元素bn* (1-c)叠加,之后A1的第k+1 个元素ak+1*c与B1的第一个元素b^a-c)叠加,这样依次进行下去,直到达到设定的叠加次数,其中k<m<n。优选地,所述数组A和数组B元素的取值范围均为W 2n];所述的数组A和数组 B元素叠加后的取值范围在W 2n],其中,η为正整数。优选地,,所述数组A和数组B均为一维数组。优选地,所述DTMF按键提示音发音完毕的时间包含数组A和数组B的叠加总时间和叠加完成后到中断关闭前的空闲时间。优选地,所述数组A和数组B的叠加次数为数组A和数组B的叠加总时间/数组 A和数组B的单次叠加时间。优选地,所述的采样点值呈正弦规律分布。优选地,所述的正弦波采用y = 2nsin( x)的函数,其中,η为正整数。如上所述,本发明的一种使用单片机产生DTMF按键提示音的方法,具有以下有益效果省去了外接语音芯片或存储芯片,简化单片机系统的硬件电路,利用单片机本身的资源,采用定时器中断,将按正弦波分布的两个数组进行叠加产生PWM信号的方式生成 DTMF按键提示音,本发明的方法简单实用,使需要产生DTMF按键提示音的系统更易实现小型化,同时节省了成本。


图1显示为本发明方法流程图。
图2显示为本发明方法的中断处理流程图。图3显示为PWM信号转换为所需的DTMF按键提示音流程图。元件标号说明S11-S15, S141-S144 步骤
具体实施例方式以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式
加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。请参阅图1至图3。需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。如图1所示,本发明为一种使用单片机产生DTMF按键提示音的方法,所述的方法包括步骤Sl 1,根据需要的DTMF信号,分别确定高频频率fh和低频频率Π ;由于一个数字只对应一个唯一的DTMF信号,并且每个数字对应的高频频率和低频频率已经固定,所以只要对照DTMF信号的频率表,即可确定高频频率fh和低频频率Π 的具体数值;步骤S12,在单片机程序中建立数组A和数组B,并确定数组A和数组B的元素个数及元素值,为方便叠加,数组A和数组B应为一维数组;确定数组A和数组B的元素个数数组A元素个数为对采样率除以高频频率fh的结果取整,数组B元素个数为对采样率除以低频频率Π的结果取整;确定数组A和数组B的元素值可采用y = 2nsin (ω χ)函数,根据数组A个数在一个周期为Ι/fh的正弦波形内采样取值,为保证DTMF按键提示音的音质,采样取值的采样点值应尽量均勻,并使得所述的采样点值呈正弦规律分布;可采用y = 2η8 η(ωχ)函数,根据数组B的元素个数在一个周期为1/fl的正弦波形内采样取值,为保证DTMF按键提示音的音质,采样取值的采样点值应尽量均勻,并使得所述的采样点值呈正弦规律分布;数组A和数组B元素的取值范围均为W 2n];并将数组A和数组B存储在单片机内部存储器内;步骤S13,当检测到有按键被触发时,启动单片机中的中断;步骤S14,开启单片机中的中断之后,响应按键,包括在设定的叠加时间内将数组 A和数组B的两组元素进行循环叠加,并利用叠加结果产生PWM信号输出;所述数组A和数组B的两组元素循环叠加的具体方法为数组Ab1 j 3-2 ? · · · ‘ ^k+I ‘ · · ·
aj ;数组 B Od1, b2, . . . bm, bm+1, . . . bn};将数组A的每一个元素乘以一个叠加系数c (其中0 < c < 1),得到A1 {a^c, a2*c, . . . ak*c, ak+1*c, . . . am*c};将数组B的每一个元素乘以系数(1-c),得到B1 Ib1* (1-c),b2* (1-c),…bm* (1-c),bm+1* (1-c),…bn* (1-c)};
然后再将两数组的元素循环叠加;将数组A1的第一个元素 *c与数组B1的第一个元素Id1* (1-c)叠加,A1的第二个元素 *c和B1的第二个元素ID2* (1-c)叠加,依次进行,A1的最后一个元素am*c与B1的第 m元素bm* (1-c)叠加,然后A1的第1个元素 处与B1的第m+1个元素bm+1*(l-c)叠加,依次进行,直到A1的第k个元素ak*c与B1的最后一个元素bn* (1-c)叠加,之后A1的第k+1 个元素ak+1*c与B1的第一个元素b^d-c)叠加,这样依次进行下去,直到达到设定的叠加次数,其中k<m<n。所述数组A和数组B的叠加次数为数组A和数组B的叠加总时间除以数组A和数组B的单次叠加时间;叠加总时间和数组A和数组B的单次叠加时间应根据单片机的性能及所需DTMF按键提示音的长短高低预先设定;将输出的PWM信号经模拟滤波器后输送给驱动器,即可驱动发声设备得到所需的 DTMF按键提示音;DTMF按键提示音发音完毕,关闭单片机中的中断;所述DTMF按键提示音发音完毕的时间包含数组A和数组B的叠加总时间和叠加完成后到中断关闭前的空闲时间,这一空闲时间应预先设定。综上所述,本发明提供的一种使用单片机产生DTMF按键提示音的方法,根据DTMF 信号的特点,在单片机内部,利用中断,通过设定与DTMF信号频率相对应的按正弦波分布的两个数组进行循环叠加产生PWM信号,从而得到所需的DTMF按键提示音。实施例本发明以使用MSP430F147单片机产生持续120ms (即叠加总时间为120ms),断开 50ms(即叠加完成后到中断关闭前的空闲时间为50ms),采样精度为8_bit,η的取值为8 ; 采样率为32k的按键数字“5”的DTMF按键音为例,说明具体的实施方案,假设单次叠加时间为IOus 如图1所示步骤S11,确定高频频率和低频频率,根据DTMF信号可知,数字“5”对应的高频频率fh为1336Hz,低频频率fl为770Hz ; 步骤S12,在单片机程序中建立数组A和数组B,数组A元素个数为对采样率除以高频频率fh的结果取整,即数组A的元素个数为int (32kHz/1336Hz) = M个;数组B元素个数为对采样率除以低频频率fl的结果取整,即数组B的元素个数为int(32kHz/770)= 41个。数组A和数组B均为一维数组;数组A各元素的取值为在一个周期为Ι/fh的正弦波形内的采样点值;数组B各元素的取值为在一个周期为Ι/fl的正弦波形内的采样点值; 应保证数组A和数组B元素的取值范围均为W 28],数组A和数组B元素叠加后的取值范围在W 28];并且使得这两组整数都按正弦趋势变化且在一个正弦周期内的分布尽量均勻,具体可使用y = 28sin( x)函数产生数组A和数组B的元素值,然后稍加调整即可可选数组A和数组B的元素为下面的两组元素A = {0x04,OxOE,0x018,0x22,0x2C,0x38,0x40,0x4A,0x54,0x5E,0x68,0x72, 0x7C,0x86,0x90,0x9A,0XA4,OxAE,0XB8,0XC2,0XD4,0ΧΕ0,OxEC,0XF8};B = {0x02,0x08,OxOE,0x14,OxlA,0x20,0x26,0x2C,0x32,0x38,0x3E,0x44, 0x4A,0x50,0x56,0x5C,0x62,0x68,0x6E,0x74,0x7A,0x80,0x8A,0x8E,0x94,0x9A,OxAO,0XA6,OxAE,0XB4,OxBA,OXCO,0XC6,OxCC,0XD2,0XdD8,OxDE,0XE4,OxEA,OXFO,0XF6};将数组A的每一个元素乘以一个叠加系数c,c取为0. 5,得到A1 = {0x02, 0x07,OxOC,Oxll,0x16,OxlB,0x20,0x25,0x2A,0x2F,0x34,0x39, 0x3E,0x43,0x48,0x4D,0x52,0x57,0x5C,0x61,0x6A,0x70,0x76,0x7C};将数组B的每一个元素乘以系数(1-c),得到B1 = {0x01,0x04,0x07,OxOA,OxOD,0x10,0x13,0x16,0x19,OxlC,OxlF,0x22, 0x25,0x28,0x2B,0x2E,0x31,0x34,0x37,0x3A,0x3D,0x40,0x43,0x47,0x4A,0x4D,0x50, 0x53,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x75,0x78,0x7B};将数组A和数组B存储在单片机内部存储器内;步骤S13,主程序采用查询的方式检测按键,当检测到有按键被触发时,启动单片机中的中断,中断采用定时器A的CCRO中断;步骤S14,开启中断之后,响应按键。响应按键的中断处理流程如图2所示;步骤S141,按键音若结束,则进入步骤S15,关闭中断,若按键音未结束,进入步骤 S142,判断发声部分是否完成;步骤S142,若发声部分完成,进入步骤S143,判断是否达到中断关闭前的空闲时间,若发声部分未完成,进入步骤S144,进行数组A和数组B的叠加;步骤S143,若达到中断关闭前的空闲时间,则进入步骤S15,关闭中断,若为达到中断关闭前的空闲时间,则返回;步骤S144,若发声部分未完成,在设定的叠加时间内将数组A和数组B的两组元素进行循环叠加,并在在定时器A的CCRO中断中进行数组A和数组B的叠加,叠加的次数为数组A和数组B的叠加总时间/数组A和数组B的单次叠加时间,即120ms/10us = 12000 次;所述数组A和数组B的两组元素循环叠加的具体方法为将数组A1的第一个元素0x02与数组B1的第一个元素0x01叠加,A1的第二个元素0x07,和B1的第二个元素0x04叠加,依次进行,A1的最后一个元素0x7C与B1的第M元素0x47叠加,然后A1的第1个元素0x02与B1的第25个元素0x4A叠加,依次进行,直到A1 的第17个元素0x52与B1的最后一个元素0x7B叠加,之后A1的第18个元素0x57与B1的第一个元素0x01叠加,这样依次进行下去,直到达到设定的叠加总时间120ms ;叠加完成之后,利用定时器A的output单元将叠加结果产生的PWM信号输出;步骤S15,DTMF按键提示音发音完毕,关闭单片机中的中断,返回;DTMF按键提示音发音完毕的时间包含数组A和数组B的叠加总时间和叠加完成后到中断关闭前的空闲时间,即当叠加全部完成后,定时器仍会继续工作,但不进行叠加,直到叠加完成后再过50ms 的时间,才认定为一次发音完毕,经过叠加总时间120ms加上叠加完成后到中断关闭前的空闲时间50ms共170ms,一次DTMF按键提示音发音完毕。如图3所示,将输出的PWM信号经模拟滤波器后会产生由频率fh和f 1两种正弦波叠加的波形,即选定的DTMF波形信号,该信号经过运放和功放处理后即可输送给驱动器, 即可驱动发声设备得到所需的DTMF按键提示音。叠加过程中,不同的叠加结果会产生不同频率的PWM信号,下一个PWM信号的频率将会在前一个PWM周期结束后被响应的中断中给出,这些不同频率的PWM信号群通过模拟滤波器后即可产生选定的DTMF信号,这一信号通过驱动设备输出得到的便是期望的DTMF 按键提示音。综上所述,本发明提供的一种使用单片机产生DTMF按键提示音的方法,利用单片机本身的资源,结合软件的形式,将按正弦波分布的两个数组进行叠加产生PWM信号的方式产生DTMF按键提示音,无需外接语音芯片或存储芯片,简化单片机系统的硬件电路,本发明的方法简单实用,使需要产生DTMF按键提示音的系统更易实现小型化,同时节省了成本。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
权利要求
1.一种使用单片机产生DTMF按键提示音的方法,其特征在于,所述的方法包括a)根据需要的DTMF信号,分别确定高频频率fh和低频频率Π;b)在单片机程序中建立数组A和数组B,数组A元素个数为对采样率除以高频频率fh 的结果取整,数组B元素个数为对采样率除以低频频率Π的结果取整;数组A各元素的取值为在一个周期为Ι/fh的正弦波形内的采样点值;数组B各元素的取值为在一个周期为 Ι/fl的正弦波形内的采样点值;将数组A和数组B存储在单片机内部存储器内;c)当检测到有按键被触发时,启动单片机中的中断,在设定的叠加时间内将数组A和数组B的两组元素进行循环叠加,并利用叠加结果产生PWM信号输出;d)将输出的PWM信号经模拟滤波器后输送给驱动器,即可驱动发声设备得到所需的 DTMF按键提示音;e)DTMF按键提示音发音完毕,关闭单片机中的中断。
2.根据权利要求1所述的使用单片机产生DTMF按键提示音的方法,其特征在于所述数组A和数组B的两组元素循环叠加的具体方法为数组A Ia1 j 3-2 ? · · · ‘ ^k+I ‘ · · ·aj ;数组 BOd1, b2, . . . bm, bm+1, · · · bj ;将数组A的每一个元素乘以一个叠加系数c (其中0 < c < 1),得到A1 {a^c, a2*c, . . . ak*c, ak+1*c, . . . am*c};将数组B的每一个元素乘以系数(1-c),得到B1 Ib1* (1-c),b2* (1-c), . . . bm* (1-c),bm+1* (1-c),· · · bn* (1-c)};然后再将两数组的元素循环叠加;将数组A1的第一个元素 *C与数组B1的第一个元素bjd-c)叠加,A1的第二个元素 *c和B1的第二个元素1 * (1-c)叠加,依次进行,A1的最后一个元素iim*C与B1的第m元素\* (1-c)叠加,然后A1的第1个元素 处与B1的第m+1个元素bm+1*(l-c)叠加,依次进行,直到A1的第k个元素iik*C与B1的最后一个元素bn* (1-c)叠加,之后A1的第k+Ι个元素ak+1*c与B1的第一个元素bj (1-c)叠加,这样依次进行下去,直到达到设定的叠加次数, 其中k < m < η。
3.根据权利要求1所述的使用单片机产生DTMF按键提示音的方法,其特征在于所述数组A和数组B元素的取值与期望产生的DTMF按键音的分辨率η相关联,数组A和数组B 的取值范围均为W 2η];所述的数组A和数组B元素叠加后的取值范围在W 2η],其中,η为正整数。
4.根据权利要求1所述的使用单片机产生DTMF按键提示音的方法,其特征在于所述数组A和数组B均为一维数组。
5.根据权利要求1所述的使用单片机产生DTMF按键提示音的方法,其特征在于所述 DTMF按键提示音发音完毕的时间包含数组A和数组B的叠加总时间和叠加完成后到中断关闭前的空闲时间。
6.根据权利要求1所述的使用单片机产生DTMF按键提示音的方法,其特征在于所述数组A和数组B的叠加次数为数组A和数组B的叠加总时间/数组A和数组B的单次叠加时间。
7.根据权利要求1所述的使用单片机产生DTMF按键提示音的方法,其特征在于所述的采样点值呈正弦规律分布。
8.根据权利要求1所述的使用单片机产生DTMF按键提示音的方法,其特征在于所述的正弦波采用y = 2η8 η(ωχ)的函数,其中,η为正整数。
全文摘要
本发明提供一种使用单片机产生DTMF按键提示音的方法,所述的方法包括根据需要的DTMF信号,分别确定高频频率fh和低频频率fl,建立数组A和数组B,并确定数组A数组B的元素个数及元素值,且两组元素值按正弦规律分布,当检测到有按键被触发时,启动单片机中的中断,在设定的叠加时间内将数组A和数组B的两组元素进行循环叠加,并利用叠加结果产生PWM信号输出;将输出的PWM信号经模拟滤波器后输送给驱动器,即可驱动发声设备得到所需的DTMF按键提示音;DTMF按键提示音发音完毕,关闭单片机中的中断。本发明的方法简单实用,使需要产生DTMF按键提示音的系统更易实现小型化,同时节省了成本。
文档编号H04M1/50GK102387235SQ20111031047
公开日2012年3月21日 申请日期2011年10月14日 优先权日2011年10月14日
发明者何桥, 尚红涛, 廖志国, 张剑, 张子刚 申请人:华平信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1