劳锦富2B初级组电子琴Word下载.docx

上传人:b****5 文档编号:16343160 上传时间:2022-11-23 格式:DOCX 页数:34 大小:433.36KB
下载 相关 举报
劳锦富2B初级组电子琴Word下载.docx_第1页
第1页 / 共34页
劳锦富2B初级组电子琴Word下载.docx_第2页
第2页 / 共34页
劳锦富2B初级组电子琴Word下载.docx_第3页
第3页 / 共34页
劳锦富2B初级组电子琴Word下载.docx_第4页
第4页 / 共34页
劳锦富2B初级组电子琴Word下载.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

劳锦富2B初级组电子琴Word下载.docx

《劳锦富2B初级组电子琴Word下载.docx》由会员分享,可在线阅读,更多相关《劳锦富2B初级组电子琴Word下载.docx(34页珍藏版)》请在冰豆网上搜索。

劳锦富2B初级组电子琴Word下载.docx

四.设计与认证

主要原理:

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了。

此电路使用单片机ATS89S52,晶振频率为12MHZ。

通过T0计时器来产生方波频率,进而控制蜂鸣器的发声。

通过4*4矩阵键盘确定输出16个音符。

通过T1计时器来定义一首歌的节拍。

算出高中低间符与单片机计数T0相关的计数值如下表所示:

音符

频率

T值

低1

262

63628

高1

1046

65058

低2

294

63835

高2

1109

65110

低3

330

64021

高3

1318

65157

低4

349

64103

高4

1397

65178

低5

392

64260

高5

1568

65217

低6

440

64400

高6

1760

65252

低7

494

64524

高7

1967

65283

中1

523

64580

中2

587

64684

中3

659

64777

中4

698

64820

中5

784

64898

中6

880

64968

中7

988

65030

低音#1

277

63731

中音#1

554

64633

高音#1

65085

低音#2

311

63928

中音#2

622

64732

高音#2

1245

65134

低音#4

370

64185

中音#4

740

64860

高音#4

1480

65198

低音#5

415

64331

中音#5

831

64934

高音#5

1661

65235

低音#6

466

64463

中音#6

932

64994

高音#6

1865

65268

流程图:

硬件:

矩阵键盘:

矩阵键盘两端都与单片机I/O口相连,在检测时人为通过单片机I/O口送出低电平,检测时,先送一列为低电平,其余几列全为高电平,此时确定列数,然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平,则可确认当前被按下的键是哪一行哪一列的,用相同方法轮流送各列一次低电平,再轮流检测一次各行是否变为低电平,这样即可检测完所有的按键,当有键被按下时便可判断出按下的键是哪一个键。

本实验以P3口做为矩阵键盘的扫描。

独立键盘:

独立键盘有一端固定为低电平,当按键按下时,输出口变为低电平,便可确定是否有键按下。

本实验以P1.1-P1.7为独立键盘,分别控制四首歌的播放以及播放顺序。

LED灯:

本实验通过16个I/O口控制16个LED灯。

输出口为P0,P2.

当用作输出,所有口线的状态都与SFR锁存位的设置有密切的联系。

P0口为低除外。

当P0口的一个位写入0时,这个位被拉低。

但是对P0口的其中一个位写入1时,这个位呈现高阻(高阻浮空状态),也就是未能连机,不能使用。

要想获得1输出,你必须在P0口外加上拉电阻。

补充:

一些口线被作为简单的高电平输入也与SFR锁存位有关。

因为P1、P2、P3有内部上拉电阻,可以随意被拉高,拉低。

而P0口作为高电平输入时,也会呈现高阻态。

P0没有内部上拉电阻,在驱动场效应管的上方有一个提升场效应管,它只是在对外存储器进行读写操作,用作地址/数据时才起作用,当向位锁存器写入1,使驱动场效应管截止,则引脚浮空,所以写入1而未获得。

用P0口驱动led,用1K左右的就行了。

