ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:293.40KB ,
资源ID:24505937      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24505937.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计模拟电子琴发声控制系统.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计模拟电子琴发声控制系统.docx

1、单片机课程设计模拟电子琴发声控制系统单片机应用与仿真训练设计报告模拟电子琴发声控制系统专业: 电气工程与自动化 摘 要本次课程设计的主要内容是用AT89C51单片机为核心控制元件,设计一个简单的电子琴并可实现音乐的连续播放。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有12个按键和扬声器。定时器按设置的定时参数产生中断,由于定时参数不同,就会发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同音调。本简易电子琴的设计可实现的功能如下:程序中预存了4首音乐:同一首歌、两只蝴蝶、祝你快乐、Time to say goodbye并通过一个独立键盘可

2、以实现对四首音乐的“下一曲”控制。3*4矩阵键盘中的7个按键分别对应着7个不同的音符,另外3个分为高、中、低音的控制,当按下某一按键,会发出相应的音调。按下按键时,扬声器会发出声音,松开按键后,扬声器停止发声,按键的时间越长,发声时间越久。连续按下不同的按键,可以实现乐曲的演奏。此外还有一“模式”按键,负责在电子琴和音乐播放器两种不同模式下的切换。1概述1.1音乐产生原理一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因

3、此,我们只要把一首歌曲的音阶对应频率关系正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用STC89C52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T1/5231912s,单片机晶振频率为12MHz,因此只要令计数器计时(956s/1s)478,每计数478次时将I/O反相,就可得到中音DO(523Hz)。对于AT80C51而言要产生

4、一定频率的方波一般是先将某口线输出高电平,延迟一段时间后再输出低电平。通过改变延迟时间可以改变单片机的输出频率。单片机的延时主要有两种方式,即软件延时和使用定时/计数器延时。其中软件延时不是很精确,而电子琴电路由于每个音符的频率值要求比较严格,因此我们选用定时/计数器延时。由于本课程设计是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。因此,我们只需弄清楚音乐中的音符和对应的频率,利用单片机的定时/计数器来产生方波频率信号即可。1.2结构框图2系统总体方案及硬件设计22.1总体方案本设计采用3*4键盘控制通过程序产生高、中、低七度音律,要考虑到软件和硬件的匹配以及硬件电路焊接时

5、的排版问题,否则建会带来不必要的焊接麻烦,在编程序时要注意仿真与实际电路中可能的不符。在此基础上,另外设计数码管显示电路,蜂鸣器驱动电路。2.2按键键盘设计中采用AT89S51的并行口P0接34矩阵键盘,以P0.0P0.2作输入线,以P0.4P0.7作输出线。每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。

6、两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能,在本程序中,当程序检测到有键按下时,将查表使按键值与预存数据表中数据对应,并调用发声程序。另单独焊接第三行第四列按键为独立按键,用以控制歌曲的切换。2.3蜂鸣器电路蜂鸣器一阳极接三极管的集电极,另一端接地,三极管的集电极节电源VCC,基极接P3.6口。当P3.6口为低电平时三极管导通,蜂鸣器有电流流过,即发声。本次设计采用的是9015(NPN型)三极管作为蜂鸣器的驱动电路。2.4数码管电路本次单片机课程设计的显示电路采用共阳极LED数码管显示,

7、由于 LED是属于电流控制器件,使用时必须加限流电阻。本次显示使用的是数码管的静态显示功能,主要用以显示高、中、低音的状态以及电子琴、播放器状态的指示。2.5最小系统本部分分为印刷电路板,主要包含复位电路、时钟电路、P0-P3口插槽。2.6设计实现过程本次硬件设计的核心部分就是按键,组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。 编码键盘:键盘本身带有实现接口主要功能所需的硬件电路。不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被

