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

上传人:b****2 文档编号:3093362 上传时间:2023-05-05 格式:DOCX 页数:21 大小:141.56KB
下载 相关 举报
基于单片机的电子琴设计.docx_第1页
第1页 / 共21页
基于单片机的电子琴设计.docx_第2页
第2页 / 共21页
基于单片机的电子琴设计.docx_第3页
第3页 / 共21页
基于单片机的电子琴设计.docx_第4页
第4页 / 共21页
基于单片机的电子琴设计.docx_第5页
第5页 / 共21页
基于单片机的电子琴设计.docx_第6页
第6页 / 共21页
基于单片机的电子琴设计.docx_第7页
第7页 / 共21页
基于单片机的电子琴设计.docx_第8页
第8页 / 共21页
基于单片机的电子琴设计.docx_第9页
第9页 / 共21页
基于单片机的电子琴设计.docx_第10页
第10页 / 共21页
基于单片机的电子琴设计.docx_第11页
第11页 / 共21页
基于单片机的电子琴设计.docx_第12页
第12页 / 共21页
基于单片机的电子琴设计.docx_第13页
第13页 / 共21页
基于单片机的电子琴设计.docx_第14页
第14页 / 共21页
基于单片机的电子琴设计.docx_第15页
第15页 / 共21页
基于单片机的电子琴设计.docx_第16页
第16页 / 共21页
基于单片机的电子琴设计.docx_第17页
第17页 / 共21页
基于单片机的电子琴设计.docx_第18页
第18页 / 共21页
基于单片机的电子琴设计.docx_第19页
第19页 / 共21页
基于单片机的电子琴设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

基于单片机的电子琴设计

电子琴设计

摘要:

本设计是用AT89S52单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器、LED显示器等模块组成核心主控制模块。

在主控模块上设有8个按键,其中7个按键控制7个音符,而1个作为功能转换键使用,具有手动随意弹奏和自动播放乐曲的功能。

本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。

关键词:

AT89C52单片机LED显示器扬声器1×8矩阵键盘7个音符自动播放乐曲

1引言

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

目前市场上各种品牌、型号的电子琴有上百种,由几十块的玩具电子琴到几百,几千的学习、演奏用琴真是琳琅满目,电子琴能够模仿各种音色和具有自动伴奏功能,这些是电子琴最基本的特征。

档次的高低无非是音色模仿的是否逼真,自动伴奏设计的是否丰富,或者增加了其他制作,编曲功能的。

本设计主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴系统硬件组成。

利用单片机产生不同频率来获得我们要求的7个音符,最终可随意弹奏想要表达的音乐。

并且本设计分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。

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

2总体设计方案

2.1设计思路

2.1.1从系统实现的功能上来看,电子琴的设计主要分为手动弹奏乐曲和自动播放音乐两大部分组成。

手动弹奏乐曲是根据具体的硬件键盘设置了7个音符按键和1个功能转换键,自动播放音乐是在单片机的存储器中通过软件编程的方法放置音乐代码和相关播放程序来实现。

2.1.2从系统硬件结构上来看,主要使用到52系列单片机、矩阵1×8键输入电路、LED数码管显示电路、扬声器以及电源电路等等。

将这些硬件电路有机地结合起来使之满足电子琴设计的基本硬件要求。

2.1.3从系统软件设计角度来看,将电子琴的设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、数码显示模块、转换控制模块、音乐产生模块等等。

此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲到自动播放音乐的切换。

2.1.4从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。

用软件延时来控制发音时间的长短,控制节拍。

把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在程序存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出音频脉冲的持续时间。

因此,我们可以综合上述的不同角度的方案设计原理,主要从软件和硬件两部分进行有计划有步骤的系统分析与设计,最终确立总体的设计方案。

方案确立

1、手动弹奏乐曲和自动播放音乐用非编码的矩阵键盘来实现,其中包括数字键和功能键,功能键主要是将手动弹奏模块转换到自动播放乐曲模块。

