电子琴详解.docx

上传人:小飞机 文档编号:2093165 上传时间:2023-01-09 格式:DOCX 页数:7 大小:117.42KB
返回 下载 相关 举报
电子琴详解.docx_第1页
第1页 / 共7页
电子琴详解.docx_第2页
第2页 / 共7页
电子琴详解.docx_第3页
第3页 / 共7页
电子琴详解.docx_第4页
第4页 / 共7页
电子琴详解.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《电子琴详解.docx》由会员分享,可在线阅读,更多相关《电子琴详解.docx(7页珍藏版)》请在三一办公上搜索。

1、让单片机奏乐-单片机电子琴实验 让单片机奏乐-单片机电子琴实验实验目的用分立电子元件制作报警器或简易电子琴一直是传统电子入门实验或电子 小制作的主打科目。现在,用单片机做此类实验已成为单片机学习入门级的必修课程之一。而且,因单片机自带有定时器,用单片机比分立元件在硬件搭建上要简 便。使用超简单单片机学习套材中的音响模块则使这一工作变得更加简单。另外,BASCOM中开发有专门的发生语 句:SOUND,使得程序实现也非常简单,因此,这个实验非常适合在较低水平的中小学生中开展。因为可以发声,可以演奏自己喜欢的乐曲,是个充满乐趣的单 片机实验,所以这个实验是中小学生学习单片机非常好的入门教材 。大多数

2、单片机学习板都是带一个蜂鸣器来做音响实验,蜂鸣器因其自身特 点,只适合做一些报警器之类的实验,做音乐方面的实验时,音质实在难以接受。超简单单片机实验套材中的音响模块使用 35mm的小喇叭,配有音量调节和耳机插孔,使用者可以控制音量或是戴上耳机而不会影响他人,这就很适合在课堂上开展多人的活动。在调试阶段互不干扰, 最后再各自拿出自己的作品予以展示。难度等级:初级电子乐常识物理音高与音乐音高从物理学中声学的角度讲,声音分为噪音和乐音,无规律的振动称 为噪音,而有规律的振动则称为乐音。好多个有规律的振动按照一定的关系排列在一起则构成了音列。人类对自然界中的声音经过大量的研究后,从中找到了 CDEFG

3、AB这七个基本音级,其中A的频率是440赫兹,我们人为地把A定作标准音,只要振动频率达到440赫兹的音就是A,这个音不但用于乐器当中, 就是在生活中应用的也比较多,例如:汽车的喇叭声和电话的振铃声音都是A音。根据这个标准音推算出C的频率为261赫兹等,这种用数学方法算出来的音高我 们称之为“物理音高”。现在已有专门测量音高的仪器,选定几个音用仪器去校对,如果同仪器的音一致就不显示,若同仪器的音高不一致则会提示你是偏高或偏 低。物理上的音高属于纯理论的音高、是一种物理现象,但在实际生活中,音 乐音高与物理音高有很大的差别。 我们在演奏之前,先要同标准音A校对,而后再根据五度关系把其它几根弦调准。

4、这个时候如果用频率仪器测量的话,会发现实际音高和测量音高存在差异,实际音 高已经比较准了,但测量后的音高有些不准。经研究调查,也证实了实际音高与物理音高存在误差,这个误差一般为四、五个音分左右。我们的耳朵不但听不出来这 个误差而且听上去还很和谐。这仅仅是调弦时的音准,在实际演奏乐曲当中随着乐思的变化,实际音高与物理音高不可避免存在许多差异,我们把这种实际音高称为 “音乐音高”。音乐是用来表达人或物的思想感情的,无论是自己演奏还是听别人演奏,能充分表达乐曲的思想内涵,音准就显得尤为重要了。 由此可以看出,物理音高是一种机械的、单一的,纯理论的音准概念,而 音乐音高是一种灵活的、多变的、带有人的思