8、按键功能对应的键码(如ASCII码)送往CPU。所以,编码键盘接口简单、使用方便。但由于硬件电路较复杂,因而价格较贵。 非编码键盘:键盘只简单地提供按键开关的行列矩阵。有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。目前微机系统中,一般为了降低成本大多数采用非编码键盘。 键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。 (1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为520mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解决。 (2)

9、防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。常用的方法有双键锁定和N键轮回两种方法。双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。 (3)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。线反转法的基本思想是通过行列颠倒两次扫描

10、来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。 (4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。用STC89C52的并行口P0接34矩阵键盘,以P0.0P0.2作输入线,以P0.4P0.7作输出线。除核心电路外,还包括辅助的发音电路和显示电路。发音电路主要部件是蜂鸣器,用三极管作为可控器件辅以驱动电路,以保证音量适中,音色较真。显示电路由两位共阳极数码管作为显示器件,同样辅以三极管放大电路,并串接限流电阻,通过静态显示的方法作为高、中、低音状态的显示和电子琴模式与音乐播放器模式的状态显示。3软件设计33.1整体

11、设计本设计使用Protues仿真软件进行仿真,在程序设计部分,包括键盘扫描程序,音乐发声程序(程序见附录1)。3*4矩阵键盘是由单片机控制I/O口来实现扫描的。具体程序见附录二主程序键盘扫描部分。程序首先给P0口赋值,然后读取P0的状态,将读取的状态值同所赋值相比较,如果二者不相同,则说明有键按下,子程序将按键值返回主程序;否则,说明没有键按。程序继续进行下一次扫描。 本系统的软件主程序流程图如下:3.2音乐设计对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。对音调的控制:根据不同的按键,对定时器T1

12、送入不同的初值,调节T1的溢出时间,这样就可以输出不同音调频率的方波。不同音调下各个音阶的定时器。在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍。要产生相应的音频脉冲,只需要计算出某音频的周期,再除以2。利用计数器计时半周期,计满时使P2.0反向,然后重复计时再反向。本例中,单片机工作在12MHz时钟,使用定时器/计数器T0,工作模式为1,改变计数初值TH0、TL0就可产生不同频率的脉冲信号。例如低3MI音,频率为330Hz,其周期T=1/f=1/330=3030us,计数值N=3030/2=1515,所以每计数1515次P2.0反向。计数初值T=655

13、36-N=64021。 计数脉冲值与频率的关系式是:N=fi2fr式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。其计数初值T的求法如下:T65536N65536fi2fr例如:设K65536,fi1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。T65536N65536fi2fr6553610000002fr65536500000/fr计算可得高中低音分别为:低音DO的T65536500000/26263627中音DO的T65536500000/52364580 高音DO的T6553650000

14、0/104665059单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表所示:音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)低1DO26263628# 4 FA#74064860#1DO#27763731中 5 SO78464898低2RE29463835# 5 SO#83164934#2 RE#31163928中 6 LA88064968低 3 M33064021# 693264994低 4 FA34964103中 7 SI98865030# 4 FA#37064185高 1 DO104665058低 5 SO39264260# 1 DO#110965085# 5 SO

15、#41564331高 2 RE117565110低 6 LA44064400# 2 RE#124565134# 646664463高 3 M131865157低 7 SI49464524高 4 FA139765178中 1 DO52364580# 4 FA#148065198# 1 DO#55464633高 5 SO156865217中 2 RE58764684# 5 SO#166165235# 2 RE#62264732高 6 LA176065252中 3 M65964777# 6186565268中 4 FA69864820高 7 SI196765283音符频率表我们要为这个音符建立一个表

16、格,单片机通过查表的方式来获得相应的数据,低音019之间,中音在2039之间,高音在4059之间TABLE1: DW 64021,64103,64260,64400DW 64524,64580,64684,64777DW 64820,64898,64968,65030DW 65058,65110,65157,65178音乐的音拍,一个节拍为单位(C调)如下表:曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms 曲调值表3.3按键设计对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。琴键处理程序,根

17、据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。对音调的控制:根据不同的按键,对定时器T1送入不同的初值,调节T1的溢出时间,这样就可以输出不同音调频率的方波。不同音调下各个音阶的定时器。3.4显示设计显示部分使用共阳极数码管,用NPN型三极管驱动电路进行静态显示,分别显示高中低音状态和音乐播放器及电子琴的模拟切换状态。数码管由P1.0-P1.7控制段显示,P2.0和P2.1分别控制住位选,流程图如下:4Proteus仿真软件仿真调试主要是针对单片机部分进行调试。在软件运行前,先确保电路中连线正确,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要通过目

18、测,用来完成检测电路中是否存在断路或者短路情况等。5课程设计体会本次课程设计制作简易电子琴,虽然花费了我们很多精力,但收获颇丰,一方面,将自己的理论知识与实践相结合起来,进一步巩固了专业基础知识和相关专业课程知识;另一方面,也培养了自己独立自主、综合分析的思维与创新能力,更让我知道了团队的力量是巨大的。在实际制作时,我们将程序烧入芯片,调试成功后,可任意弹奏自己想要的旋律。本设计通过制作电子琴,将几个模块很好的融合,对使用单片机设计简易电子琴进行了分析,并了解了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。说明一首音乐是许多不同的音阶组成

19、的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大。 设计的过程不是一帆风顺,遇到过各种各样的问题。特别是设计软件时,一些很细小的问题都可能导致功能性的错误,修改了多次才通过仿真,例如:1、在刚刚焊接好后,程序烧入芯片后,发现并不发声,经检查才发现是对键盘没看清楚,将键盘接乱了;2、在程序编写时发现程序正确但电路并不工作,后来才发现是所用三极管为NPN型,而程序编写时则按PNP型进行编写,在修改程

20、序后,程序运行正常实现了预想的功能;3、在硬件电路修改好后,发现每次按键时会引起蜂鸣器一直响,再按键时有可能会消失,经检查后知道是在每按键件程序后蜂鸣器对应参值没有直接置1(置1关蜂鸣器,由电路连接方式决定)。 总之,这是一次动手能力的锻炼,也是一次单片机知识的再回顾,还是对自己细心以及耐心能力的考察。同时在具体的制作过程中我们发现一些书本上的知识与实际的应用存在着一定的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方面的问题,这也让我更深刻地体会到在今后的学习工作中也要注重理论联系实际。参考文献1余发山.

21、单片机原理及应用技术M,中国矿业大学出版社,2003年12月版;2 马淑华、王凤文.单片机原理与接口技术M,北京邮电大学出版社,2005年10月版;3 郭天祥.新概念51单片机C语言教程,电子工业出版社,2009年版附1:源程序代码#include MusInstru.h#include #include #include #include #include SoundPlay.hunsigned k,h=1; void Delay1ms(unsigned int count) unsigned int i,j; for(i=0;icount;i+) for(j=0;j120;j+);void

22、 music() InitialSound(); P2=0; P1=0x00; while(1) Play(Music_One,0,3,360); Delay1ms(600); Play(Music_Two,0,3,360); Delay1ms(600); Play(Music_Three,0,3,360); Delay1ms(600); Play(Music_Four,0,3,360); Delay1ms(600); /Play(Music_Five,0,3,360); /Delay1ms(600); /* 键扫描函数 */uchar getkey(void) uchar scancode,

23、tmpcode; if (P0&0xf0)=0xf0) return(0); scancode = 0xfe; while(scancode&0x10)!=0) / 逐行扫描 P0 = scancode; / 输出行扫描码 if (P0&0xf0)!=0xf0) / 本行有键按下 tmpcode = (P0&0xf0)|0x0f; /* 返回特征字节码,为1的位即对应于行和列 */ return(scancode)+(tmpcode); else scancode = (scancode1)|0x01; / 行扫描码左移一位 return(0);void display() unsigned

24、char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; unsigned char code hl=0xf7,0xbf,0xfe; unsigned int i,m=0; for(i=0;i9;i+) m=m%2; if(m=0) P2=1; P1=hlh; Delay1ms(5); m+=1; else P2=2; P1=tablek+1; Delay1ms(5); m+=1; /*MUSINSTRU头文件*/#ifndef _MUSINSTRU_H /

25、防止MusInstru.h被重复引用#define _MUSINSTRU_H#include #include #include #include #define uchar unsigned char#define uint unsigned int/* 音符与计数值对应表 */uint code tab37=0xf88b,0xf95b,0xfa14,0xfa03,0xfb8f,0xfbcf,0xfc0b, 0xfc43,0xfcab,0xfd08,0xfd33,0xfd81,0xfdc7,0xfe05, 0xfe21,0xfe55,0xfe84,0xfe99,0xfec0,0xfee3,0

26、xff02; /*4首音乐代码*/unsigned char code Music_One= 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03,

27、0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C, 0x1

28、0,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x00, 0x0F,0x01, 0x15,0

29、x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00, 0x00,0x00 ; / 两只蝴蝶 unsigned char code Music_Two = 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1