- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机 实验四定时器设计
实验四 定时器设计---电子音响
一、实验目的
1、学习MCS-51单片机定时器T0、T1的使用方法
2、简单了解使用单片机演奏乐曲的操作原理。
二、实验内容:
利用定时器产生不同频率的方法,组成乐谱由单片机进行信息处理,经过放大后,利用8031 的P1.7口输出音乐《新年好》。
三、基本原理
1、原理图:
2、让喇叭发出某个音符的方法
不同的音符对应不同的频率。所以只要用不同频率的信号驱动喇叭,就能发出不同的音符了。所以转换为使用定时器在P1.7引脚输出某一频率的方波脉冲即可。
如果知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?
例如:某个音的频率f = 440 Hz,也就是使P1.7引脚上产生440Hz频率的方波。需要使用定时器定时来完成。
周期为:T = 1/ f = 1/440 =2272μs=2.272ms
所以可以使用定时器方式0或者方式1,每定时1.136ms就中断一次,中断服务程序中使P1.7引脚取反即可。
使用定时器方式1,晶振频率12Mhz,产生1.136ms的定时时间,那么定时器初值可以如下计算 :
同样的方法,可以计算出每一种音符的定时初值。
另外,只产生一个周期的方波脉冲时间太短,听不到。所以,将这一段脉冲延续一段时间。这里使用的道理是:定时器中断只要启动了就一直要继续,除非主程序结束或者关中断。所以主程序执行的时间也就是定时器工作的时间,也就是声音延续的时间。如果让主程序延时4个delay之后END,那么声音只会响4个delay的时长。但是如果主程序是个死循环,声音就会一直响下去,所以延时就没有必要了。
3、如何写出程序,定时初值FD80H,延时4个DELAY(每个DELAY大概为65ms),产生某个音?
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP ZHONGDUAN
;对定时器T0初始化,使用定时方式1,定时初值FD80H(TMOD、IE、TH0、TL0、TCON等的设置)
MAIN: 。。。。。。。。。。。。。
;初始化完成
MOV A,#04H ;这条指令可以省略
ACALL DELAY ;这条指令可以省略
AJMP MAIN
DELAY: MOV R2,A
DL1: MOV R7,#81H
DL2: MOV R6,#0FFH
DL3: DJNZ R6,DL3
DJNZ R7,DL2
DJNZ R2,DL1
RET
ZHONGDUAN:
;中断服务程序,给TH0、TL0重新赋初值
;将P1.0引脚取反。
RETI
END
注意:题目中,延时程序的使用不是必须的,如果不延时,只要主程序不结束,定时器中断就会继续,所以一直是发出该声音。
如果,让主程序结束,才会发出短暂的 该声音后结束。那就需要延时,不能让主程序结束太早。
如果想实现 响—停---响-- 停这个过程,可以如下处理:
主程序中LOOP: SETB TR0
MOV A,#04H
LCALL DELAY
CLR TR0
MOV A,#04H
LCALL DELAY
SJMP LOOP
4、音乐产生的原理
单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率。因此单片机奏乐只需弄清楚两个概念,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。乐谱中每一个音符都与某一个特定的频率相对应。所以只需要产生不同频率的方波信号(产生不同音调),并且延时不同的时间(产生不同节拍),即可完成音乐的播放。
解释:节拍表示一个音符唱多长的时间
音符的节拍我们可以举例来说明。
以为例加以说明:它表示乐谱中以四分音符为节拍,每一小结有三拍。比如:
其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
一拍的时长大约为400—500ms 。以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
所以,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。
5、将决定音调的
文档评论(0)