基于51单片机实现简易电子琴_第1页
基于51单片机实现简易电子琴_第2页
基于51单片机实现简易电子琴_第3页
基于51单片机实现简易电子琴_第4页
基于51单片机实现简易电子琴_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、2012年-2013年第二届“萌芽计划”报告2012年-2013年第二届“萌芽计划”报告题目名称:简易电子琴2013年3月目录一. 问题重述 -3-二. 方案比较 -3-1. 方案说明 -3-2. 方案比较 -3-三. 原理简述 -4-1. 用单片机产生音频脉冲 -4-2. 音频功放-4-四. 电路原理图和说明以及主要元件说明 -5-1. 硬件结构框图 -5-2. 仿真电路原理图及说明 -5-3. 主要元件及说明 -61) .STC89C52单片机-6-2) 丄M386 -7-3) .矩阵式键盘 -8-4. 软件设计 -8-五. 实现的功能 -9-六. 附件 -11-17问题重述(一)任务设计

2、一个简易的电子琴,实现发不同音调的功能。(1)采用555做振荡器。(2)通过扬声器(喇叭)发出不同频率的声音。(二)要求基础部分能通过按键发出1.2.3.4.5.6.7 等不同的音调通过功率放大电路驱动扬声器,并且实现音量大小可调发挥部分增加8个LED灯,当发出1音调时,亮一个LED灯,发出2 音调时,亮两个LED灯,以此类推其他方案比较1.方案说明用NE555做振荡器,产生不同频率发声。万案二.用51单片机产生音频脉冲,通过扩音器发声;a. 用独立链接式键盘做发声的按键;b. 用矩阵式键盘做发声的按键;c. 用三极管8050做音频功放电路;d. 用LM386做音频功放电路;e. 用蜂鸣器发声

3、;f. 用喇叭发声。2方案比较对于方案一,如果用555振荡器,则实现不了许多发挥的功能。对于方案二,单片机功能强大,能实现许多的功能,再加上本身也在学习 单片机知识,所以我们就选择了方案二而在是用独立链接是键盘还是用矩阵式键盘上,我们看到,独立链接是键盘需要占据单片机的I/O 口数量多,而且不好排版,考虑到矩阵式键盘只需接 单片机8个I/O 口,而且有16个按键,可以实现的音调较多,所以我们选择 了用矩阵式键盘在用8050还是用LM386的问题上,刚开始还没有很清晰的决定。但是我 们倾向于用LM386,虽然用8050做功放电路相对于LM386来说电路相对简单, 但是用8050三极管不是太了解,

4、再网上搜索资料后,我们感觉,用LM386显得高端一些,而且功放的电压增益在20200V之间,可供选择的空间大,所以我们选择了用LM386.对于是用蜂鸣器发声还是用喇叭发声, 之前买的开发板上有蜂鸣器,感觉 那个声音太难听了,所以我们就选用了音色好一点的喇叭。三. 原理简述1用单片机产生音频脉冲利用单片机产生不同频率的音频脉冲既能产生音乐。对于单片机而言,产 生不同的频率脉冲是非常方便的,可以利用它的定时 /计数器来产生这样的方波 频率信号,通过扩音器来发出声音。因此,需要弄清楚音乐中的音符和对应的频 率。单片机工作在12MHz时钟,实用其定时/计数器TO,工作模式为1,改变计 数值TH0和TL

5、0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数T值的对照表如下,T值决定了 TH0和TL0的值,其关系为:TH0=T256,TL0=T%256音符频率T值(简谱码)音符频率T值(简谱码)低1DO26263628#4FA#74064860#1DO#27763731中5SO78464898低2RE29463835#5SO#8314943#2RE#31163928中6LA88064968低3MI33064021#693264994低4FA34964103中7SI98865030#4FA#37064185高1DO104665058低5SO39264260#1DO#110965085#

6、5SO#41564331高2RE117565110低6LA44064400#2RE#124565134#646664463咼3MI131865157低7SI49464524咼4FA139765178中1DO52364580#4FA#148065198#1DO#55464633高5SO156865217中2RE58764684#5SO#166165235#2RE#62264732高6LA176065252中3MI65964777#6186565268中4FA69864820高7SI197665283注:加粗斜体即为本电路中所用到的 T值2音频功放在一定频率范围内,具有固定频率的振动就能产生乐音,

