《基于C51单片机电子琴的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于C51单片机电子琴的设计与实现.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于C51单单片机电子琴的设计与实现组员:周静马帅陈梦艳班级:通信2班1.设计任务与要求22方案论证32.1单片机32.2发声器43.理论分析与计算:44.硬件电路与程序设计64.1电路图:64.2程序框图65.软件程序76总结与展望13附录1:14附录2:14摘要:打造一个多功能电子琴,核心是一块单片机。单片机读取键值,为内置定时器赋初值,定时器每溢出一次,驱动蜂鸣器的引脚电平就取反一次,产生相应频率的方波,即音调;设好键值与数码管段码表的对应关系,键按下时,数码管显示对应音调。一首音乐储存在一个表中,表中的数据是音调与节拍,单片机读取音符的音调与节拍,根据音调赋予定时器初值,根据节拍决定定
2、时器工作的时间,也就是蜂鸣器响的时间,一个接一个地读取音符,即可播放一首歌曲。关键字:单片机 电子琴 蜂鸣器 1.设计任务与要求电子琴设有8个按键,其中7个作为音符输入,另外1个作为模式转换按键,实现用户作曲。7个按键分别代表7个音符,包括中音段的全部音符。通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现自编歌曲。当需要取消电子琴编曲功能时,再次按下模式转换按键引起外部中断即可退出电子琴功能而返回到原来音乐播放处。2方案论证2.1单片机方案一:AT89C51是美国ATMEL公司生产
3、的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。方案二:采用凌阳公司的SPCE061A 单片机作为控制器的方案。该单片机I/O资源丰富,并集成了语音功能。它整合了多个常用的功能模块,让我们在进行系统开发的时候不用外加过多的硬件就可方便的完成一个系统的设计,这就是人们常说的
4、SoC(Systemonchip)技术。耗电少,可以满足很多手提设备、掌上设备低能耗的需求,低能耗也是电子技术一直在追求的一个目标。但其价格较高。方案三:TI公司的MSP430系列是一个特别强调超低功耗的单片机品种很适合应用于采用电池供电的长时间工作场合在这个系列中有很多个型号它们是由一些基本功能模块按不同的应用目标组合而成MSP430系列的CPU采用16位精简指令系统,集成有16位寄存器和常数发生器发挥了最高的代码效率它采用数字控制振荡器DCO使得从低功耗模式到唤醒模式的转换时间小于6s.其中MSP430x41x系列微控制器设计有一个16位定时器,一个比较器,96段LCD驱动器和48个通用I
5、/O引脚。根据这次实训的要求,方案三单片机原理复杂,掌握难度大,方案二,价格较高,方案一已经能够满足我们的需要,且价格低廉,经济实用,故采用方案一。2.2发声器方案一:采用中频扬声器。一般来说,只要频率响应曲线平坦,有效频响范围大于它在系统中担负的放声频带的宽度,阻抗与灵敏度和低频单元一致即可。有时中音的功率容量不够,也可选择灵敏度较高,而阻抗高于低音单元的中音,从而减少中音单元的实际输入功率。中音单元一般有锥盆和球顶两种。只不过它的尺寸和承受功率都比高音单元大而适合于播放中音频而已。方案二:采用蜂鸣器。它的优点如下:1. 便宜;2. 声音频率可控,可以做出“多来米发索拉西”的效果;3. 在一
6、些特例中,可以和LED复用一个控制口。4. 程序控制方便。我们采用方案二,操作简单,价格合适。3.理论分析与计算:系统初始化后,进入按键扫描函数。当检测到按键被按下时,判断是1到7按键还是8按键,若是1到7按键被按下则启动定时器T1,按照音阶所对应的周期初始值数组表中的初值,输出方波信号;当判断是第八个按键被按下时,直接调用挥着翅膀的女孩歌曲的音调和节拍数组,启用中断循环输出。 各个音阶的频率以及对应半周期如下图所示:通过Time0的溢出中断实现单频产生。Time0的溢出中断发生后输出引脚的电压反向,然后定时器重新装入初值。所以编程时要确定Time0的工作模式和计数初值。这里采用工作模式1,定
7、时器的初值设定通过软件重复实现。而且定时器的初值则依据各音频频率设置。例如:中音Do音频是523Hz,其周期T=l523=1 912s,其半周期为19122=956s。本设计的计时时钟周期是ls,因此设置Time0的计数器每计956次则中断一次,从而实现Do的音频,然后通过中断触发实现引脚电压的循环取反得到相应音频输出。4.硬件电路与程序设计4.1电路图:我们按键部分用AT89C51的P0口,而该芯片的P0需接上拉电阻,一共需要八个,因此我们用9引脚的排阻代替,排阻多出来的一个引脚接VCC。4.2程序框图经过以上分析论证,最终我们得到如下框图。AT89C51声音模块放大电路模块系统时钟硬件复位
8、按键模块5.软件程序#include #include #define uchar unsigned char#define uint unsigned intsbit buz=P31;uchar keycode;uchar i,j;uint toneh8= 0xfc43,0xfcab,0xfd09,0xfd33,0xfd81,0xfdc7,0xfe05,0xfe21;uchar keymode8= 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char code Music_hzcb=0x17,0x02, 0x17,0x03, 0x18,0
9、x03, 0x19,0x02, 0x15,0x03,0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,0x1B
10、,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0
11、x1F,0x66, 0x1F,0x03,0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,0x1B,0x03,
12、 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03,0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x
13、04, 0x18,0x0E, 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,0x15,0x03, 0x15
14、,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0
15、x18,0x02,0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0xff,0xff; unsigned char code Music_Code= 0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x66, /,0xfb,0x03,0xfb,0x8f,0xfc,0x0b,0xfd,0xee; unsigned char const yinfu1314=0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x
16、66,0xfb,0x03,0xfb,0x8f,0xfc,0x0b0xfc,0x43,0xfc,0xab,0xfd,0x08,0xfd,0x33,0xfd,0x81,0xfd,0xc7,0xfe,0x050xfb,0x21,0xfe,0x55,0xfe,0x84,0xfe,0x99,0xfe,0xc0,0xfe,0xe3,0xff,0x02; /,unsigned char const length=1,2,4,8,16,32,64;unsigned char sth,stl;void delay_ms(unsigned int k) / 12Munsigned int i0;unsigned
17、char i,j;for(i0=0;i00;i-)for(j=97;j0;j-); void Sys_Init() TMOD=0x10; EA=1; ET1=1; P1=0xff; uchar Get_Key ()uchar i,temp;P1=0xff;temp=P1;for(i=0;i8;i+)if(temp=keymodei)return i; return 8;void Play(uchar key) uchar j;if(key=7) TR1=1; for(j=0;Music_hzcbj!=0xff;j+) keycode=Music_hzcbj; delay_ms(10);sth=
18、yinfu1(Music_hzcbj%100)/10-1(Music_hzcbj%10)-1)*2;stl=yinfu1(Music_hzcbj%100)/10-1(Music_hzcbj%10)-1)*2+1;j+;TR0=1;delay_ms(4*500/lengthMusic_hzcbj%10);TR0=0; for (;)while(P3=0x7f);delay_ms(10);if(P3=0x7f) continue;else break; else TR1=1;keycode=key; void timer1(void) interrupt 3 using 1buz=buz;TH1=
19、tonehkeycode/256;TL1=tonehkeycode%256;void main() Sys_Init(); do keycode=Get_Key(); Play(keycode); while(1) ;6总结与展望通过这次毕业设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。首先在设计刚开始的调研阶段,我学会了怎么通过各种方式查询相关的资料。通过对这些资料的学习,我大致了解了单片机的发展现状以及未来的发展趋势,认识到目前单片机方面的各种各样的发展,和它们之间的竞争。了解了单片机方面的先进技术,这些都为我的未来的学习指明了方向。我们实训设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。基本掌握了Protel99SE原理图的方法,并设计了一个单片机最小系统。通过开发板的设计和硬件搭建的过程,使我对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法。附录1:附录2: