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

上传人:b****7 文档编号:23922374 上传时间:2023-05-22 格式:DOCX 页数:13 大小:172.18KB
下载 相关 举报
基于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

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

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

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

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

一、设计任务及要求

1、在该简易电子琴设计中,设置8个按键,8个按键可以发出do、re、mi、fa、sol、la、si、Do8个音阶。

2、设计三个拨码开关,三个拨码开关可以调节高音、中音、低音三个音调。

3、画出电路的总体方框图和电路原理图。

二、设计原理

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

简易电子琴是摁下拨码开关时,单片机AT89C51会发出声音,声音从端口经过LM386,经过放大以后传入喇叭。

声音主要是经过单片机4×4矩阵键盘的按键产生,这里只用到8个按键来产生高中低的8个音阶,来产生doremifasollasiDo。

下面是计数初值:

音符

频率HZ

半周期us

初值码

音符

频率HZ

半周期us

初值码

低1DO

262

1908

63628

#4FA#

740

676

64860

#1DO#

277

1805

63731

中5SO

784

638

64898

低2RE

294

1700

63835

#5SO#

831

602

64934

#2RE#

311

1608

63928

中6LA

880

568

64968

低3MI

330

1516

64021

#6LA#

932

536

64994

低4FA

349

1433

64103

中7SI

988

506

65030

#4FA#

370

1350

64185

高1DO

1046

478

65058

低5SO

392

1276

64260

#DO#

1109

451

65085

#5SO#

415

1205

64331

高2RE

1175

426

65110

低6LA

440

1136

64400

#2RE

1245

402

65134

#6LA#

466

1072

64463

高3MI

1318

372

65157

低7SI

494

1012

64524

高4FA

1397

358

65178

中1DO

523

0956

64580

#4FA#

1480

338

65198

#1DO#

554

0903

64633

高5SO

1568

319

65217

中2RE

578

0842

64684

#5SO#

1661

292

65235

#2RE#

622

0804

64732

高6LA

1760

284

65252

中3MI

659

0759

64777

#6LA#

1865

268

65268

中4FA

698

0716

64820

高7SI

1976

253

65283

三、设计方案

本次设计的电子琴主要是利用AT89C51单片机为核心控制元件,同时还包括键盘、拨码开关和扬声器等控制模块,由键盘选择八个音阶。

1、电路原理图的总体设计

总体电路需要c51单片机一片,音乐按键及喇叭等外围电路,要进行音调控制和音频放大,设计好的电路图如下图所示:

2、键盘控制模块的设计

矩阵按键部分由8个轻触按键按照2行4列排列,连接到P3端口。

将行线所接的单片机的I/O口作为输出端,而列线所接的I/O,则作为输入。

行线输出是低电平,有健按下,则输入线就会被拉低,这样,通过读输入线的状态就可得知是否有键按下。

3、键盘消抖

当用手按下一个键时,如图所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。

这就是抖动。

抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。

 

用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,此后再读入键盘码。

一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。

它的一个机器周期是12*(1/12)也就是1微秒。

MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。

DJNZ指令是双周期指令,所以延时10MS的指令如下:

DELAY10MS:

;延时10ms程序

MOVR6,#10

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

4、拨码开关模块设计

8个音阶的选择开关接在了P3口,三个拨码开关可以连在P2口的、、上,在内存区中建立三个表,分别存储低音、中音和高音的频率值。

当三个拨码开关中某一个按下,就通过软件选择相应的音量。

5、扬声器模块设计

(1)一般单片机的I/O口输出电压是在0~5V,NPN三极管的发射极接地时,基极不能直接接受5V电压,所以用电阻R1来限流。

一般取~10K。

(2)三极管工作在开关状态,即截止-饱和两个状态。

用PWM输出时能听到声音,是因为变化的脉宽信号已经被平滑成了我们人耳能听见的音频信号(包络线)。

“当IO口为高电平时三极管导通,此时基极的电位与集电极的电位又是相等的”,这里你忽略了电阻R1的作用。

基极的电位最高是,而集电极的电位能低至饱和压降(左右),符合三极管饱和时“两个正偏”的状态。

四、程序框图

五、电子琴汇编源程序

KEYBUFEQU30H;用于储存键值

STH0EQU31H;储存高八位初值

STL0EQU32H;储存低八位初值

TEMPEQU33H;储存中间量

ORG00H

LJMPMAIN

ORG0BH;定时器T0中断入口地址

LJMPINT_T0

MAIN:

;主函数入口

MOVTMOD,#01h;定时器T0初始化,采用方式1

SETBEA;总中断允许

SETBET0;定时器T0溢出中断允许

TEXT:

