ATmega16电子琴的设计与实现.doc
《ATmega16电子琴的设计与实现.doc》由会员分享,可在线阅读,更多相关《ATmega16电子琴的设计与实现.doc(13页珍藏版)》请在咨信网上搜索。
简易电子琴的设计与实现 2011年10月16日 目 录 摘要…………………………………………………………………………3 引言…………………………………………………………………………3 1、 方案的设计与论证…………………………………………………… 3 1.1芯片选择………………………………………………………… 3 1.2电源控制模块…………………………………………………… 3 1.3功放模块……………………………………………………………3 1.4键盘输入模块………………………………………………………4 2、系统框图和仿真图………………………………………………………4 3、各模块的设计与论证……………………………………………………5 3.1中央处理器MCU…………………………………………………… 5 3.2 4x4键盘……………………………………………………………5 3.3功放模块…………………………………………………………… 6 4、程序流程图………………………………………………………………7 5、总结………………………………………………………………………8 6、源程序……………………………………………………………………8 摘 要:本设计设计了一种基于ATmega16 的电子琴, 该电子琴由用 C语言控制核心部件和适当的外围电路构成, 可从琴键上进行演奏也可自动进行乐曲演奏,实验验证了该设计的正确性。 关键词:电子琴;乐曲演奏;自动演奏;ATmega16 引言:进入21世纪后,由于电子技术及计算机技术的迅猛发展,新型电子产品的更新换代速度越来越快。以单片机为核心构成的智能化产品具有体积小、功能强、应用面广等优点,目前正以前所未有的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有领地。 本作品是基于单片机控制系统的简易电子琴,可实现通过按键控制,发出1、2、3、4、5、6、7……等十六个音符。该电子琴亦能够自动演奏乐曲,也可手动进行乐曲选择;实验验证了该设计的正确性。 1、方案的设计和论证 1.1芯片选择 方案一:核心芯片:atmega16单片机 优点:对于atmega16的使用较熟悉,基本功能实现比较容易。 缺点:I/O口多,配置起来容易出错。 方案二:核心芯片:8051单片机 优点:I/O口配置较为方便,芯片价格便宜。 缺点:使用汇编语言编程,较为繁琐,况且队员汇编语言知识薄弱。 通过比较,结合自身的知识,选择方案一。 1.2电源控制控制模块 方案一:外置开关电源,其优点是电路设计比较简单。 方案二:运用晶体管的开关功能设计电源开关控制电路,通过向单片机输入外部中断来使得单片机自动控制电源的关断。 为使设计简便,采用方案一。 1.3功放模块 方案一:采用LM386芯片对对输出的音乐信号进行放大,其优点是电路简单,稳定性强; 方案二:采用TDA2822芯片放大音乐信号,但是TDA2822在单电源供电下,工作不是很稳定。 考虑到稳定性因素,选用方案一 1.4键盘输入模块 方案一:采用矩阵键盘(N×M),每个按键占据行列的一个交点,需要的I/O口数目是N+M,容许的最大键数是N×M。 方案二:采用独立式按键新型键盘,但占用硬件资源较多。 为了节省资源,选择方案一。 2、系统框图和仿真图 基于ATmega16电子琴系统的硬件总体结构图如图1所示,主要包括中央处理器MCU、,功放模块、键盘模块。 图1 3、各模块的设计与论证 3.1中央处理器MCU 图2 中央处理器选用的是ATMega16,如图2所示。 PB0~PB7用于连接键盘输入;PD5用于音律PWM的输出;PA0连接自动演奏按钮。 单片机输出频率CTC不同的信号来产生各种音符,将歌曲各个音符的转化成相应的数字信号,存放在单片机程序寄存器中,当播放音乐时,程序从该寄存器里读取数据,然后以CTC信号的模式传给功放电路,实现放音乐的功能。 3.2 4x4键盘 图3 键盘与接PB口连接,见图3。 键盘的工作原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。 3.3 功放模块 图4 这里的功放模块采用了传统的LM386芯片,采用该芯片是因为LM386具有自身功耗低, 电压增益可调整, 电源电压范围大, 外接元件少和总谐波失真小等优点,尤其是在增益为20DB时使用的外围原件极少。具体的单路连接如下图4所示。 4、程序流程图 5、总结 经过一翻辛苦努力,终于搞定了电子琴了。这个过程中团队合作让我们收获很多。两个同学一起做,不可能每个同学对每项内容都了解得很透彻,需要知识互补。另外,遇到困难的时候不能指望让一个同学独自解决,团队合作不崇尚单打独斗。 6.源程序(部分) //端口初始化 void port_init(void) { PORTA = 0xFF; DDRA = 0x00; PORTB = 0xFF; DDRB = 0xF0; PORTC = 0x00; DDRC = 0x00; PORTD = 0x20; DDRD = 0x20; } //**************************************** void init_devices(void) { CLI(); //禁止所有中断 MCUCR = 0x00; MCUCSR = 0x80;//禁止JTAG GICR = 0x00; port_init(); //timer1_init(); SEI();//开全局中断 } //**************************************** void delay_ms(uint ms) { uint i,j; for(i=0;i<ms;i++) {for(j=0;j<1141;j++);} } //**************************************** void show_music1(void) //猎人进行曲 { uint ii,y1,y2,y3; uint music1[]={ -2,500,100,1,200,400, 1,150,0,2,150,0,3,150,0,4,150,0,5,150,400, 3,200,50,3,200,50,2,200,50,5,200,50,2,200,50,5,200,50, 3,150,0,4,150,0,3,150,0,2,150,0,1,150,50,-2,150,50,1,150,400, 1,150,0,2,150,0,3,150,0,4,150,100,5,150,400, 3,200,50,3,200,50,2,200,50,5,200,50,7,200,50,6,200,50,5,200,800 }; for(ii=0;ii<96;ii+=3) { y1=music1[ii]; y2=music1[ii+1]; y3=music1[ii+2]; OCR1AH = voice_H_rate[y1+9]; OCR1AL = voice_L_rate[y1+9]; TCCR1A = 0x40; TCCR1B = 0x09;//启动定时器 delay_ms(y2-1); if(y3!=0) //判断歌曲是否停顿 { TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } delay_ms(y3); } TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } //**************************************** void show_music2(void) //两只老虎 { uint ii,y1,y2,y3; uchar music2[]= {1,200,100,2,150,100,3,200,100,1,400,1000, 1,200,100,2,150,100,3,200,100,1,400,1000, 3,200,100,4,200,100,5,500,200, 3,200,100,4,200,100,5,500,200, 5,100,50,6,100,50,5,100,50,4,100,50, 3,200,100,1,200,2000, 5,100,50,6,100,50,5,100,50,4,100,50, 3,200,100,1,200,2000, 2,200,100,-2,400,1000,1,400,4000, 2,200,100,-2,400,1000,1,400,4000 }; for(ii=0;ii<(sizeof(music2));ii+=3) { y1=music2[ii]; y2=music2[ii+1]; y3=music2[ii+2]; OCR1AH = voice_H_rate[y1+9]; OCR1AL = voice_L_rate[y1+9]; TCCR1A = 0x40; TCCR1B = 0x09;//启动定时器 delay_ms(y2); if(y3!=0) //判断歌曲是否停顿 { TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } delay_ms(y3); } TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } //**************************************** void show_music3(void) //小星星 { uint ii,y1,y2,y3; uint music3[]={1,200,400,1,200,400,5,200,400,5,200,400, 6,200,400,6,200,400,5,400,800, 4,200,400,4,200,400,3,200,400,3,200,400, 2,200,400,2,200,400,1,400,800, 5,200,400,5,200,400,4,200,400,4,200,400, 3,200,400,3,200,400,2,400,1000, 5,200,400,5,200,400,4,200,400,4,200,400, 3,200,400,3,200,400,2,400,800, 1,200,400,1,200,400,5,200,400,5,200,400, 6,200,400,6,200,400,5,400,800, 4,200,400,4,200,400,3,200,400,3,200,400, 2,200,400,2,200,400,1,400,800}; for(ii=0;ii<126;ii+=3) { y1=music3[ii]; y2=music3[ii+1]; y3=music3[ii+2]; OCR1AH = voice_H_rate[y1+9]; OCR1AL = voice_L_rate[y1+9]; TCCR1A = 0x40; TCCR1B = 0x09;//启动定时器 delay_ms(y2); if(y3!=0) //判断歌曲是否停顿 { TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } delay_ms(y3); } TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } //**************************************** void show_music4(void) //祝你生日快乐 { uint ii,y1,y2,y3; uchar music4[]= {5,20,50,5,20,100,6,50,0,5,50,200,8,50,0,7,60,100, 5,20,50,5,20,100,6,50,0,5,50,200,9,50,0,8,60,100, 5,20,50,5,20,100,12,50,0,10,50,100,8,40,0,7,40,0,6,70,100, 11,20,50,11,20,100,10,50,0,8,50,0,9,60,100,8,60,200}; for(ii=0;ii<(sizeof(music4));ii+=3) { y1=music4[ii]; y2=music4[ii+1]; y3=music4[ii+2]; OCR1AH = voice_H_rate[y1+2]; OCR1AL = voice_L_rate[y1+2]; TCCR1A = 0x40; TCCR1B = 0x09;//启动定时器 delay_ms(y2*10); if(y3!=0) //判断歌曲是否停顿 { TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } delay_ms(y3); } TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } //**************************************** void show_select(uint n) { } //**************************************** uchar scan_key(void) { uchar i,j,in,ini,inj; uchar find=0; for(i=0;i<4;i++) { PORTB=act[i]; delay_ms(10); in=PINB; in=in<<4; in=in|0x0f; for(j=0;j<4;j++) { if(act[j]==in) { find=1; inj=3-j; ini=i; } if(act[j]==in)break; } if(act[j]==in)break; } if(find==0) return 16; return (ini*4+inj); } //**************************************** void main(void) { uchar c; uint n; init_devices(); n=0; while(1) { if(PINA==0xFE) {delay_ms(10); if(PINA==0xFE) { for(n=0;n<5;n++); n=(rand())%5; if(n==1) {show_music1();} if(n==2) {show_music2();} if(n==3) {show_music3();} if(n==4) {show_music4();} } } PORTB = 0x0F; DDRB = 0xF0; if(PINB!=0x0F) { c=scan_key(); if(c!=16) { OCR1AH = voice_H_rate[c]; OCR1AL = voice_L_rate[c]; TCCR1A = 0x40; TCCR1B = 0x09;//启动定时器 while(c!=16) { if(PINB!=key_if_keep[c]) c=scan_key(); } } } TCCR1A = 0x00; TCCR1B = 0x00;//停止定时器 } }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ATmega16 电子琴 设计 实现
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文