基于51单片机的简易电子琴设计.docx

上传人:b****4 文档编号:4599858 上传时间:2023-05-07 格式:DOCX 页数:13 大小:153.49KB
下载 相关 举报
基于51单片机的简易电子琴设计.docx_第1页
第1页 / 共13页
基于51单片机的简易电子琴设计.docx_第2页
第2页 / 共13页
基于51单片机的简易电子琴设计.docx_第3页
第3页 / 共13页
基于51单片机的简易电子琴设计.docx_第4页
第4页 / 共13页
基于51单片机的简易电子琴设计.docx_第5页
第5页 / 共13页
基于51单片机的简易电子琴设计.docx_第6页
第6页 / 共13页
基于51单片机的简易电子琴设计.docx_第7页
第7页 / 共13页
基于51单片机的简易电子琴设计.docx_第8页
第8页 / 共13页
基于51单片机的简易电子琴设计.docx_第9页
第9页 / 共13页
基于51单片机的简易电子琴设计.docx_第10页
第10页 / 共13页
基于51单片机的简易电子琴设计.docx_第11页
第11页 / 共13页
基于51单片机的简易电子琴设计.docx_第12页
第12页 / 共13页
基于51单片机的简易电子琴设计.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的简易电子琴设计.docx

《基于51单片机的简易电子琴设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的简易电子琴设计.docx(13页珍藏版)》请在冰点文库上搜索。

基于51单片机的简易电子琴设计.docx

基于51单片机的简易电子琴设计

题目

51单片机的简易电子琴设计

课题性质

工程设计

课题来源

自拟

指导教师

 

同组姓名

主要内容

设计一个51单片机系统,实现简易电子琴操作的电路。

要求:

1设计51单片机最小系统;

2.设置至少10个按键,能发出doremifasollaSIDO;

能播放示范曲;

3.能够调节低音、高音和中音。

任务要求

1.根据功能要求选择设计方案,并进行论证。

2.画出电路的总体方框图和电路原理图。

3.说明系统工作原理,对系统进行调试。

4.写出课程设计报告。

参考文献

1.《51单片机C语言教程》郭天祥电子工业出版社

2.《电路》邱关源高等教育出版社

3.XX

审查意见

指导教师签字:

教研室主任签字:

年月日

说明:

本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

一、设计任务及要求 

1.设计51单片机最小系统,实现简易电子琴操作的电路;

2.设置至少10个按键,能发出doremifasollaSIDO;能播示范曲;

3.能够调节低音、高音和中音。

根据功能要求选择设计方案,并进行论证。

4.画出电路的总体方框图和电路原理图。

5.说明系统工作原理,对系统进行调试。

二、系统方案设计 

1.采用以STC89C52单片机为核心的控制方案 

STC89C52是一种低功耗、高性能的8位COMS微控制器,具有8KB的可编程Flash存储器,具有在线编程可擦除技术,当对系统进行调试时,由于程序的错误修改或对对程序新增功能需要烧入程序时,不需要对芯片多次插拔,所以不会造成对芯片的损坏,且方便灵活。

 

基于以上因素本设计选用单片机STC89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的电子琴功能。

在单片机的外围接8个按钮用于输入控制,其中第8个按钮用来播放一小段音乐。

在外接8个发光二极管用来指示音乐的节拍等。

2.设计原理

主要利用单片机中的定时器中断、LED显示、以及扬声器实现了演奏和显示功能。

针对声音有音阶、音调和音长三种基本特性,通过对定时器T0送入不同的初值,调节T0的溢出时间,输出频率可控的方波,从而控制不同音阶的音调高低。

而对于音长的控制,则可以向定时器T1送入一个固定初值,通过控制定时器中断循环的次数,来实现对发音时间长短的控制。

对于音符和曲目的显示,主要通过读入键值,判断所选曲目或音符,输出到LED上显示。

我们主要使用单片机设计简易电子琴,利用单片机产生不同频率来获得我们要求的音阶。

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号。

3.STC89C52系列最小机系统设计 

A.时钟电路设计 

时钟电路用于产生STC89S52单片机工作时所必须的控制信号。

STC89S52单片机的内部电路正是在时钟信号的控制下,严格地按时序执行指令进行工作。

 

STC89C52单片机各功能部件的运行都以时钟控制信号为准,有条不紊、一拍一拍地工作。

因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。

常用的时钟电路有两种方式:

一种是内部时钟方式,另一种为外部时钟方式。

 

本设计中的时钟电路选择2个30pF的电容、1个震荡频率为11.0592Hz的石英晶体,构成内部时钟晶体电路如图3-1所示

B.复位电路设计 

STC89C52的复位是由外部的复位电路实现的复位是单片机的初始化操作,只需给STC89S52的复位引脚RST加上大于两个机器周期(即24个时钟震荡周期)的高电平就可使STC89C52复位。

如图3-2所示.当STC89C52进行复位时,PC初始化为0000H,使STC89C52单片机从程序储存器的0000H单元开始执行程序。

除了进入系统的正常初始化之外,当程序运行出错或操作错误使系统处于“死锁”状态时,也需按复位键即RST脚为高电平,使STC89C52摆脱“跑飞”或“死锁”状态而重新启动程序。

复位电路通常采用上电复位和按钮复位两种方式。

 本设计中的复位电路选择1个10uF的电容、1个10K,1个2K的电阻、以及1个复位开关