;音调控制按键检测程序入口

MOVA,P2

CJNEA,#0FEH,TEXT1;检测口低音控制按键是否按下

MOVDPTR,#TABLE1;低音表首地址

LJMPWAIT;若音调控制按键按下,调至音阶按键检测程序

TEXT1:

CJNEA,#0FDH,TEXT2;检测口中音控制按键是否按下

MOVDPTR,#TABLE2;中音表首地址

LJMPWAIT

TEXT2:

CJNEA,#0FBH,TEXT3;检测口高音控制按键是否按下

MOVDPTR,#TABLE3;高音表首地址

LJMPWAIT

TEXT3:

LJMPTEXT;若都没有按下则继续检测音调控制按键

WAIT:

;音阶按键检测程序入口

MOVP3,#0FFH

CLR;检测第一列两个按键

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY1

LCALLDELAY10MS;软件延时消抖

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY1;确定是否有按键按下

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,NK1

MOVKEYBUF,#0;赋予键值

LJMPDK;调至按键处理程序

NK1:

CJNEA,#0DH,NK2

MOVKEYBUF,#1

LJMPDK

NK2:

NOP

NOKEY1:

;检测第二列两个按键

MOVP3,#0FFH

CLR

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY2

LCALLDELAY10MS;软件延时消抖

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY2;确定是否有按键按下

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,NK3

MOVKEYBUF,#2;赋予键值

LJMPDK;调至按键处理程序

NK3:

CJNEA,#0DH,NK4

MOVKEYBUF,#3

LJMPDK

NK4:

NOP

NOKEY2:

;检测第三列两个按键

MOVP3,#0FFH

CLR

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY3

LCALLDELAY10MS;软件延时消抖

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY3;确定是否有按键按下

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,NK5

MOVKEYBUF,#4;赋予键值

LJMPDK;调至按键处理程序

NK5:

CJNEA,#0DH,NK6

MOVKEYBUF,#5

LJMPDK

NK6:

NOP

NOKEY3:

;检测第四列两个按键

MOVP3,#0FFH

CLR

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY4

LCALLDELAY10MS;软件延时消抖

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY4;确定是否有按键按下

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,NK7

MOVKEYBUF,#6

LJMPDK;调至按键处理程序

NK7:

CJNEA,#0DH,NK8

MOVKEYBUF,#7

LJMPDK

NK8:

NOP

NOKYE4:

LJMPTEXT;若没有检测到音阶按键按下调至音调控制检测程序入口

DK:

;键值处理程序入口

MOVA,KEYBUF

MOVB,#2

MULAB

MOVTEMP,A

MOVCA,@A+DPTR;根据获得的表首地址及ACC的值读表

MOVSTH0,A;存储定时器高八位初值

MOVTH0,A;赋予定时器高八位初值

INCTEMP;TEMP加1为了读取低八位初值

MOVA,TEMP

MOVCA,@A+DPTR;读取低八位初值

MOVSTL0,A;存储定时器低八位初值

MOVTL0,A;赋予定时器低八位初值

SETBTR0;开启定时器T0中断允许

DKA:

;检测音阶按键是否释放程序入口

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JNZDKA;确定按键是否释放,若没有,继续检测

LCALLDELAY100MS;音阶声音延时

LCALLDELAY100MS

LCALLDELAY100MS

LCALLDELAY100MS

CLRTR0;关闭T0溢出中断允许

NOKEY4:

LJMPTEXT;重新检测

DELAY10MS:

;延时10ms程序

MOVR6,#10

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

DELAY100MS:

;延时100ms程序

MOVR5,#0DDH

DL0:

MOVR4,#0CFH

DJNZR4,$

DJNZR5,DL0

RET

INT_T0:

;定时器T0中断入口程序

MOVTH0,STH0;装入定时器高八位初值

MOVTL0,STL0;装入定时器低八位初值

CPL;口电平翻转,产生一定频率的方波

RETI;中断返回

TABLE1:

DW63628,63835,64021,64103;低音调表值

DW64260,64400,64524,64580

TABLE2:

DW64580,64684,64777,64820;中音调表值

DW64898,64968,65030,65058

TABLE3:

DW65058,65110,65157,65178;高音调表值

DW65217,65252,65283,65312

END;结束

六、Proteus仿真原理图

根据电路原理图,在Proreus中绘制仿真电路图,如下图所示:

仿真测试时可选择低、中、高音按键中的一个,然后点击do、re、mi、fa、sol、la、SI、DO可以听到八个音阶的声音,并可清晰地感觉到频率变化。

七、实验总结

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

当前位置:首页 > 初中教育 > 初中作文

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

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