7、但是单片机产生 的音频脉冲直接驱动扬声器并不能产生索要实现的音乐,因为它没有足够的驱动 能力,这就需要功率放大电路。我们就选用了低压音频功率放大器 LM386实现音频功放电路。LM386具有 以下特性:适合于电池工作;供电范围宽:412V或者518V;低静态电流消耗:4mA;电压增益范围:20200V。四. 电路原理图和说明以及主要元件说明1.硬件结构框图-ED灯4x4 矩阵 式键盘51单片机1功放扬声电路=器2仿真电路原理图及说明仿真软件:Proteus;器件:STC89C5洋片机、晶振、LM386、轻触开关、扩音器、白发蓝光 LED灯以及各类电阻电容。P1 口(也就是单片机的1脚8脚)接矩

8、阵键盘。P2 口(也就是单片机 的21脚28脚)接8个白发蓝光的LED 9脚接复位电路。18和19脚接晶 振。P3.6输出音频脉冲,并接到LM386的3脚。LM386的电路说明参看后 面对元件的说明。3.主要元件及说明1)STC 89C52R单片机P1 口接矩阵键盘,P2口接LED仁LED8 P3A6输出音频脉冲。单片机工作原理:a. 中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的 处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调 度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。b. 数据存储器(RAM):51单片机内部有128字节数据存储器(

9、RAM和21个专用寄存 器单元,它们是统一编址的,专用寄存器有专门的用途,通常用于 存放控制指令数据,不能用作用户数据的存放,用户能使用的RAM只有128个字节,可存放读写的数据,运算的中间结果或用户定义 的字型表。c. 程序存储器(ROM)51单片机共有4K字节程序存储器(ROM,用于存放用户程序 和数据表格。d. 定时/计数器(ROM)51单片机有两个16位的可编程定时/计数器,以实现定时或计 数,当定时/计数器产生溢出时,可用中断方式控制程序转向。e. 并行输入输出(I/O) 口:51单片机共有4个8位的并行I/O 口 (P0、P1、P2、P3),用于 对外部数据的传输。f. 全双工串行

10、口:51单片机内置一个全双工异步串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当 同步移位器使用。g. 中断系统:51单片机具备较完善的中断功能,有五个中断源(两个外中断、 两个定时/计数器中断和一个串行中断),可基本满足不同的控制要 求,并具有2级的优先级别选择。h. 时钟电路:51单片机内置最高频率达12MHZ勺时钟电路,用于产生整个单 片机运行的时序脉冲,但需外接晶体振荡器和振荡电容。2)LM386引脚功能说明:1脚和8脚:GAIN脚,增益控制引脚。如这两个引脚悬空,则增益为20V,如果两脚间接一个很大的极性电容则增益为200V,如果接一个极性电容再

11、串接一个电阻,则增益在20200V之间。我们所选用的电路中,1、8脚间接有一个10uf的极性电容和一个1.2K欧 的电阻,电压增益为50V。2脚:-IN脚,负极性输入脚。在单极性输入时,此引脚接地,也 是我们所选用的电路。3脚:+IN脚,正极性输入脚。在单极性输入时,此引脚接信号输 入。在电路中也就是接单片机的 P3A6脚(输出音频脉冲)。3脚前接 的电位器可改变接入电阻来达到改变音量的效果。4脚:GND脚5脚:Vout脚,电压输出脚,此引脚为音频功放电路的输出。6脚:Vs脚,电源脚。7脚:旁路脚,在电路中悬空或接一个大电容到地。本电路中接了 一个47uf的电容3)矩阵式键盘为了减少使用单片机

12、的I/O 口,我们选择采用矩阵式键盘。矩阵 式键盘由行线和列线组成,按键位于行列的交叉点上,而行和列分 别连在按键的两端,列线通过电阻接正电源,接到单片机的 P1A0P1A3,而列线则接到P1A4P1A7,并且,行线通过上拉电阻 接到高电平,这样,当按键没有按下时,所有的输入端都是高电平, 代表无键按下。一旦有键按下,则输入线就会被拉低,这样,通过 读入输入线的状态就可得知是否有键按下了。通过行列键盘扫描的 方法可获取键盘输入的键值,从而得知按下的是哪个键,具体过程 如下:a)查询是否有键按下。单片机向行扫描口输出全为 0的扫描码,然后从列检查信号,只要有一列不为1,则表示有键按下,且不为1的

