收藏 分销(赏)

ATmega16电子琴的设计与实现.doc

上传人:w****g 文档编号:3396202 上传时间:2024-07-04 格式:DOC 页数:13 大小:302KB
下载 相关 举报
ATmega16电子琴的设计与实现.doc_第1页
第1页 / 共13页
ATmega16电子琴的设计与实现.doc_第2页
第2页 / 共13页
ATmega16电子琴的设计与实现.doc_第3页
第3页 / 共13页
ATmega16电子琴的设计与实现.doc_第4页
第4页 / 共13页
ATmega16电子琴的设计与实现.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、简易电子琴的设计与实现 2011年10月16日 目 录摘要3引言31、 方案的设计与论证 31.1芯片选择 31.2电源控制模块 31.3功放模块31.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世纪后,由于电子技术

2、及计算机技术的迅猛发展,新型电子产品的更新换代速度越来越快。以单片机为核心构成的智能化产品具有体积小、功能强、应用面广等优点,目前正以前所未有的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有领地。本作品是基于单片机控制系统的简易电子琴,可实现通过按键控制,发出1、2、3、4、5、6、7等十六个音符。该电子琴亦能够自动演奏乐曲,也可手动进行乐曲选择;实验验证了该设计的正确性。1、方案的设计和论证1.1芯片选择方案一:核心芯片:atmega16单片机优点:对于atmega16的使用较熟悉,基本功能实现比较容易。缺点:I/O口多,配置起来容易出错。方案二:核心芯片:8051单

3、片机优点:I/O口配置较为方便,芯片价格便宜。缺点:使用汇编语言编程,较为繁琐,况且队员汇编语言知识薄弱。通过比较,结合自身的知识,选择方案一。1.2电源控制控制模块方案一:外置开关电源,其优点是电路设计比较简单。方案二:运用晶体管的开关功能设计电源开关控制电路,通过向单片机输入外部中断来使得单片机自动控制电源的关断。为使设计简便,采用方案一。1.3功放模块方案一:采用LM386芯片对对输出的音乐信号进行放大,其优点是电路简单,稳定性强;方案二:采用TDA2822芯片放大音乐信号,但是TDA2822在单电源供电下,工作不是很稳定。考虑到稳定性因素,选用方案一1.4键盘输入模块方案一:采用矩阵键

4、盘(NM),每个按键占据行列的一个交点,需要的I/O口数目是N+M,容许的最大键数是NM。方案二:采用独立式按键新型键盘,但占用硬件资源较多。为了节省资源,选择方案一。2、系统框图和仿真图 基于ATmega16电子琴系统的硬件总体结构图如图1所示,主要包括中央处理器MCU、,功放模块、键盘模块。 图13、各模块的设计与论证3.1中央处理器MCU 图2 中央处理器选用的是ATMega16,如图2所示。PB0PB7用于连接键盘输入;PD5用于音律PWM的输出;PA0连接自动演奏按钮。单片机输出频率CTC不同的信号来产生各种音符,将歌曲各个音符的转化成相应的数字信号,存放在单片机程序寄存器中,当播放

5、音乐时,程序从该寄存器里读取数据,然后以CTC信号的模式传给功放电路,实现放音乐的功能。3.2 4x4键盘 图3键盘与接PB口连接,见图3。 键盘的工作原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。3.3 功放模块 图4这里的功放模块采用了传统的LM386芯片,采用该芯片是因为LM386具有自身功耗低, 电压增益可调整, 电源电压范围大, 外接元件少和总谐波失真小等优点,尤其是在增益为20DB时使用的外围原件极少。具体的单路连接如下图4所示。

6、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(); /禁止所有

7、中断 MCUCR = 0x00; MCUCSR = 0x80;/禁止JTAG GICR = 0x00; port_init(); /timer1_init(); SEI();/开全局中断/*void delay_ms(uint ms)uint i,j;for(i=0;ims;i+)for(j=0;j1141;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

8、,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;ii96;ii+=3)y1=music1ii;y2=music1ii+1;y3=music1ii+2;OCR1AH = voice_H_ratey1+9;

9、OCR1AL = voice_L_ratey1+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,2

10、00,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)

11、y1=music2ii;y2=music2ii+1;y3=music2ii+2;OCR1AH = voice_H_ratey1+9;OCR1AL = voice_L_ratey1+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,2

12、00,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,20

13、0,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;ii126;ii+=3)y1=music3ii;y2=music3ii+1;y3=music3ii+2;OCR1AH = voice_H_ratey1+9;OCR1AL = voice_L_ratey1+9;TCCR1A = 0x40;TCCR1B = 0x09;/启动定时器delay_ms(y2);if(y3!=0) /

14、判断歌曲是否停顿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

15、,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=music4ii;y2=music4ii+1;y3=music4ii+2;OCR1AH = voice_H_ratey1+2;OCR1AL = voice_L_ratey1+2;TCCR1A = 0x40;TCCR1B = 0x09;/启动定时器delay_ms(y2*10);if(y3!=0) /判断歌曲是否停顿TCCR1A = 0x00;TCCR1B = 0x00;/停止定时器delay_ms(

16、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;i4;i+)PORTB=acti;delay_ms(10);in=PINB;in=in4;in=in|0x0f;for(j=0;j4;j+)if(actj=in)find=1;inj=3-j;ini=i;if(actj=in)break;if(actj=in)break;if(find=0)return 16;return (ini*4+in

17、j);/*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;n5;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_ratec;OCR1AL = voice_L_ratec;TCCR1A = 0x40;TCCR1B = 0x09;/启动定时器while(c!=16)if(PINB!=key_if_keepc)c=scan_key();TCCR1A = 0x00;TCCR1B = 0x00;/停止定时器

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服