要想LED亮度大一些,电阻要减小,最小不要小于200欧姆,否则电流太大。

对于P2口,可以对每个LED灯串联上一个1K电阻。

扬声器:

以P1.0作为扬声器输入口,扬声器功率为0.5W,电阻8欧。

通过两级放大电路以驱动扬声器。

放大电路通过两个8050NPN三极管实现。

电路图如下。

其中串联电阻可以不用接上。

软件:

仿真部分:

用PROTEUS进行软件仿真,鉴于软件仿真情况跟现实有较大的区别,在软件仿真中没有误差的存在。

于是在扬声器电路中只需短接扬声器,不需要使用三极管放大。

LED灯所接的电阻也不需要为1K,可以空间LED灯,而本设计加上50欧的电阻。

软件仿真电路图如下:

制作电路板:

用ALTIUMDESIGNER进行电路板制作,主要原理图如下:

PCB制板电路图如下:

六.测试数据及分析

电路板制作后,由于转印过程中有导线未能很好复印,导致导线有断路的情况。

因此用万用表二极管测各条导线是否导通,用于断线的电路用导线连接上。

一开始由于对扬声器的驱动没有很好的把握,设计只用一个三极管驱动,后来发现供电电压不够大,无法驱动扬声器。

于是加上一万表板,用两个三极管放大电流用来驱动扬声器。

接上电源之后,电源灯亮,电路导通。

各个功能的尝试,跟设计预期效果一样。

设计程序:

unsignedintcodetable[]={

64021,64103,64260,64400,

64524,64580,64684,64777,

64820,64898,64968,65030,

65058,65110,65157,65178,

65110,65110,65110,65110,

65110,65110,65110,65110

};

//低音3到高音416个音T值

unsignedintcodetmusic[]={0,

63628,63835,64021,64103,64260,64400,64524,0,0,0,//低

64580,64684,64777,64820,64898,64968,65030,0,0,0,//中

65058,65110,65157,65178,65217,65252,65283,0,0,0,//高

63731,63928,64021,64186,64331,64463,64524,0,0,0,//低升半

64633,64732,64777,64860,64934,64994,65030,0,0,0,//中升半

65085,65134,65157,65198,65235,65258,65283};

//高升半}

unsignedintcodemusic11[]={64777,64777,64820,64898,

64898,64820,64777,64684,

64580,64580,64684,64777,

64777,64684,64684,64684,

64777,64777,64820,64898,

64898,64820,64777,64684,

64684,64580,64580,64580,

64684,64684,64777,64580,

64684,64777,64820,64777,64580,

64684,64777,64820,64777,64684,

64580,64684,64260,64260,

64777,64777,64820,64898,

64898,64820,64777,64820,64684,

64684,64580,64580,0};

//定义第一首歌频率

unsignedcharcodemusic12[]={10,10,10,10,

10,10,10,10,

10,10,10,5,

10,5,5,10,10,

10,10,10,5,5,

10,10,10,10};

//定义第一首歌节拍时间

unsignedintcodemusic21[]={64968,64777,64820,64898,64898,64898,

65898,64777,64820,64898,64898,64898,

64898,64777,64820,64898,64898,64898,65058,65110,

65030,65030,64777,64898,64898,647898,

64968,65157,65157,65110,65110,65110,65110,64777,

64898,65110,65110,65110,65058,65058,65058,65058,65058,64777,

64820,65058,65058,65058,65110,65157,65058,65058,65030,65030,65058,

64820,65058,65058,65058,65110,65157,65058,65058,65058,64968,65110,

65110,

64898,65110,65127,65127,65110,65110,65110,65058,65058,

65110,65157,64968,65058,65058,0};

unsignedcharcodemusic22[]={20,20,12,12,12,12,

20,20,12,12,12,12,

20,20,12,12,12,12,12,12,

20,12,12,12,12,12,12,

12,12,12,12,12,12,12,12,

12,12,12,12,12,12,12,12,12,

12,12,12,12,12,12,12,12,12,12,12,

20,

20,12,12,12,12

};

