基于单片机的简易电子琴设计_第1页
基于单片机的简易电子琴设计_第2页
基于单片机的简易电子琴设计_第3页
基于单片机的简易电子琴设计_第4页
基于单片机的简易电子琴设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、. 1方案论证1.1原理图图1-1 电子琴电路图Figure1-1 Keyboard circuit diagram1.2系统板硬件连线系统板硬件连线如图1-1所示,发生模块,键盘模块,及LED显示模块连接如下1.把“单片机系统区域中的P1.0端口用导线连接到“音频放大模块区域中的SPK IN端口上;2.把“单片机系统区域中的P3.0P3.7端口用8芯排线连接到“4*4行列式键盘区域中的C1C4R1R4端口上;3.把“单片机系统区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块区域中的任一个ah端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,P

2、0.7/AD7对应着h。图1-2 管脚图Figure1-2 pin map1.3.1.1 主要功能特性 兼容MCS-51指令系统32个双向I/O口 2个16位可编程定时/计数器 全双工UART串行中断口线 2个外部中断源 中断唤醒省电模式 看门狗WDT电路 灵活的ISP字节和分页编程 4k可反复擦写ISP Flash ROM4.5-5.5V工作电压 时钟频率0-33MHz128*8bit部RAM 低功耗空闲和省电模式 3级加密位 软件设置空闲和省电功能 双数据存放器指针 LM3861.3.2.1 LM386部电路LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。L

3、M386特性:静态功耗低,约为4mA,可用于电池供电;工作电压围宽,4V-12V或5V-18V;外围元件少;电压增益可调,20-200;低失真度。LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。 HYPERLINK photo.blog.sina./showpic.html l blogid=49013b4801009rfc&url=static9.photo.sina./orignal/49013b4845103b5edf408 t _blank 图1-3 LM386部电路原理图Fig1-3 LM386

4、 internal circuit diagramLM386部电路原理图如图1-3所示。与通用型集成运放相类似,它是一个三级放大电路. 第一级为差分放大电路,T1和T3、T2和T4分别构成复合管,作为差分放大电路的放大管;T5和T6组成镜像电流源作为T1和T2的有源负载;T3和T4信号从管的基极输入,从T2管的集电极输出,为双端输入单端输出差分电路。使用镜像电流源作为差分放大电路有源负载,可使单端输出电路的增益近似等于双端输出电容的增益第二级为共射放大电路,T7为放大管,恒流源作有源负载,以增大放大倍数。第三级中的T8和T9管复合成PNP型管,与NPN型管T10构成准互补输出级。二极管D1和D

5、2为输出级提供适宜的偏置电压,可以消除交越失真。引脚2为反相输入端,引脚3为同相输入端。电路由单电源供电,故为OTL电路。输出端引脚5应外接输出电容后再接负载。电阻R7从输出端连接到T2的发射极,形成反应通路,并与R5和R6构成反应网络,从而引入了深度电压串联负反应,使整个电路具有稳定的电压增益。图2.3 音频放大器电路Figure 2.3 audio amplifier circuit1.3.3 LED数码管图1-4 7段数码管Figure1-4 7 segment digital tube数码管如图1-4所示使用条件:a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根

6、据发光颜色决定c、使用电流:静态:总电流 80mA每段 10mA;动态:平均电流 4-5mA 峰值电流 100mA上面这只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。数码管使用考前须知说明:1数码管外表不要用手触摸,不要用手去弄引角;2焊接温度:260度;焊接时间:5S3外表有保护膜的产品,可以在使用前撕下来。2实现过程2.1 4*4行列式键盘识别及显示组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种根本类型。编码键盘:键盘本身带有实现接口主要

7、功能所需的硬件电路。不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码如ASCII码送往CPU。所以,编码键盘接口简单、使用方便。但由于硬件电路较复杂,因而价格较贵。非编码键盘:键盘只简单地提供按键开关的行列矩阵。有关按键的识别、键码确实定与输入、去抖动等功能均由软件完成。目前微机系统中,一般为了降低本钱大多数采用非编码键盘。键盘接口必须具有去抖动、防串键、按键识别和键码产生4个根本功能。1去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为520mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断