手动弹奏乐曲中7个键分别设置不同的7个音符,然后通过功能键可实现手动弹奏乐曲到播放乐曲之间的切换。

2、一位LED数码管显示当前工作状态,将按下的键值送入显示,并一一对应各个音符。

采用动态扫描输出。

3、软件的设计主要包括矩形键盘键值的读取、LED动态扫描输出程序、手动弹奏乐曲程序和音乐自动播放程序。

4、此次程序设计主要分为两大块:

手动弹奏乐曲程序和自动播放程序。

两者之间用功能转换程序对其进行结合,并实现各种不同功能的控制。

2.2设计方框图

基于单片机系统的电子琴的基本结构如图

(1)所示

(1)

3设计原理分析

3.1演奏音乐原理

通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经放大后驱动蜂鸣器发出不同音节的声音。

用软件延时来控制发音时间的长短,控制节拍。

把乐谱的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间。

单片机晶振频率为12MHZ时,乐曲中的音符、频率及定时常数之间的对应关系可制成表格。

本次设计中,定时常数是有16定时器T0根据不同的音符,装入不同的初值实现延时的,而延时常数是在自动播放音乐部分使用,控制不同音符的节拍,其延时常数是通过16位定时器T1实现的。

根据设计要求给出的各音符频率,我们只需要的各音符频率与计数值T的关系如表

(1)所示

(1):

C调各音符频率与计数值T的关系

音符

频率(Hz)

半周期(ms)

简谱码T值

定时值(H)

简谱码T值

定时值(D)

1Do

262

1.90

F894H

62628

2Re

294

1.70

F95CH

63835

3Mi

330

1.51

FA1AH

64021

4Fa

349

1.43

FA6AH

64103

5So

392

1.28

FB00H

64260

6La

440

1.14

FB8CH

64400

7Si

494

1.01

FC0EH

64524

3.2键盘扫描原理

先将1×8矩阵键盘的行(P2.0)和列(P1口)全部置为高电平,然后再逐行置为低电平,当有键按下时P1口的值会发生相应的改变,通过与给定数的比较,判定是否有键按下和是否键已松开。

并给定列号并保存,根据所给的列号的值,一方面通过P0口给LED送入确定好的段码数值,从而相对应地在LED上显示音符数字,另一方面从TABLE表中取出相应的值,给此时作为16位定时器的T0装入初值,不同的音符给T0装入的初值不同,即定时器的定时时间将不相同,将产生不同频率的音频脉冲,转换成声音播出的频率也将不同,从而实现7个不同的音符。

同时,通过示波器可查看P3.7的音频输出方波。

3.3硬件电路设计分析

因为AT89CXX系列与MCS-51系列单片机相比,有两大优势:

第一,片内程序存储器采用闪速存储器,使程序的写入更方便;第二,提供了更小尺寸的芯片,使整个硬件电路的体积更小。

它以较小的体积、良好的性能价格比倍受青睐。

本次综合实验设计采用89C52单片机。

3.3.1按键模块的设计

如图

(2)所示为1×8矩阵键盘模块,其行接P2.0口,其列逐一与P1口相接

(2)

因为不同的音符对应的频率是不同的,当按到不同的按键,发出的声音不一样,所以其产生的方波频率信号也会不一样,如下列7个小图①~⑦对应着7个不同音符的方波频率信号。

图①1Do图②2Re

图③3Mi图④4Fa

图⑤5So图⑥6La

图⑦7Si

3.3.2LED数码管显示模块的设计

如图(3)所示,为LED数码显示模块电路的设计部分

图(3)一位共阳数码管

本系统用单片机的P0口的P0.0~P0.6来控制LED显示器的数字显示。

当有7个音符按键1~7中有被按下,LED数码管将对应显示出该音符的数字,从而可以通过手动和眼看来确定所按的是哪个音符,应该发出哪个音符的声音。