13、列即为按下的键所在列。b)查询按下键所在的行、列位置。在上一步已取得了按下键的列 号,接下来要确定键所在的行,这需要进行逐行扫描。单片机首先使第一行为0,其余各行为1,接着进行行列检测,若全为 1,表示不在第一行,否则在第一行;同理检测第二、三、四行, 这样逐行检测,直到找到按下键所在的行。当各行都扫描以后 仍没找到,则认为是键的误动作。c)对得到的行号和列号译码,得到键值。对于4x4的行列式键盘,因为按键的位置由行号和列号唯一确定,且行列各4位,所以用一个字节来对键值编码是很合适的,在本次电路中,将字节高的四位(也就是 D7、D6、D5、D4)表示列号(4、3、2、1), 低四位(D3、D2

14、、D1、D0)表示行号(4、3、2、1)5.软件设计对于软件设计主要包括两个部分:1)矩阵式键盘输入识别及实现LED灯的发光;2)产生不同的音频脉冲。程序源代码见附件五. 实现的功能此次制作实现了基本的发声功能,而且还在这基础上增加了不同音调的乐音。分别是中音的1、2、3、4、5、6、7、#1#,高音的1、2、3、4、5、6、7和低音的1.并且实现了 LED的发光从正面看矩阵键盘,第一排左边起以此发中音的 1、2、3、4,第二排 发中音的5、& 7和#1#,第三排依次是高音的1、2、3、4,第四排是高 音的5、& 7和低音的1。并且还实现了发1音的时候亮1个灯,发2音 的时候亮

15、2个灯以此类推。运用LM386功放电路,并且实现了音量大小的调节。此外,在“其他”部分的发挥中,我们采用了单片机,矩阵式键盘以 及一些外观的设计。附件程序清单:#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit bee=P3A6;uchar code ledtable2=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;uchar disp16=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

16、,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar disp116=0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x3f;un sig ned char temp;un sig ned char key;un sig ned char i,j;un sig ned char STH0;un sig ned char STL0;un sig ned int code tab=64580, 64684, 64777, 64820, 64898, 64968, 65030,

17、中音区:1 2 3 4 5 6 765058, 65110, 65157, 65178, 65217, 65252, 65283 高音区:1 2 3 4 5 6 765297,63625,/ 低音:1;un sig ned char code ledvalue=0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xfe,0x7e,0x3e,0x1E,0x0e,0x06,0x02,0x00,;void delay(uchar x)uchar y,z;for(y=x;y>0;y_)for(z=0;z<110;z+);void init()TMOD=0x01

18、;ET0=1;EA=1;void display。for(i=0;i<2;i+)P0=tablewei;if(i=0)P0=dispkey;elseP0=disp1key; delay(4);void ma in (void)in it();P2=0xFF;while(1)P仁 0xef;temp=P1; temp=temp & 0x0f;if (temp!=0x0f)delay(5); temp=P1; temp=temp & 0x0f;if (temp!=0x0f)temp=P1; temp=temp & 0x0f; switch(temp)case 0x0e

19、: key=0; break;case 0x0d: key=1; break;case 0x0b: key=2;break; case 0x07: key=3;break;P2=ledvaluekey; temp=P1;STH0=tabkey256; STL0=tabkey%256; TR0=1;temp=temp & 0x0f; while(temp!=0x0f)display(); temp=P1; temp=temp & 0x0f; P2=0xFF;P1=0xdf;temp=P1; temp=temp & 0x0f;if (temp!=0x0f)delay(5);

20、temp=P1;temp=temp & 0x0f;if (temp!=0x0f)temp=P1;temp=temp & 0x0f; switch(temp)case 0x0e:key=4;break; case 0x0d:key=5; break; case 0x0b:key=6;break;case 0x07: key=7; break;P2=ledvaluekey; temp=P1;STH0=tabkey256; STL0=tabkey%256;TR0=1; temp=temp & 0x0f;while(temp!=0x0f)display();temp=P1; temp=temp & 0x0f;P2=0xFF;P1=0xbf;temp=P1; temp=temp & 0x0f;if (temp!=0x0f) delay(5);temp=P1; temp=temp & 0x0f;if (temp!=0x0f)temp=P1; temp=temp & 0x0f; switch(temp)case 0x0e: key=8; break;case 0x0d: key=9

温馨提示

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

评论

0/150

提交评论