8、开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解决。2防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。常用的方法有双键锁定和N键轮回两种方法。双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。 3被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。行扫描法的根本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法

9、在微机系统中被广泛使用。线反转法的根本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。 4键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在存区中建立一个键盘编码表,通过查表获得被按键的键码。用AT89S51的并行口P1接44矩阵键盘,以P1.0P1.3作输入线,以P1.4P1.7作输出线;在数码管上显示每个按键的“0F序号。图2-1 键盘识别模块Fig2-1Keyboard recognition module2.1.1 系统板上硬件连线设计键盘模块硬件连线如图2-1所示:1把“单片机系统区域中的P3.0P3.7端口用8芯排线连接到“4*4行列式

10、键盘区域中的C1C4R1R4端口上;2把“单片机系统区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“7段数码显示模块区域中的任一个ah端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,P0.7/AD7对应着h。2.1.2 程序设计容144矩阵键盘识别处理,每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0和“1,开关的一端列线通过电阻接VCC,而接地是通过程序输出数字“0实现的。2键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭

11、合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。电路图如下图2.1.1 行列式键盘电路Figure 2.1.1 determinant keyboard circuit2.1.3 I/O并行口直接驱动LED显示LED显示模块如图2-2所示,利用AT89S51单片机的P0端口的P0.0P0.7连接到一个七段数码管的ah的笔段上,数码管的公共端接地。在数码管上循环显示07数字,时间间隔0.2秒。图2-2 电路原理图Fig2-2 Circuit diagram系统板上硬件连线:如

12、图2-2所示 把“单片机系统区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“七段数码显示模块区域中的任一个数码管的ah端口上;要求:P0.0/AD0与a相连,P0.1/AD1与b相连,P0.2/AD2与c相连,P0.7/AD7与h相连。程序设计容 1LED数码显示原理: 七段LED显示器部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。 LED数码管的ga七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码表如表2-1所示表2-1 字形码表Table

13、 2-1 font code table“03FH“87FH“106H“96FH“25BH“A77H“34FH“b7CH“466H“C39H“56DH“d5EH“67DH“E79H“707H“F71H2)由于显示的数字09的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。这样我们按着数字09的顺序,把每个数字的笔段代码按顺序排好!建立的表格如下所示:TABLEDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。2.2 音乐产生的方法2.2.1 原理一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可

14、构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。假设要产生音频脉冲,只要算出*一音频的周期1/频率,再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。 利用AT89C51的部定时器使其工作计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计

15、数956次时将I/O反相,就可得到中音DO523Hz。 计数脉冲值与频率的关系式(如式2-1所示)是: Nfi2fr 2-1式中,N是计数值;fi是机器频率晶体振荡器为12MHz时,其频率为1MHz;fr是想要产生的频率。其计数初值T的求法如下: T65536N65536fi2fr 例如:设K65536,fi1MHz,求低音DO261Hz、中音DO523Hz、高音DO1046Hz的计数值。 T65536N65536fi2fr6553610000002fr65536500000/fr 低音DO的T65536500000/26263627 中音DO的T65536500000/52364580 高音

16、DO的T65536500000/104665059单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表2-2所示表2-2 音符频率表1发声程序表4音符频率表音符频率简谱码中69864820低26263628中78464898低29463835中88064968低33064021中98865030低34964103高104665058低39264260高117565110低4406440高131865157低49464524高139765178中52364580高156865217中58764684高176065252中65964777高196765283我们要为这个音符建立一个表格,单片

17、机通过查表的方式来获得相应的数据 低音019之间,中音在2039之间,高音在4059之间 TABLE: DW 0,63628, 63835,64021,64103,64260,64400,64524,0,0 DW 0,63731,63928,0,64185,64331,64463,0,0,0 DW 0,64580,64684,64777,64820,64898,64968,65030,0,0 DW 0,64633,64732,0,64860,64934,64994,0,0,0 DW 0,65058,65110,65157,65178,65217,65252,65283,0,0 DW 0,650