而最后一个功能转换键一旦被按下,程序将会调用倒计3秒子程序,LED数码管将从3开始倒数到0,紧接着进入自动播放音乐子程序,播放程序中通过表格数据形式存放在ROM的音乐代码而形成的乐曲

3.3.3扬声器模块的设计

如图(4)所示为扬声器模块电路

图(4)扬声器模块电路

电磁式蜂鸣器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。

振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

本设计的蜂鸣器通过驱动电路与单片机的P3.7连接,单片机就可以通过P3.7的输出信号频率就行控制。

令外,通过示波器接到P3.7可方便我们观察波形。

3.3.4复位和晶振等其他附属部分的电路设计

如图(5)所示,为复位和晶振等其他附属部分的电路

图(5)复位和晶振等其他附属部分的电路

XTAL1、XTAL2分别是系统时钟信号fosc的输入和输出端。

晶振电路的设计可以两个电容与一个晶振即可,用来产生一个约等于12MHZ的稳定的频率。

复位是单片机的初始化操作,其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。

本系统采用上电与按键复位电路,为了防止干扰串扰复位端,所以再接一个去耦电容。

 

4实验数据

1、利用AT89C52的内部定时器T0使其工作在方式1的定时方式下,改变计数值TH0及TL0以产生不同频率的方法产生不同音符。

计数脉冲值与频率的关系式是:

                        N=fi÷2÷fr                        

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

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

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

   实验中的K=65536,fi=1MHz,根据设计要求中给出的音阶频率表,可求出各自的计数初值。

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

因此,可以通过计算求得各音阶的简谱码T值如下:

1Do的T=65536-500000/262.1=63628

2Re的T=65536-500000/293.7=63836

3Mi的T=65536-500000/329.6=64021

4Fa的T=65536-500000/349.2=64104

5So的T=65536-500000/392.0=64261

6La的T=65536-500000/440.0=64400

7Si的T=65536-500000/493.9=64524

相应求得在要发出不同音符时先给定时器T0装入的初值如下表:

音阶

1Do

2Re

3Mi

4Fa

5So

6La

7Si

频率(HZ)

261.1

293.7

329.6

349.2

392.0

440.0

493.9

初值

63628

63836

64021

64104

64261

64400

64524

2、因为实验中用到的LED数码显示管是共阳极的,所以0~7八个数字的段码分别为:

数字

0

1

2

3

4

5

6

7

段码

40H

79H

24H

30H

19H

12H

02H

78H

5结束语

在这一周里,一有空余时间都把时间花在本次实验。

其过程很艰苦,有时候做到深夜,但收获是颇多。

一开始拿到题目,关于不同频率的音符,我就知道肯定需要用到定时中断来实现,可是自己学习的进度很慢,大多数时间都是自学。

不过后来用大量时间去细看每一章节,做起实验来就容易多了。

本次设计性实验让我无论是在硬件还是软件方面都有了很大的提高,同时也增强了自己的信心和对学习的兴趣。

这些也是老师严格要求我们做好每一个实验的好处。

参考文献

[1] 潘永雄.新编单片机原理与应用(第二版).西安电子科技大学出版社,2007

[2] 杨欣.51单片机应用从零开始:

清华大学出版社,2008

[3] 彭伟.单片机C语言程序设计实训100例——基于8051+proteus仿真.电子工业出版社,2010

附录1:

总体电路图

 

附录2:

程序流程图设计

 

附录3:

源程序代码

KEYBUFEQU30H

STH0EQU31H

STL0EQU32H

TEMPEQU33H

SPKEQUP3.7;发声器所在端口

ORG0000H

LJMPSTART

ORG000BH

LJMPINT_T0;定时器0放置弹奏乐曲程序

ORG001BH

LJMPTIME0

START:

MOVTMOD,#11H;设置定时器的工作方式,定时器T0和T1都是方式1,作为16为定时计数器使用(定时方式)