unsignedintcodemusic31[]={64580,64684,

64777,64777,64684,64580,

64777,64684,64400,

64580,64580,64524,64580,

64400,64400,64580,

64524,64524,64400,64260,

64524,64524,64260,

64400,64400,64580,64524,64580,

64400,64580,64684,

64777,64777,64898,64898,64684,

64684,64777,64684,64524,64580,

64684,64684,64777,64684,64580,

64524,64580,64400,64400,64580,

64777,64820,64777,

64684,64524,64580,

64684,64684,64777,

64580,64400,64524,

64580,64580,64524,64400,64580,

64777,64777,64777,

64777,64580,64684,

64777,64777,64898,

64400,64400,0

};

unsignedcharcodemusic32[]={10,10,

20,10,10,20,

20,10,10,

20,20,10,10,

20,10,10,10,10,

10,10,20,10,10,

20,20,20,

20,10

#include<

reg52.h>

#include"

music.h"

#defineucharunsignedchar

#defineuintunsignedint

ucharsth0,stl0;

//用于存储TH0以及TL0的值

uinti,flag,b,j,y;

//b值用于读取每个音符值

sbitsounder=P1^0;

//蜂鸣器端

sbitmusic1=P1^1;

//低电位时播放歌曲1

sbitmusic2=P1^2;

//低电位时播放歌曲2

sbitmusic3=P1^3;

//低电位时播放歌曲3

sbitshunxu=P1^4;

//低电位时按顺序播放歌曲

sbitchongfu=P1^5;

//低电位时重复播放歌曲

sbityindiao=P1^6;

//选择音调的不同

sbitstop=P1^7;

//低电位时暂停播放歌曲

uchark,play_flag;

//K为确定独立键盘按下的,用于确定16个音符中某一个。

play_flag为确定播放歌曲

ucharpause;

//播放歌曲时,有按键输入则跳出播放,为1时确定暂停

ucharreplay_flag;

//循环播放时值为0,初定义为1

voiddelayms(uintxms);

//延时程序,用于消除振荡

voidkeyscan();

//扫描矩阵键盘,确定按下音符值

voidkeyscan1();

//扫描独立键盘,进行相关程序

voidchangeyin()

{

if(yindiao==0)

{

delayms(10);

if(yindiao==0)

{

y=y+16;

switch(y)

{

case16:

P0=0xff;

P2=0x00;

while(yindiao==0);

break;

case32:

P2=0xff;

P0=0x00;

while(yindiao==0);

case48:

P2=0xff;

y=0;

}

}

}

}

voidmain()

P0=0;

P2=0;

//关闭所有LED灯

TMOD=0x11;

//确定工作方式

EA=1;

//开总开断

ET0=1;

replay_flag=0;

TH1=(65535-25000)/256;

TL1=(65535-25000)%256;

ET1=1;

TR1=1;

while

(1)

{

changeyin();

keyscan();

keyscan1();

while(play_flag==1)

{

b=0;

flag=0;

i=0;

switch(k)

case1:

sth0=music11[b]/256;

stl0=music11[b]%256;

TH0=sth0;

TL0=stl0;

TR0=1;

while(music11[b]!

=0&

&

pause!

=1)

sth0=music11[b]/256;

stl0=music11[b]%256;

if(flag==1)

sth0=music11[b]/256;

stl0=music11[b]%256;

flag=0;

keyscan();

P0=0;

P2=0;

switch(music11[b])

{

case64021:

P0=0x01;

break;

case64103:

P0=0x02;

case64260:

P0=0x04;

case64400:

P0=0x08;

case64524:

P0=0x10;

case64580:

P0=0x20;

case64684:

P0=0x40;

case64777:

P0=0x80;

case64820:

P2=0x80;

case64898:

P2=0x40;

case64968:

P2=0x20;

case65030:

P2=0x10;

case65058:

P2=0x08;

case65110:

P2=0x04;

break

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

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1