18、85,65134,0,65198,65235,65268,0,0,0 DW 0音乐的音拍,一个节拍为单位C调如表2-3所示表2-3 曲调值表Table 2-3Tune the value of the table曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。对音调的控制:根据不同的按键,对定时器T1送入不同的初值,调节T1的溢出时间,这样就可以输出不同音调频率的方波

19、。不同音调下各个音阶的定时器。在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍。2.2.2 程序框图音乐发声程序框图如图2-4所示:图2-4 音乐发声程序框图电路原理图:程序框图程序框图如下图:C语言源程序#includeunsigned char code table=0*3f,0*06,0*5b,0*4f,0*66, 0*6d,0*7d,0*07,0*7f,0*6f;unsigned char discount;void delay02s(void) unsigned char i,j,k; for(i=20;i0;i-) for(j=20;j0;j-

20、) for(k=248;k0;k-);void main(void) while(1) for(discount=0;dispcount0;i-)for(j=200;j0;j-);temp=P3;temp=temp & 0*0f;if (temp!=0*0f)temp=P3;temp=temp & 0*0f;switch(temp)case 0*0e:key=7;break;case 0*0d:key=8;break;case 0*0b:key=9;break;case 0*07:key=10;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0*

21、0f;while(temp!=0*0f)temp=P3;temp=temp & 0*0f;P3=0*ff;P3_5=0;temp=P3;temp=temp & 0*0f;if (temp!=0*0f)for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp & 0*0f;if (temp!=0*0f)temp=P3;temp=temp & 0*0f;switch(temp)case 0*0e:key=4;break;case 0*0d:key=5;break;case 0*0b:key=6;break;case 0*07:key=11;break;te

22、mp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0*0f;while(temp!=0*0f)temp=P3;temp=temp & 0*0f;P3=0*ff;P3_6=0;temp=P3;temp=temp & 0*0f;if (temp!=0*0f)for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp & 0*0f;if (temp!=0*0f)temp=P3;temp=temp & 0*0f;switch(temp)case 0*0e:key=1;break;case 0*0d:key=2;break;case

23、0*0b:key=3;break;case 0*07:key=12;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0*0f;while(temp!=0*0f)temp=P3;temp=temp & 0*0f;P3=0*ff;P3_7=0;temp=P3;temp=temp & 0*0f;if (temp!=0*0f)for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp & 0*0f;if (temp!=0*0f)temp=P3;temp=temp & 0*0f;switch(temp)case 0*

24、0e:key=0;break;case 0*0d:key=13;break;case 0*0b:key=14;break;case 0*07:key=15;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0*0f;while(temp!=0*0f)temp=P3;temp=temp & 0*0f;程序框图 音乐发声程序框图如下图:程序#includeunsigned char code table=0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07, 0*7f,0*6f,0*77,0*7c,0*39,0*5e,0*79

25、,0*71;unsigned char temp;unsigned char key;unsigned char i,j;unsigned char STH0;unsigned char STL0;unsigned int code tab=64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178;void main(void) TMOD=0*01; ET0=1; EA=1; while(1) P3=0*ff; P3_4=0; temp=P3; temp=

26、temp & 0*0f; if (temp!=0*0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0*0f; if (temp!=0*0f) temp=P3; temp=temp & 0*0f; switch(temp) case 0*0e: key=0; break; case 0*0d: key=1; break; case 0*0b: key=2; break; case 0*07: key=3; break; temp=P3; P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0

27、=tabkey%6; TR0=1; temp=temp & 0*0f; while(temp!=0*0f) temp=P3; temp=temp & 0*0f; TR0=0; P3=0*ff; P3_5=0; temp=P3; temp=temp & 0*0f; if (temp!=0*0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0*0f; if (temp!=0*0f) temp=P3; temp=temp & 0*0f; switch(temp) case 0*0e: key=4; break; case 0*0d: key=5; break; case 0*0b: key=6; break; case 0*07: key=7; break; temp=P3; P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%6; TR0=1; temp=temp & 0*0f; while(temp!=0*0f) temp=P3; temp=temp &

温馨提示

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

评论

0/150

提交评论