SETBET0;开各中断开关

SETBET1

SETBEA;开放中断总允许和源允许

ACALLSAOMIAO;进入手动弹奏程序

SJMPSTART

;********手动弹奏程序********

SAOMIAO:

MOVP2,#0FFH;手动弹奏程序

MOVP1,#0FFH;先将键盘的行和列全部置为高电平,然后再逐行置为低电平

CLRP2.0

MOVA,P1

XRLA,0FFH

CJNEA,#00H,NEQ;判断有没键按下

LJMPNOKEYS;没有按键按下即跳转到NOKEYS

NEQ:

;有按键按下即跳到NEQ

LCALLDELY10MS;延时10ms

MOVA,P1;消除扰动和干扰

XRLA,0FFH

CJNEA,#00H,NEQ1

LJMPNOKEYS

NEQ1:

MOVA,P1;判断是否按下#0键

CJNEA,#0FEH,NK1;按下#0键即顺序执行程序,否则跳到NK1检查下一键位

MOVKEYBUF,#0;保存列号#0

MOVP0,#79H;让LED显示为1

LJMPDK1

NK1:

CJNEA,#0FDH,NK2;判断是否按下#1键

MOVKEYBUF,#1;保存列号#1

MOVP0,#24H;让LED显示为2

LJMPDK1

NK2:

CJNEA,#0FBH,NK3;判断是否按下#2键

MOVKEYBUF,#2;保存列号#2

MOVP0,#30H;让LED显示为3

LJMPDK1

NK3:

CJNEA,#0F7H,NK4;判断是否按下#3键

MOVKEYBUF,#3;保存列号#3

MOVP0,#19H;让LED显示为4

LJMPDK1

NK4:

CJNEA,#0EFH,NK5;判断是否按下#4键

MOVKEYBUF,#4;保存列号#4

MOVP0,#12H;让LED显示为5

LJMPDK1

NK5:

CJNEA,#0DFH,NK6;判断是否按下#5键

MOVKEYBUF,#5;保存列号#5

MOVP0,#02H;让LED显示为6

LJMPDK1

NK6:

CJNEA,#0BFH,NK7;判断是否按下#6键

MOVKEYBUF,#6;保存列号#6

MOVP0,#78H;让LED显示为7

LJMPDK1

NK7:

CJNEA,#7FH,NK8

NK8:

LJMPCHOICE

DK1:

MOVA,KEYBUF

MOVB,#2

MULAB;对应读取表格TABLE1的数据

MOVTEMP,A

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVSTH0,A

MOVTH0,A

INCTEMP

MOVA,TEMP

MOVCA,@A+DPTR

MOVSTL0,A

MOVTL0,A

SETBTR0;开启定时器T0,T0开始计数

DK1A:

MOVA,P1

XRLA,#0FFH

JNZDK1A

MOVA,P2

ANlA,#0f0H

MOVP2,A

CLRTR0

NOKEYS:

RET

;*******功能转换程序********

CHOICE:

MOVP2,#0FFH;功能转换程序

MOVP1,#0FFH

CLRP2.0

MOVA,P1

CJNEA,#7FH,NEXT1111;按下了P1.7键后,顺序执行,否则则跳转到NEXT1111

NEXT111:

MOVP2,#0FFH

MOVP1,#0FFH

CLRP2.0

MOVA,P1

XRLA,#0FFH

JNZNEXT111;如果A不为0,即按键有变化,继续循环

ACALLDISPLAY;如果按键没变化,即调用DISPLAY

MOVSP,#60H

MOVDPTR,#TABLE

ACALLMUSIC

NEXT1111:

LJMPSAOMIAO

;*******自动播放音乐程序********

MUSIC:

MOV21H,#00H

MOVP2,#0FFH

MOVP1,#0FFH

CLRP2.0

MOVA,P1

JNBACC.7,AA1

SETB21H.7

AA1:

MOVP2,#0FFH