5、想感情的音准概念。物理音高是音乐音高的基础,音乐音高是物理音高的升华和体现,二者相辅相成、缺一不可。 音乐中使用的有固定音高的音(即乐音)的总和称乐音体系。按现在通用的十二平均律,从最低音(每秒振动16次左右)到最高音(每秒振动4186次),整个 乐音体系中约有97个音。乐音体系中的音,按照上行即从低到高或下行即由高到低的次序排列起来的音叫做音列。我们在钢琴上可以明显地看出乐音体系中所使用 的音和音列。现代标准的钢琴是音域最宽的乐器,有88个键,能奏出88个音高不同的乐音,也就是说钢琴由88个音高各不相同的音。除此之外的音很少用在音 乐中。用单片机定时器产生音符的方法要想让单片机发出音乐声,其

6、实很简单,用单片机的定时器产生出与音符 频率对应数量的脉冲即可。首先要搞懂几个量值,他们是定时器频率;要发出的乐音或音符的频率;计数脉冲值;和定时器初值。定时器初值与计数脉冲的关系如下:T = K - N K:= 0xFFFF+1,即16位定时器发生溢出中断的数值,即十进制的65536 T:定时器初值 N:计数脉冲值这里定时器一般都工作在溢出中断的模式,对一个16位的定时器来说, 定时计数的最大值为0xFFFF,再加1就溢出了,从而发生中断。所以要想在指定的脉冲数发生后产生中断,就要用这个最大值K减需要的脉冲数N,得出定时 器初值T。计数脉冲值与音符频率的关系如下:N=Ft/2/Fm N:计数

7、脉冲值 Ft:定时器时钟频率 Fm:要产生的音符频率上式表示的是定时器的工作原理。要产生某个音符的音频脉冲,只要算出 这个音频的周期即1/频率,然后将此周期除以2,即为半周期的时间。利用定时器计时这个半周期时间,每当计时到后(发生中断,在中断服务程序中要处理的事 情)就将输出脉冲的I/O反相,如此反复就可在I/O脚上得到此频率的50%占空比的脉冲。举例:设K=65536,定时器时钟频率Ft=1MHz(注),给定为 1MHz,即内部计时一次为1uS。求低音DO(262Hz)、中音DO(523Hz)、高音DO(1046Hz)的定时器初值。 T=65536-N=65536-Ft2Fm=65536-1

8、0000002Fm=65536-500000/Fm低音DO的T=65536-500000/262=63627 中音DO的T=65536-500000/523=64580 高音DO的T=65536-500000/1046=65058 注:定时器时钟频率由所选单片机的系统时钟决定,例如AVR的 Atmega48缺省系统时钟是8MHz,经8分频后就可以得到1MHz的定时器时钟频率。 音符音符频率计数脉冲定时器初值对照表音符FrNT低音12621908636281#27718056373122941701638352#311160863928333015156402143491433641034#37

9、013516418553921276642605#41512056433164401136644006#4661073644637494101264524中音1523956645801#554903646332578865646712#622804647323659759647774698716648204#740676648605784638648985#831602649346880568649686#93253665000798850665030高音11046478650581#11094516508521175426651102#1245402651343131837965157413

10、97358651784#14803386519851568319652175#16613016523561760284652526#1865268652687197625365283硬件搭建本实验用超简单单片机实验套材中的AVR主板和音响模块完成。取C型3位 跳线一根,一端接AVR实验主板的 PORTC.0位置,另一段接音响模块的J1插座。取1位跳线一 根,一端插在AVR主板端口PORTD的(PD)0位置,一端悬空。实验开始时,将一线眺线的悬空端接触AVR主板上的GND(地)插针排的任意引脚,即 启动演奏。程序代码-$regfile = m48def.dat$crystal = 8000000

11、Dim S As Integer , F As IntegerDim A As ByteConfig Pind.0 = InputPortd.0 = 1Config Portc.0 = OutputPortc.0 = 1Do Bitwait Pind.0 , ResetRestore Music_1Do Read S : Read FIf S = 0 And F = 0 Then Exit DoSound Portc.0 , S , FLoopPortc.0 = 1LoopEndMusic_1:Data 150% , 1276% , 50% , 1276%Data 200% , 1137% ,

