版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子琴设计报告院系:计算机科学学院专业:计算机科学与技术学号:201003784姓名:张林峰班级:计科1002设计时间:2012.10.22设计地点:4#2号机房指导教师:严圣华目录一、总体方案二、硬件介绍三、音乐产生原理四、软件设计五、电子琴演示六、完整代码七、实验体会总体方案1.1设计要求1.要求达到电子琴的基本功能,可以用弹奏出简单的乐曲。2.用键盘作出电子琴的按键,每键代表一个音符。3.各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。4.固定音乐播放有按键控制。1.2电子琴系统的组成 STC89C52单片机设计微型电子琴的方法,仅需STC89C52最小系统,扩展一组矩阵键盘,再接一组发光二极管用来指示电子琴的工作状态。本系统分为两个部分,一个是音乐另一个是电子琴。音乐播放部分:音乐实际上是有固定周期的信号。本文介绍用STC89C52的两个定时器(如T0,T1)控制,在P1.3脚上输出方波周期信号,产生乐音电子琴弹奏部分:实际上就是把每个按键所对应的值经过处理后发给单片机,再在单片机内把数字当作指针指向所对应的音符。硬件介绍2.1STC89C52 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。2.2STC89C52引脚图2.3引脚功能介绍在这里就只介绍一下制作电子琴所用到的一些引脚功能。VCC:供电电压。GND:接地。P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3口连接矩阵键盘用来控制音符输出及音乐播放。P0口控制数码管,以显示音符。P2.6连接锁存器U6控制数码管的段选。P2.7连接锁存器U7控制数码管的位选。P2.0控制蜂鸣器2.4矩阵键盘工作原理 列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。2.5矩阵键盘的按键识别方法 1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。三、音乐产生原理3.1不同频率产生原理 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。 若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P2.0反相,然后重复计时再反相。就可在P1.3引脚上得到此频率的脉冲。利用STC89C52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。3.2计数值TH0及TL0的计算方法 例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。要是计数器记956次,就要设定此时的TH0、TL0的值。TH0=(65536-956)/256=(11111100)2=0xfcTL0=(65536-956)%256=(01000100)2=0X443.3音节频率表软件设计4.1数组的运用为数码管写了一个显示0~F的数组,便于直接调用,来显示不同音符表示的数字,代码如下:ucharcodeshuma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,};不同频率声音的TH0、TL0值也分别存在两个数组中,便于直接运用,如下:codeunsignedcharFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE00xFF,0x00,};codeunsignedcharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,0x00,};一首歌的每个音符对应频率在TH0、TL0数组中的地址也存入一个新数组中,如下:codeunsignedcharsszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0};4.2键盘通过switch语句,每按下一个键,产生一个num值,如下:P3=0xfe;temp=P3;temp=temp&0xf0; if(temp!=0xf0){ switch(temp) { case0xe0:num=0;break; case0xd0:num=1;break; case0xb0:num=2;break; case0x70:num=3;break; } }4.3其他一些功能子函数如通过中断函数voidt0char()interrupt1{TR0=0;beep=!beep;TH0=timer0h;TL0=timer0l;TR0=1;}产生不同频率的电压变换,进而使蜂鸣器产生不同频率的声音。延时函数、数码管显示函数、声音播放函数。4.4整体构思由于本键盘的每列接P3口的低4位,每行接P3口的高4位,先使某一列的4个键一边接低电平,当该行的一个按键按下时,低电平传到该按键所对应的行P3口高位。然后通过switch语句来检测到底是那一个按键传递的低电平。不同按键按下,产生一个不同的num值按键产生的num值,先判断如果num>0传递给音频对应的定时器高八位、第八位,数组函数中,以及数码管显示数组函数中,来产生频率,显示音符。anjian(num); if(num>0) {timer0h=FREQH[num]; timer0l=FREQL[num]; display(num); time=1;song(); }如果num=0则运行音乐播放部分,else{ i=0; while(i<100){ k=sszymmh[i]+7*sszymmh[i+1]-1; timer0h=FREQH[k]; timer0l=FREQL[k]; time=sszymmh[i+2]; i=i+3; song(); }完整代码#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitbeep=P2^0;uchartimer0h,timer0l,time,i,num,temp,k; codeunsignedcharsszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0};codeunsignedcharFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};codeunsignedcharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};voiddelay(unsignedchart){unsignedchart1;unsignedlongt2;for(t1=0;t1<t;t1++){for(t2=0;t2<8000;t2++){;}}}voidt0int()interrupt1{TR0=0;beep=!beep;TH0=timer0h;TL0=timer0l;TR0=1;}voidsong(){TH0=timer0h;TL0=timer0l;TR0=1;delay(time);}ucharanjian(i){ P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { switch(temp) { case0xe0:num=0;break; case0xd0:num=1;break; case0xb0:num=2;break; case0x70:num=3;break; } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { switch(temp) { case0xe0:num=4;break; case0xd0:num=5;break; case0xb0:num=6;break; case0x70:num=7;break; } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { switch(temp) { case0xe0:num=8;break; case0xd0:num=9;break; case0xb0:num=10;break; case0x70:num=11;break; } } P3=0xf7; temp=P3; temp=temp&0xf0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年物流行业创新报告及自动化趋势分析报告
- 2025年量子传感五年技术:精密测量行业趋势报告
- 教师数字能力培养与教学评价改革研究教学研究课题报告
- 2026年体彩站点管理员考试题库含答案
- 2026年税务遴选面试公文处理试题及解析
- 2026年云计算行业架构报告及未来五至十年数据服务报告
- 2023-2024学年广东深圳南山为明学校高二(上)期中考历史试题含答案
- 2023-2024学年广东深圳部分学校高二(上)期中联考政治试题含答案
- 甘肃天水市太京中学2026届高二数学第一学期期末达标检测模拟试题含解析
- 安全生产事故培训课件
- GB 8270-2014食品安全国家标准食品添加剂甜菊糖苷
- 2023年杭州临平环境科技有限公司招聘笔试题库及答案解析
- 易制毒化学品日常管理有关问题权威解释和答疑
- LF炉机械设备安装施工方案
- 湖北省高等教育自学考试
- 企业三级安全生产标准化评定表(新版)
- 中心卫生院关于成立按病种分值付费(DIP)工作领导小组及制度的通知
- 五年级上册数学课件 口算与应用题专项 人教版(共64张PPT)
- 耐压测试仪点检记录表
- 梅州市梅江区村级资金财务管理制度(试行)
- 胸腺瘤与重症肌无力手术治疗课件
评论
0/150
提交评论