MOVP1,#0FFH

CLRP2.0

MOVA,P1

XRLA,#0FFH

JNZAA1

JNB21H.7,NEXT1111

CLRA

MOVCA,@A+DPTR

MOVR1,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR0,A

ORLA,R1

JZNEXT1

MOVA,R0

ANLA,R1

CJNEA,#0FFH,NEXT

SJMPMUSIC

NEXT:

MOVTH1,R1

MOVTL1,R0

SETBTR1

SJMPNEXT2

NEXT1:

CLRTR1

NEXT2:

CLRA

INCDPTR

MOVCA,@A+DPTR

MOVR2,A

LOOP1:

ACALLDELAY

DJNZR2,LOOP1

INCDPTR

SJMPMUSIC

REP12:

CLRTR1

RET

TIME0:

MOVTH1,R1

MOVTL1,R0

CPLP3.7

RETI

DEL1S:

MOVR5,#30

D1:

MOVR6,#100

D2:

MOVR7,#80

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

DEL:

NOP

DEL3:

MOVR4,#02H

DEL4:

NOP

DJNZR4,DEL4

NOP

DJNZR3,DEL3

RET

NOP

;********延时10ms子程序******

DELY10MS:

MOVR6,#10

D3:

MOVR7,#248

DJNZR7,$

DJNZR6,D3

RET

;*******T0中断服务子程序**********

INT_T0:

MOVTH0,STH0

MOVTL0,STL0

CPLP3.7

RETI

;******倒计3秒进入自动播放音乐子程序********

DISPLAY:

MOVDPTR,#table0

MOVR0,#0

LOOP10:

MOVA,R0

MOVCA,@A+DPTR

MOVP0,A

CLRP2.0

LCALLDELAY0

INCR0

CJNER0,#4,LOOP10

RET

;*******数码显示DISPLAY9*********

DISPLAY9:

MOVDPTR,#table8;数码管显示数字

MOVR0,#0

LOOP15:

MOVA,R0

MOVCA,@A+DPTR

MOVP0,A;送到P0口显示数字

CLRP2.0

LCALLDELAY0

INCR0

CJNER0,#10,LOOP15

RET

DELAY0:

MOVR7,#50

DELA:

MOVR6,#100

DEL12:

MOVR5,#100

DJNZR5,$

DJNZR6,DEL12

DJNZR7,DELA

RET

;*******延时子程序DELAY********

DELAY:

MOVR7,#02

D5:

MOVR6,#187

D6:

MOVR5,#248

DJNZR5,$

DJNZR6,D6

DJNZR7,D5

RET

table0:

DB30h,24h,79h,40h;倒计时3秒

table8:

DB10h,00h,78h,02h,12h,19h,30h,24h,79h,40h;9,8,7,6,5,4,3,2,1,0

TABLE1:

DW62628,63835,64021,64103,64260,64400,64524;定时器TO初值

TABLE:

DB0FDH,80H,03H,0FDH,80H,01H;音乐代码

DB0FDH,0C6H,04H,0FDH,80H,04H

DB0FEH,2AH,04H,0FEH,02H,04H

DB00H,00H,04H

DB0FDH,80H,03H,0FDH,80H,01H

DB0FDH,0C6H,04H,0FDH,80H,04H

DB0FEH,5CH,04H,0FEH,2AH,04H

DB00H,00H,04H

DB0FDH,80H,03H,0FDH,80H,01H

DB0FEH,0C0H,04H,0FEH,84H,04H

DB0FEH,2AH,04H,0FEH,02H,04H

DB0FDH,0C6H,04H

DB0FEH,98H,03H,0FEH,98H,01H

DB0FEH,84H,04H,0FEH,2AH,04H

DB0FEH,5CH,04H,0FEH,2AH,04H

DB00H,00H,04H

DB0FFH,0FFH

END

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

当前位置:首页 > 工程科技 > 能源化工

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

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