12、 200% , 1276%Data 200% , 956% , 400% , 1012%Data 150% , 1276% , 50% , 1276%Data 200% , 1137% , 200% , 1276%Data 200% , 865% , 400% , 956%Data 150% , 1276% , 50% , 1276%Data 200% , 638% , 200% , 759%Data 200% , 956% , 200% , 1012%Data 200% , 1136% , 150% , 717%Data 50% , 717% , 200% , 759%Data 200% ,

13、 956% , 200% , 865%Data 400% , 956% , 0% , 0%目标单片机为ATmega48使用内部8M晶振设置PD0口作为输入口设置PD0口的上拉电阻有效设置PC0口作为输出口PC0输出高电平等待直到PD0口为低电平程序指向乐曲数据读入节拍值和音符值均为0 结束乐曲演奏乐音PC0输出高电平 生日快乐的乐曲数据程序讲解BASCOM中有关音乐演奏的语句SOUND pin, duration, pulses pin:是用来产生乐音的I/O口 duration:乐音延续时间,也就是节拍 pulses:要发出乐音脉冲数(N)本程序非常简单,演奏生日快乐歌。端口PORTD.0用

14、作开始演奏的启动开关, 程序初始化时,置高电位,然后等待该端口变为低(开关按下)。然后循环从乐曲数据处读取节拍和乐音,从端口PORTC.0发出乐音,直至节拍和乐音都为 0,结束。乐曲数据的排放顺序是:节拍、乐音脉冲数。读者可以试着改变节拍的数值,看看效果如何。观看演示/-/源 程序大公开/(c) COPYRIGHT 20012002 xuwenjun/All Rights Reserved/V1.00/-/ 标题: 单片机IO口播放乐曲/版 本: V1.00/ 文件名: xwj_lcd16.C/ 创建人: 徐文军E-mail:xuwenjun/ 日期: 02-11-5/ 描述: 单片机利用T1

15、中断在IO口P1.0输出乐曲/声 明:/以 下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处. /如用于商业用途请与作者联系.E- mail:xuwenjun/有问题请mailto xuwenjun欢迎与我交流!/-/ 修改人: 徐文军E-mail:xuwenjun/ 日期: 02-11-5/ 说 明:/单 片机用T1中断在IO口P1.0输出乐曲(在P1.0口与VCC间接一喇叭即可听到) /1.由于输出的是方波,比较难 听:-)你也可以将波形细分用DA输出正弦波/2.由于T1频繁中断,任何其他中断发生都会是乐曲打顿,只适合试 验/3.优化音符编码:一个字节中包含节拍、音符、升降调

16、,可区分数据和命令/同 时人工将音符译为机器码非常容易。(格式看下面实例)/-/#include #include #defineFREQ 11059200/音 乐_编码2 - 存储器定义/unsigned CHAR code music_tab1=/音符码格式:| D7 |D6D5D4| D3 |D2D1D0|/ 梁祝|变调|节拍|升降|音符 |0xcb,/ 示例:0xcb=11001011B,即升调,4/16拍,3Mi低音0x35,0x16,0xb9,0x12,0x96,0x99,0xa5,0xbd,0x99,0x96,0x15,0x13,0x15,0x62,0x32,0x13,0xa7,0x26,0x25,0x16,0xa9,0x22,0xa3,0xa9,0x96,0x15,0x16,0x99,0xe5,0xbb,0x15,0xa7,0xaa,0x96,0x99,0xd5,0x13,0x15,0x23,0x15,0x16,0x17,0x9a,0xd6,0x15,0x16,0xb9,0x12,0x25,0x23,0x23,0x22,0x13,0x12,0x21,0x96,0x15,0x43,0xc9,0x96,0x99,0x96,0x15,0x13,0x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号