4.发音电路接线图 

发音电路中包含一个蜂鸣器。

在本设计中,用单片机P3.3口来控制发音装置,提供发音信号,经LM386放大之后送给蜂鸣器发出音乐。

图4-4为发音装置接线图

5.键盘电路设计 

电子琴键盘采用独立式键盘。

其特点是一键一线,各键相互独立,每个按键各接一条I/O口线,通过检测I/O口输入线的电平状态,可以很容易的判断哪个按键被按下,如图4-6所示

6.发音原理 

由于本系统可以产生各种频率的声音,所以可由喇叭发出“DO”、“RE”、“ME”„„的音阶。

系统中的定时器O工作于模式0,计时时长可根据所发音的频率而定,而由频率值推得的定时器计数初值。

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率。

我们可以利用单片机的定时/计数器T0来产生这样方波频率信号。

  若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。

利用定时器计时半周期时间,每当计时终止后就将P3.3反相,然后重复计时再反相。

就可在P3.3引脚上得到此频率的脉冲。

利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

 计数脉冲值与频率的关系式(如式4-1所示)是:

 

N=fi÷2÷fr                         4-1 

式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。

 其计数初值T的求法如下:

 

T=65536-N=65536-fi÷2÷fr 

例如:

设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

 

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr 

低音DO的T=65536-500000/262=63627 中音DO的T=65536-500000/523=64580 高音DO的T=65536-500000/1046=65059 

单片机12MHZ晶振,高中低音符与计数T0相关的计数值如下表所示

7.系统主程序流程图 

主程序如下:

#include

#include

sbitbeer=P3^3;//蜂鸣器

sbitP33=P3^3;

intnum,count;

intcodelab[]={61719,62435,62506,62679,62985,63263,63512,

63628,63835,64021,64103,64260,64400,64524,

64580,64684,64777,64820,64898,64968,65070};

intcodeSong[]={0x12,50,0x12,50,0x12,100,

0x12,50,0x12,50,0x12,100,

0x10,50,0x12,50,0x13,15,0x12,25,0x10,25,

0x0f,75,0x10,75,0x12,50,

0x12,75,0x10,75,0x12,75,0x10,37,0x0f,37,

0x0e,75,0x10,75,0x0f,150,

0x10,100,0x10,100,0x0f,200,

0x0c,100,0x0e,100,0x0f,75,0xff,100,

0x13,25,0x13,25,0x12,75,

0x10,25,0x13,25,0x12,50,

0x12,50,0x10,50,0x0f,50,0x10,50,

0x12,75,0xff,75,0xff,75,

0x12,65,0x10,65,0x0f,65,0x10,65,

0x12,65,0x10,65,0x0f,65,0x10,65,

0x0c,65,0x0e,65,0x0f,65,0x10,65,

0x0e,100,0xff,100,0xff,100,0x00,0x00};

 

intcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

intcodetable2[]={0x7e,0xbd,0xdb,0xe7};

 

voidinit()//计数器终端初始化

{

num=0;

TMOD=0x11;

TH0=0xff;

TL0=0xff;

TH1=0xD8;//装初值

TL1=0xEF;

EA=1;

ET0=1;

ET1=1;

}

 

voiddelay(intz)//延时子程序

{

intx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidinter()interrupt1//计数器0

{

TH0=lab[num]/256;

TL0=lab[num]%256;

beer=!

beer;

}

voidtimer1()interrupt3//计数器1

{

TH1=0xD8;//装初值

TL1=0xEF;

count++;

}

voidPlay_Song()//放歌子程序

{

unsignedcharTemp2;

unsignedintAddr,a=0;

count=0;

while

(1)

{

num=Song[Addr];

Addr++;

TH0=lab[num]/256;

TL0=lab[num]%256;

if(num==0xFF)//休止符

{

Temp2=Song[Addr++];

TR1=0;

delay(Temp2);

}

elseif(num==0x00)//歌曲结束符

{

return;

}

else

{

Temp2=Song[Addr++];

P1=table2[a];

a++;

if(a==4)

a=0;

TR1=1;

delay(1.1*Temp2);

}

}

}

voidsound(unsignedchara)//按键发声子程序

{

switch(a)

{

case0xfe:

num=14;P1=table[0];break;

case0xfd:

num=15;P1=table[1];break;

case0xfb:

num=16;P1=table[2];break;

case0xf7:

num=17;P1=table[3];break;

case0xef:

num=18;P1=table[4];break;

case0xdf:

num=19;P1=table[5];break;

case0xbf:

num=20;P1=table[6];break;

case0x7f:

num=7;break;

}

if(num==7)

Play_Song();

TH0=lab[num]/256;

TL0=lab[num]%256;

while(P2!

=0xff)

{}

P1=0xff;

}

voidmain()//主程序

{

init();

P2=0xff;

while

(1)

{

if(P2!

=0xff)//第一次判断是否有按键按下

{

delay(5);//消抖

if(P2!

=0xff)//确认是否有按键按下

{

TR0=1;

sound(P2);

}

TR0=0;

}

}

}

三、心得体会

这次的课程设计包含的基本知识很多,在过程中用到了很多以前学的东西,比如:

数字电子技术基础、模拟电子技术基础等相关知识,复习了以前的知识,同时学到了很多新的知识,在最后的调试中出现的错误在学长的帮助下顺利解决,更重要的是使我对单片机系统有了一个全新的认识。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2