智控-初级组题电子琴_第1页
智控-初级组题电子琴_第2页
智控-初级组题电子琴_第3页
智控-初级组题电子琴_第4页
智控-初级组题电子琴_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、方案论证与比 5556语音选择 二、系统的具体设计及实 系统总框 硬件设计 12864液晶屏显示设 PS2键盘设 软件设计 主程序流 LCD控制流程 三、测试、结果及分 四、总 参考文 附录一、完整的系统原理 附录二、部分的系统源代 电子琴设计一 设计任 i可以已的音乐能够自动演奏多首(两首以上)乐曲,且演奏方式可选择(如重复或者顺序等。可以对编奏乐曲进行,在按下放音键时能演奏出来随着大学生业余的增强DY作品越来越受大学生喜爱如果自己能做出一款DY可将理论知识融入到实践中去。本电子琴是基于Mega16单片机控制的小型学习作品在业,该游戏机由单片机Mega16和一些原件组成具有操作简单,12864更加符合人们的操作习惯加上丰富的音乐在不知不觉中享受音乐的乐趣,自己亲手弹奏美妙的音乐将不再是梦想!,关键字:电子琴、Amega16、PMW波形输出、液晶、PS2键盘、音乐、弹奏音Withtheenhancementofstudentshobby,DIYworkmoreandmorepopularamongcollegestudentslove.IfIcouldmakeaDIYworkcannotonlyexercisetheirownability,butalsothetheoreticalknowledgeintopractice.ThekeyboardisbasedontheMega16MCUlearningworksforsmallentertainment,lifeintheamateurcanbringusalotoffun!Maketheirlifemorecolorful!ThegamebytheexternalmicrocontrollerMega16andsomeoriginalcomposition,issimple,showsclearfeatures.12864LCDasamonitortouse,youcandisplayChinesecharacters,numbers,letters,etc.,sothatsysteminformationataglance;usethecomputerkeyboardtooperateandplaymusic,moreinlinewithpeopleaccustomedtotheoperation!Withawealthofmusic,letyouenjoymusicinthefununconsciously,hishandwillplaybeautifulmusicisnolongeradream!:keyboard,Amega16chip,PMWwaveformoutput,LCD12864LCD,PS2keyboard,musicplayer,playmusic一、方案论证与比较控制器部少,功能不够强大,中断源和定时器较少,且没有可调占空比波形输出。EEPROM的优点,多种模式的AT89S52单片机考虑到以上两种方案的优缺点因本系统需要方便的可调占空比波形输出需显示部方案一使用LCD1602128*64液晶显示模块。128*64液晶可视面积大,介面美观,对图形和曲键盘部 利用I/O口直接连接的独立式键盘,每键都有相应的I/O口对应,编程容易控制,实现方便;但拒于IO口有限,能接的按键不能太多,而本系统需用户根据需 用4*4矩阵键盘。优点:利用8个IO口得到16个按键,可使操作介界变得方案 受数据,不会对其他程序有,因为不需要扫描键盘,极大的节约了CPU音量调节部 使用DA输出再放大。优点:可以直接通过按键设置音量,调节精细准确; 使用电位器调节加三极管放大,并用AVR自带的10位AD检测并显示音量。语音选方案二使用喇叭。优点:能跟据输入的频率放出不同的音调;缺点:需要来 系统的具体设计及实系统总框1286412864PS2PS2本电子琴系统以Amega16单片机为系统,配合128*64液晶模组及PS2键盘和硬件设12864液晶屏显示设本系统采用电子公司出产的128*64液晶模块(带中文字库)作为显示部分,能2-2-2PS2键盘设盘,只占用2个IO口(外部中断0加一个数据口使操作界面更加人性化,操作过喇叭放大电路设用NPN型三极管9013来放大电路,其中JP3接喇叭,Port40为AD信号接口,三极b0.25W8欧,原理图如下所示。软件设主程序流

模弹奏音乐回放音模弹奏音乐回放音乐帮助功能YN弹奏音乐流否是LCD控制流将将光标指向指定位三测试、结果及分析基本功能和发挥与仪器,测试数据及分析6、7、i等八个音符可以通过按键控制发音,能够、i4个音符。已13首歌,5式可选择(如重复或者顺序等。环,3顺序,4循环5随机241280到可以对编奏乐曲进行,在按下放音键时能演12864PS2车是进入,Esc在音乐的过程中实现随在音乐的过程中实现随时暂停继续也可以中途退可调节速在回放时可随时暂停或出;使用PS2键盘,共24个音节按人们的打字习惯分布,并可以,经过反复调试设计中还有来不及调试的模块如音频输出,SD参考[1]李垳《AltiumDesigner6电路设计实例与技巧》国防工业:[2]景《基于PROTEUS的电路及单片机系统设计仿真》航空航天大学2006:[3]《C语言大学使用》:电子工业[4]零点《AltiumDesigner6.0原理图与PCB设计》:电子工2007附录附录函数名称: 能voidmain(void){kb_init();//PS2键盘接lcd_init();//液晶初始化port_init();//音乐初始化{{}}} 音乐模块头文*控制#ifndef_avr_music_H_#define //定义标记防止被重复用#include#include //自身头文ucharmusicstop=0,jp=0,getout=1;uchargetend=0;//#pragmadata:data//设置回到数据器*初始化voidport_init(void){DDRD|=BIT(5);//D口配置为输出,驱动蜂鸣器TCCR1A=0x40;//T/C1配置为比较匹配,OC1A取反TCCR1B=0x09;}voiddelay_jp(unsignedint{unsignedchari; //循环i{for(i=0;i<250;{}}}长音乐函数功能:两数组音乐范围:n:音乐曲目输入:n:1-voidplay_long(ucharflash*Soundss1,ucharflash*Soundss2,ucharso,uchar{}音调产生函数功能:输出频率为x的范围:x:100-20000Hz,0:不输入:i主音调,j为音调修改,正常为128,0127为低音调,129255为高调voidsound(uintx,ucharj){{case // case0x0C: case0x0D: case0x0E: case0x0F: case0x10: case0x11: case0x12: case // case0x16: case0x17: case0x18: case0x19: case0x1A: case0x1B: case0x1C: case // case0x20: case0x21: case0x22: case0x23: case0x24: case0x25: case0x26: }{}{}}

/(x+j*2-256);//8M时钟数据OCR1A=x;//比较值赋TCCR1A=0x40;//允许比较反转输TCCR1A=0x00;//频率为0,休止符LCD12864液晶模块显示头文件(基于*控制#ifndef_12864_mega16_show_H_#define 定义标记防止被重/*非标准库头文件*/#include"LCD12864.H"#include/*定义全局变量uchar输入值域void

开机{}液晶屏控制输入值域voidking_key(uchar{{case{}case{{}{{}else{}else{}else{}}}case{{}{{}else{}else{}else{}}}case{}case{{}}case{{}}}}子菜单显示输入:a为显示的行数1~4b为第一句语句在数组的行数voidsan_show(uchara,uchar{uchar{}}菜单切换函输出值域void{{}{}{{casecasecasecasecasecase}}{{casecasecasecasecasecase}}}主菜单光标移动函输出值域void{uchar{{{}}{

{}}}{{}{}}

{{}{}}

{}{}}系统参数修改函数功能范围输入voidsystem(){uint{}{}}PS2模块头文件(基于*控制//接口命名:类别_动作_对#ifndef#define //定义标记防止被复/*非标准库头文件#include //公共模#pragmainterrupt_handlerInt0:2//外部中断0中断函/*变量//#pragma //以下变量存放于flashuchar{0x15,'q',0x16,'1',0x1a,'z',0x1b,'s',0x1c,'a',0x1d,'w',0x21,'c',0x22,'x',0x23,'d',0x24,'e',0x25,'4',0x26,'3',0x29,'',0x2a,'v',0x2b,'f',0x2d,'r',0x31,'n',0x32,'b',0x33,'h',0x34,'g',0x35,'y',0x36,'6',0x39,',',0x3a,'m',0x3b,'j',0x3d,'7',0x41,',',0x42,'k',0x43,'i',0x44,'o',0x45,'0',0x46,'9',0x49,'.',0x4a,'/',0x4b,'l',0x4d,'p',0x4e,'-0x52,'\'',0x54,'[',0x55,'=',0x5b,']',0x61,'<',0x69,'1',0x6b,'4',0x70,'0',0x71,'.',0x72,'2',0x73,'5',0x74,'6',0x75,'8',0x79,'+',0x7a,'3',0x7b,'-', //shift键没按下译码flashuchar{0x15,'Q',0x16,'!',0x1a,'Z',0x1b,'S',0x1c,'A',0x1d,'W',0x21,'C',0x22,'X',0x23,'D',0x24,'E',0x25,'$',0x26,'#',0x29,'',0x2a,'V',0x2b,'F',0x2d,'R',0x31,'N',0x32,'B',0x33,'H',0x34,'G',0x35,'Y',0x36,'^',0x39,'L',0x3a,'M',0x3c,'U',0x3d,'&',0x41,'<',0x42,'K',0x43,'I',0x44,'O',0x45,')',0x46,'(',0x49,'>',0x4a,'?',0x4b,'L',0x4d,'P',0x52,'"',0x54,'{',0x55,'+',0x5b,'}',0x61,'>',0x69,'1',0x6b,'4',0x70,'0',0x71,'.',0x72,'2',0x73,'5',0x74,'6',0x75,'8',0x79,'+',0x7a,'3',0x7b,'-', //shift键按下译码#pragma //将以后的变量放在unsignedcharedge=0; //中断触发源标识变量edge,初始0(0为下降沿中断,1为上升沿中断)unsignedcharbitcount=11; //接收位计数变量bitcount,初始化为11externunsignedcharkb_ascii=''; //按键ASCII码变量kb_ascii,初始化为空格externunsignedcharkb_ready=0; //接收完成变量,初始化为0unsignedcharscancode=0; //扫描码变量scancode,初始化为0unsignedcharletgo=1; 功能:PS2键盘输入:返回值域:externvoid{

初始化MCUCR| //(xxxxxx1x)设置INT0为下降沿触发中edge //下降沿中断bitcount=11; //每次11位数据:起始位(0),8个数据位(低位发送),DDRD&=~BIT(PD2);//配置中断管脚为输入PORTD|=BIT(PD2);//使能中断管脚的上拉DDRB&=~BIT(PB0);//配置键盘数据输为输入PORTB|=BIT(PB0);//使能数据输入管脚的上拉SREG| //(1xxxxxxx)打开全局中GICR|= //(x1xxxxxx)打开外部中断}翻译函功能:翻译扫描码为ASCII码返回值域:externvoidkb_decode(uchar{staticunsignedcharup=0,shift=0; //通断码标识变量up(0为通码,1为断码),unsignedchar //循环变量 //数据是通{ //翻译扫{case0xF0:up= //键盘释放标志(随后的一个字节是码),设置up为断码标case0x12:shift=1;break; //左shift键按下,设置shift为按下标志case0x59:shift=1;break; //右shift键按下,设置shift为按下标志{ //shift键没有{//查找unshifted

for(i=0;(unshifted[i][0]!=scancode)&&unshifted[i][0];} //shift{//查找shifted

for(i=0;(shifted[i][0]!=scancode)&&shifted[i][0];}kb_ascii=}} //数据是断码(up{up= //将断码标志复{//shift键释case0x12:shift=case0x59:shift=//shift//shiftdefault:}}} 中断中断源:外部中断调用void{ //下降沿触发{位忽略

if((bitcount11&&bitcount //3到10位是数据(起始位,校验位和停{scancode=(scancode>>1); if(PINB&0x01){scancode| //接收1则置}}触发中}

MCUCR| //(xxxxxxx1)设置INT0为上升edge //上升沿中断标 //上升沿触发中{沿触发中

MCUCR&= edge //下降沿中断标if((--bitcount //11位全部接收完{ //翻译扫kb_ready //接收完bitcount //计数复}}}#include"avr_music.h"一曲音乐函数功能:一曲音乐输入:音乐程序数组音调修改,正常为128,0127为低音调,129255为高音调速度,正常为9,2551依次变快voidplay_onemusic(ucharflash*Soundss,ucharsoundture,uchar{uchary,q=0;while(Soundss[jp]!=0&&getout==1)//等待最后一个音符到{{case case0x01: case0x66: case case0x03: case0x04: case0x14: case0x15: case0x7A: case0x16: case0x17: case0x18: break;}{{}}{ }}TCCR1A=0x00;//奏完一个音符停止jp++;//准备一下个音delay_jp(2*Speed);//节拍}jp=0;//一遍结束,停1秒,从头}音乐中的键盘控制函数功能范围输入voidkey_playing()//kb_ascii{{case {}{}

kb_ascii='';}case move1--;kb_ascii='';TCCR1A=0x00;//奏完一个音符停止}case TCCR1A=0x00;//奏完一个音符停止}case }}}一首歌曲结束后的操作函数功能范围输入voidmusic_end(){{}}选择音乐函数功能:选择某一首范围:n:音乐曲目输入:n:1-voidplay_one(ucharn,ucharso,ucharsp) {case case2: case3: play_onemusic(Music_bjhyn,so,sp);break;}//3.欢迎case case5: case6: case7: }//4.仙剑问case case9: case10: case11: case12: }//11.}}{}{{case case2: case3: lcd_w_string_flash(show_play[3]);break;}case4: }}全部音乐函数功能:设定音乐模式范围:m:模式,n:音乐曲目输入:m:1单曲,2单曲循环,3顺序,4循环,5随n:1-音调修改128正常1-255依次升速度 1-255依次变voidplay_all(ucharm,ucharn,ucharsoundture,uchar ucharif(m==1)//单{}elseif(m==2)//单曲循 { }}}{{ } } }}}{{ } } }}}else//随 {move1=rand()%13+1; } } }}}}voidmusic_play() uchari,q;uintj;{case lcd_w_string("是 }{{ }} {}{}TCCR1A=0x00;//奏

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论