资源描述
电气学科大类
基于单片机的电子琴设计
姓 名:
学 号:
学 院:电气学院
专业班级:
指导老师:
摘要
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
目录
1 概述………………………………………………………………………………2
2 系统总体方案及硬件设计………………………………………………………3
3课程设计结果与体会……………………………………………………………8
附:源程序代码
参考文献
课题概述
乐曲的音程取决于声音信号的频率,不同的频率信号产生不同的音程。
一个 8 度的音阶与频率 的关系如表 4.2.3 所示: 表 4.2.3 音阶与频率、周期的关系
音名
C
D
E
F
G
A
B
C
唱名
1
2
3
4
5
6
7
1
频率
264
297
330
352
396
440
495
528
周期
3787
3367
3030
2840
2525
2272
2020
1893
声音信号,可以直接通过方波输出产生,也可以通过正弦波输出产生,区别在于音色。
一般来 说,方波产生的声音比较沉闷,正弦波产生的声音信号则比较圆润。
本课题要求利用正弦波产生声 音信号。 利用 8 个按键 K0~K7 作为简易电子琴的 8 个音阶按键,当不同的按键按下时,通过 D/A 转换 器件 TLV5617 输出不同频率的正弦波信号。D/A 转换输出值通过一个正弦函数表查得,正弦函数表 中储存一个正弦周期的 100 个表值。利用 MCS51 的定时器 1 控制 D/A 转换的输出,每发生一次定 时器 1 周期中断,从正弦函数表中查一个表值输出到 D/A 转换器件。
系统总体方案及硬件设计
1.单片机与TLV5617接线
单片机与 TLV5617 之间的连接 实验箱核心板上,MCS51 单片机与 TLV5617 之间已经连接好,其接口电路原理如图 3.1.11 所 示。单片机与 TLV5617 之间接口只用到三个 I/O 引脚:P3.4 用于传送串行移位数据,P3.5 用于产生 串行移位时钟,P3.7 用于产生片选信号。
TLV 5617
DIN
CLK
/CS
P3.4 P3.5 P3.7
MCS51 单片机
图 1.1 单片机与 TLV5617 之间的连接 在核心板上,TLV5617 的 DIN、CLK 引脚,与 TLC1543 共用单片机的 P3.4、P3.5 脚,由各自 的片选信号,确定单片机的 P3.4、P3.5 脚上的信号对哪个器件发生作用。
图1.1 TLV5617
2. 音调的产生
频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1和高音1)之间的频率相差一倍。在两个八度音之间又分为十二个半音。另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音1到高音1之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的。
1、要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
2、利用AT89C51的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。
此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。
3、例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系公式如下:
N=Fi2Fr
N:计算值; Fi:内部计时一次为1us,故其频率为1MHz;
4、其计数值的求法如下:
初值T=65536-N=65536-Fi2Fr
例如:设K=65536,F=1000000=Fi=1MHz,球低音DO(261Hz)。中音DO(523Hz)。高音的DO(1046Hz)的计算值
T=65536-N=65536-Fi2Fr=65536-10000002Fr=65536-500000/Fr
低音DO的T=65536-500000/262=63627
低音DO的T=65536-500000/523=64580
低音DO的T=65536-500000/1047=65059
C调各音符频率与计数值T的对照表如表1.2所示。
表1.2 C调各音符频率与计数值T的对照表
低音
频率
N
参数
中音
频率
N
参数
高音
频率
N
参数
Do
262
1908
229
Do
523
956
115
Do
1046
57
57
Do#
277
1805
217
Do﹟
554
903
108
Do﹟
1109
54
54
Re3
294
1701
204
Re
587
852
102
Re
1175
51
51
Re﹟
311
1608
193
Re﹟
622
804
97
Re﹟
1245
48
48
Mi
330
1515
182
Mi
659
759
91
Mi
1318
45
45
Fa
349
1433
172
Fa
698
716
86
Fa
1397
43
43
Fa﹟
370
1351
162
Fa﹟
740
676
81
Fa﹟
1480
41
41
So
392
1276
153
So
784
638
77
So
1568
38
38
So﹟
415
1205
145
So﹟
831
602
72
So﹟
1661
36
36
La
440
1136
136
La
880
568
68
La
1760
34
34
La﹟
464
1078
129
La﹟
932
536
64
La﹟
1865
32
32
Si
494
1012
121
Si
988
506
61
Si
1976
30
30
3.节拍的确定
若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
表1.3节拍与节拍码对照
节拍码
节拍数
节拍码
节拍数
1
1/4拍
1
1/8拍
2
2/4拍
2
1/4拍
3
3/4拍
3
3/8拍
4
1拍
4
2/1拍
5
1又1/4拍
5
5/8拍
6
1又1/2拍
6
3/4拍
8
2拍
8
1拍
A
2又1/2拍
A
1又1/4拍
C
3拍
C
1又1/2拍
F
3又3/4拍
每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表2.41为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如图1.4为1/4和1/8节拍的时间设定。
表1.4 1/4和1/8节拍的时间设定
曲调值
DELAY
曲调值
DELAY
调4/4
125毫秒
调4/4
62毫秒
调3/4
187毫秒
调3/4
94毫秒
调2/4
250毫秒
调2/4
125毫秒
4.音符的编码
do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。
举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18
举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22
歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。
5.电子琴键盘的电路接线
通用板右下角(⑦区)装有一套4×4小键盘,其电路连接如图1.5所示。
图1.5 小键盘电路连接
按键的行、列线,可以通过单根连线端子“KR0”等连接到单片机的I/O引脚,也可以通过排线端子“KEY”连接到单片机的I/O口。
6.点阵的原理与接线
LED点阵使用8×8模块,每4个安排排成一个16×16点阵,用于显示一个汉字。每行LED点阵是共阳极的,每列LED点阵是共阴极的。系统由微型计算机控制。89C5l单片机的P0.0 ~ P0.3(D0 ~ D3)端口通过一个通用逻辑阵列GALl6V8D和收发器74HC245输出行选通信号(OIA~OID),P3.0和P3.1端口通过74HC245输出列选通信号,如图1.6。
图1.6行选通信号原理图
线驱动部件使用两个74CHl38译码.线选通信号信号将被用作译码器的输入,它可以获得16行数值信号。考虑到74CHl38的驱动能力是有限的,因此, LED阳极通过给晶体管TIPl27提供2A电流连接到电源,74HCl38输出引脚的开关可以通过几毫安的电流控制。
列输入是由八位8-bit串行输入驱动,串行或并行输出由移位寄存器74HC595完成。芯片有两个独立的串行输入和并行的时钟信号。在串行移位时钟SRCLK的上升沿,输入数据从SER输入到串行移位寄存器芯片同时,SQH串行输出;当门闩时钟RCLK 的上升沿到达时,内部的串行移位寄存器芯片输出8-bit并行数据。正常工作时,他们应该被重置使SRCL和RCLK分别为高电平和低电平。单片机输出信号直接连接设备的输出字符串的门闩进出移位寄存器74HC595.列驱动程序电路原理图如图1.7。
图1.7列驱动电路原理图
在本次实验中,我们将键盘与P1口用排线相连,点阵驱动的LSIO,LSCLK,LRCLK,DRCLK分别于P2.0,P2.1,P2.2,P2.3相连,蜂鸣器与P3.2相连
系统总体方案
程序框图如下:
初始化变量
接口
初始化计数器T0,定时器T1
定义音调
等待按键,是否有按键?
音调显示在点阵上
主程序开始
依据按键码播放音调或者完整的歌
Y
N
实验程序及实验结果反思
总实验程序详见附录。
实验结果:电子琴的两个基本功能,按键和音乐完好地实现了,但是点阵虽有显示但不完全正确。
结果反思:由于对于点阵功能的了解不够,虽然做了很多尝试,但到最后点阵功能还是未能完好的实现。经过这次单片机电子琴课设,我重新对单片机课程内容知识有了新的了解,尤其是AD转换和定时器方面。
附录 电子琴实现的总程序
D_DAT0 EQU 60H
D_DAT1 EQU 61H
D_DAT2 EQU 62H
D_DAT3 EQU 63H ;0~3为定义数码管显示数据存储单元
D_DAT4 EQU 64H
D_DAT5 EQU 65H
D_DAT6 EQU 66H
D_DAT7 EQU 67H ;4~7为点阵LED行数据
D_DAT8 EQU 68H ;点阵LED列数据
DOT_A0 EQU 69H
DOT_A1 EQU 6AH ;点阵数据表首地址
K_VALU EQU 6BH
TIME EQU 6CH
NOTE EQU 6DH
REFRESH EQU 6EH
LSIO EQU P2.0 ;串行移位数据引脚
LSCLK EQU P2.1 ;串行移位时钟信号
LRCLK EQU P2.2 ;数码管LED输出锁存信号
DRCLK EQU P2.3 ;点阵LED输出锁存信号
RING EQU P3.2 ;蜂鸣器正方波信号
ORG 0000H
SJMP START
ORG 001BH
LJMP PLAY1
ORG 0030H
START: MOV SP,#30H
MOV TMOD,#10H ;T1工作于定时器方式1
MOV D_DAT0,#0
MOV D_DAT1,#0
MOV D_DAT2,#0
MOV D_DAT3,#0 ;初始化显示数据
MOV D_DAT4,#4
MOV D_DAT5,#5
MOV D_DAT6,#6
MOV D_DAT7,#7
MOV D_DAT8,#01H
SETB EA
SETB ET1
MAIN: LCALL RD_KEY
MOV A,K_VALU
CJNE A,#10H,TONE1
SJMP MAIN
TONE1: LCALL TONE
SJMP MAIN
RD_KEY: ORL P1,#0FFH
ANL P1,#0EFH
MOV R2,#0EFH
MOV R3,#4
MOV K_VALU,#0
RD_K1: MOV R4,#4
MOV A,P1
RD_K2: RRC A
JNC RD_K3
INC K_VALU
DJNZ R4,RD_K2
MOV A,R2
RLC A
MOV R2,A
ORL A,#0FH
ORL P1,#0FFH
ANL P1,A
DJNZ R3,RD_K1
RD_K3: RET
TONE: MOV A,K_VALU
ADD A,K_VALU
MOV DPTR,#INSTAB
JMP @A+DPTR
INSTAB: AJMP ZERO
AJMP DO_L
AJMP RE_L
AJMP MI_L
AJMP FA_L
AJMP SO_L
AJMP LA_L
AJMP SI_L
AJMP DO_H
AJMP RE_H
AJMP MI_H
AJMP FA_H
AJMP SO_H
AJMP LA_H
AJMP SI_H
AJMP AUTO
ZERO: NOP
NOP
LCALL DELAY500MS
RET
DO_L: MOV R1,#0F8H
MOV R0,#8CH
MOV DPTR,#M1
LCALL PLAY
RET
RE_L: MOV R1,#0F9H
MOV R0,#5BH
MOV DPTR,#M2
LCALL PLAY
RET
MI_L: MOV R1,#0FAH
MOV R0,#15H
MOV DPTR,#M3
LCALL PLAY
RET
FA_L: MOV R1,#0FAH
MOV R0,#67H
MOV DPTR,#M4
LCALL PLAY
RET
SO_L: MOV R1,#0FBH
MOV R0,#04H
MOV DPTR,#M5
LCALL PLAY
RET
LA_L: MOV R1,#0FBH
MOV R0,#90H
MOV DPTR,#M6
LCALL PLAY
RET
SI_L: MOV R1,#0FCH
MOV R0,#0CH
MOV DPTR,#M7
LCALL PLAY
RET
DO_H: MOV R1,#0FCH
MOV R0,#44H
MOV DPTR,#M8
LCALL PLAY
RET
RE_H: MOV R1,#0FCH
MOV R0,#0ACH
MOV DPTR,#M9
LCALL PLAY
RET
MI_H: MOV R1,#0FDH
MOV R0,#09H
MOV DPTR,#M10
LCALL PLAY
RET
FA_H: MOV R1,#0FDH
MOV R0,#2AH
MOV DPTR,#M11
LCALL PLAY
RET
SO_H: MOV R1,#0FDH
MOV R0,#82H
MOV DPTR,#M12
LCALL PLAY
RET
LA_H: MOV R1,#0FDH
MOV R0,#0C8H
MOV DPTR,#M13
LCALL PLAY
RET
SI_H: MOV R1,#0FEH
MOV R0,#2EH
MOV DPTR,#M14
LCALL PLAY
RET
AUTO: MOV TIME,#64
MOV NOTE,#0
CLR A
LOOP: MOV A,NOTE
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV K_VALU,A
INC NOTE
LCALL TONE
DJNZ TIME,LOOP
RET
TABLE:DB 1,2,3,4,5,5,5,3,4,4,4,2,1,3,5,0
DB 1,2,3,4,5,5,5,3,4,4,4,2,1,3,1,0
DB 6,6,6,4,5,5,5,3,4,4,4,2,1,3,5,0
DB 6,6,6,4,5,5,5,3,4,4,4,2,1,3,1,0
TABLE: DB 3,0,3,2,3,0,0,0,3,5,3,2,3,0,0,0
DB 1,0,1,2,3,5,3,0,2,0,2,1,2,0,0,0
DB 3,0,5,3,6,5,0,0,6,5,5,3,5,0,0,0
DB 3,0,2,3,5,0,3,2,2,0,2,1,2,0,0,0
DB 3,0,3,2,3,0,0,0,3,5,3,2,3,0,0,0
DB 1,0,1,2,3,5,3,0,2,0,2,1,2,0,0,0
DB 3,0,5,3,6,5,0,0,6,5,5,3,5,0,0,0
DB 0,3,2,3,5,0,3,2,2,1,1,1,1,0,0,0
DB 1,2,3,0,3,5,6,0,6,10,9,8,8,6,5,0
DB 0,0,6,5,3,2,1,0,0,1,2,0,2,1,2,0
DB 1,2,3,0,3,5,6,0,6,10,9,8,8,9,8,0
DB 0,0,5,0,5,3,7,8,1,2,3,0,0,0,2,0
DB 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
;一共208个音符
;*************************************
;响铃子程序
;*************************************
PLAY: MOV TH1,R1
MOV TL1,R0
SETB RING
SETB TR1
LCALL DLED
ACALL DELAY500MS
CLR TR1
RET
PLAY1: CLR TR1
CPL RING
MOV TH1,R1
MOV TL1,R0
SETB TR1
RETI
DELAY500MS: MOV R7,#66H
DL1: MOV R6,#74H
DL0: MOV R5,#09H
展开阅读全文