完整版基于51单片机的简易电子琴设计.docx
- 文档编号:29462471
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:49
- 大小:512.03KB
完整版基于51单片机的简易电子琴设计.docx
《完整版基于51单片机的简易电子琴设计.docx》由会员分享,可在线阅读,更多相关《完整版基于51单片机的简易电子琴设计.docx(49页珍藏版)》请在冰豆网上搜索。
完整版基于51单片机的简易电子琴设计
鉴于51单片机的简略电子琴设计
一.问题提出
为何选择简略电子琴设计?
1.关于音乐的兴趣
我们对音乐都有着浓重的兴趣,喜爱听钢琴曲,如理查德·克莱德曼演奏的《思乡曲》《星空》《秋天的密语》等,音乐在我们的生活中饰演着很重要的角色。
有人曾说,喜爱音乐的人不会向恶。
从前不认为然,但是跟着这些年来慢慢喜爱上阴暗,听了愈来愈多的钢琴曲以后,感觉这句话特别有道理。
音乐是用艺术家用音符记录世界,传达感情的一种艺术形式,音乐里有一种和睦之美,听音乐能够让人心情愉快,与外界和睦一致。
音乐此刻已经成为我生活中很重要的一部分,我们每周都会抽些时间去赏识世界名曲,作为对精神的浸礼。
2.关于电子琴的好奇
好奇是人的本性,人类关于自然的认识,关于科学的探究,无不
始于好奇。
我们对电子琴怎样实现其功能,如音色选择、声音强弱控制、节
拍器、自动放音功能等等也很好奇,想经过学习单片机这个时机,深
入认识电子琴的功能实现原理。
3.关于51单片机强盛功能的信任
51单片机有基本特征:
(1)面向控制的8位CPU和指令系统
(2)4K字节的程序储存器(ROM或EPROM)
(3)128字节的数据储存器
(4)可编程的并行I/O口P0~P3,有32位双向输入/输出线
(5)一个全双工串行口
(6)两个16位准时器/计数器
(7)五其中止源,两个优先级的中止构造
(8)一个片内时钟振荡器和时钟电路
(9)能够寻址64K字节的程序储存器和64K字节的外面数据储存器
51单片机功能强盛,性能日益完美,在工业测控、智能仪器仪表、
机电一体化产品、家电领域中应用宽泛,所以鉴于51单片机设计简
易的电子琴可行性特别大。
二.功能需求
1.能够实现基本的琴键功能
即每按下一个琴键,单片机能够检测到键盘的按键,并依据按键
的地点,经过程序来控制,使蜂鸣器发出不一样频次(音调)的声音,
声音延缓一段时间,等到按键松开后,声音停止。
而后再连续扫描,
看能否有键按下,这样循环下去,即可实现基本的琴键功能。
2.能够实现调理电子琴音色的功能
在键盘上设置功能键,经过按键来选择不一样的音色。
入选通后,
按下琴键,蜂鸣器就向来发出此种音色的声音。
直到下一次再次按下
音色选择功能键,才会改变音色。
系统共设置五种音色:
长笛音,钢
琴音,小号音,小提琴音,短笛音,默认状态为钢琴音。
3.能够实现经过按键自动播放歌曲的功能
在键盘上设置几个功能键,按下以后会依据功能键跳转到自动播
放歌曲的程序,来播放相应的歌曲。
播放歌曲的默认音色为钢琴音,若希望调整音色,只要在自动播放歌曲从前,按下相应的音色选择功能键即可实现。
三.整体方案
1.电子琴原理
在介绍整体方案从前,先简单介绍一下电子琴的发生原理以及
怎样改变音色的基来源理:
声音的频谱范围约在几十到几千赫兹,若
能利用程序来控制单片机某个口线不停输出“高”“低”电平,则在该口线上就能产生必定频次的方波,将该方波接上喇叭就能发出必定频次的声音,若再利用程序控制“高”“低”电平的连续时间,就能改变输出波形的频次进而改变音调。
乐曲中,每一音符对应着确立的频次,下表给出各音符频次。
假如单片机某个口线输出“高”“低”电平的频次和某个音符的频次同样,那么将此口线接上喇叭就能够发出此音符的声音。
本系统就是依据此原理设计,关于单片机来说要产生必定频次的方波大概是先将某口线输出高电平而后延时一段时间
再输出低电平,这样循环的输出就会产生必定频次的方波,经过改变延时的时间就能够改变输出方波的频次。
单片机内部有两个位的准时计数器T1和T0,单片机的准时计数器其实是个计数装置它既能够对
单片机的内部晶振驱动时钟计数也能够对外面输入的脉冲计数,对内部晶振计数时称为准时器,对外面时钟计数时称为计数器。
当对单片机的内部晶振驱动时钟计数时,每个机器周期准时计数器的计数值就
加,当计数值达到计数最大值时计数完成并通知单片机的尸比对外面输入的时钟信号计数时,外面时钟的每个时钟上涨沿准时计数器的计数值就加,当计数值达到计数最大值时计数完成并通知单片机的尸。
所以,假如知道单片机的机器周期或许外面输入时钟信号的周期单片机就能够依据准时器的计数值计算出准时的时间。
用此方法准时十分
正确,想获得多大的延不时间就能够给准时器赋必定的计数初值,定
时器从早先设置的计数初值开始不停增当增添到计数最大值时计数
完成,调整计数初值的大小就能够调整准时器准时的时间,进而达到正确的延时。
在本设计中我们使用的外面时钟信号的晶振频次为
12MHz,而采纳的计数方式为方式1,所以计数器的初始值能够由以下
公式求得。
T=65536-1000000/2/f
f为对应音调的频次;
经过以上方法,可求出各音调对应的频次,以下表
2.外观设计
2.硬件部分整体方案
51单片机P0口经过8155扩展,连结4*8的矩阵键盘,作为琴
键键盘和相应的功能控制键;并P2口一同,与EPROM连结;P0口
则接通不通音色的滤波电路,经过程序控制P0口,选通不通的琴声
音色滤波电路,使电子琴发出不一样音色的声音。
3.软件部分整体方案
(1)键盘扫描程序:
检测能否有键按下,有键按下则记录按下键的键值,并跳转至功
能转移程序;无键按下,则返回键盘扫描程序连续检测
(2)功能转移程序:
对检测到得按键值进行判断,是琴键则跳转至琴键办理程序,是
功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音
色彩节功能和自动播放乐曲功能
(3)琴键办理程序:
依据检测到得按键值,查问乐律表,给计时器赋值,使发出相应
频次的声音
(4)音色彩节程序:
检测到键盘按下的是音色彩节功能键后履行该程序,改变P0端
口的值,选通相应的音色滤波电路,达到调理音色的目的
(5)自动播放歌曲程序:
检测到按键按下的是自动播放歌曲功能键后履行该程序,电子琴
会自动播放早先已经寄存好的歌曲,歌曲播放完成以后自动返回至键
盘扫描程序,连续等候能否有键按下
四.硬件详尽设计
总电路图
8155扩展
外面EPROM扩展电路
键盘电路
长笛滤波电路
钢琴滤波电路
小号滤波电路
小提琴滤波电路
短笛滤波电路
四.软件框图
总程序简略流程图
键盘扫描程序流程图
弹奏程序流程图
音色彩整子程序
自动播放歌曲程序流程图
六.软件清单
ORG
0200H
MOV
P1,#02H
;初始化P1口,使得电子琴默认为钢琴声
KEYPRO:
;键盘扫描程序
ACALL
KEXAM
;检查能否有键按下
JZ
KEYPRO
;若无键按下,则转
KEYPRO,连续等候并检查
ACALL
D10ms
;如有键按下,则延时
10ms,进行曲颤动办理
ACALL
KEXAM
;再次检查能否有键按下
JZ
KEYPRO
;若无键按下,则转KEYPRO
KEY1:
MOV
R2,#OFEH
;输出使第X0行为低电平模型数值
MOV
R3,#OFFH
;列值寄存器预置初值
MOV
R4,#OOH
;行值寄存器清零
KEY2:
MOV
DPTR,#0303H
;送8155PC口地点
MOV
A,R2
;扫描第一行
MOVX
@DPTR,A
MOV
DPTR,#0301H
;送8155PA口地点
MOVX
A,@DPTR
;读列数据值
CPL
A
ANL
A,#OFFH
JNZ
KEY3
;有键按下,恳求转值
MOV
A,R4
;无键按下,行值寄存器加8
ADD
A,#08H
MOV
R4,A
MOV
A,R2
;求下一行为低电平模型数值
RL
A
MOV
R2,A
JB
ACC.4,KEY2
;判断各行能否完整扫描完,若未完,则连续扫描下一行
AJMP
KEYPRO
;若所有扫描完成,则等候下一次按键
KEY3:
CPL
A
;恢复列模型
KEY4:
INC
R3
RRC
A
;求列值
JC
KEY4
KEY5:
ACALL
D10ms
ACALL
KEXAM
JNZ
KEY5
;如有键按下,则转KEY5,等候键开释
MOV
A,R4
;计算键值
ADD
A,R3
MOV
BUFF,A
AJMP
KEYADR
;转查找功能键进口地点子程序
D10ms:
;延时10ms的子程序
MOV
R5,#14H
DL:
MOV
R6,DL0
DL0:
DJNZ
R6,DL0
DJNZ
R5,DL
RET
BUFF
EQU
30H
KEXAM:
MOV
DPTR,#0303H
;送端口C地点
MOV
A,#00H
;输出使所有的行均为低电平模型数值
MOVX@DPTR,A
MOV
@DPTR,#0301H
MOVXA,@DPTR
CPL
A
ANL
A,#0FFH
RET
ORG
8000H
;跳转功能程序
KEYADR:
MOV
A,BUFF
;
拿出键值
CJNE
A,#17H,KYARD1
AJMP
PLAY
;等于17H,转琴键办理
KEYRD1:
JC
PLAY
;小于17H,转琴键办理
KEYTBL:
MOV
DPTR,#JMPTBL
;送功能键地点表指针
CLR
C
;清进位位
SUBB
A,#10H
RL
A
JMP
@A+DPTR
;转相应的功能键办理程序
BUFF
EQU
30H
JMPTBL:
AJMP
SONG1
;跳转至化蝶
AJMP
SONG2
;跳转至童年
AJMP
SONG3
;跳转至龙的传人
AJMP
FLUTE
;调理成长笛音色状态
AJMP
PIANO
;调理成钢琴音色状态
AJMP
TRUMPET
;调理成小号音色状态
AJMP
VIOLIN
;调理成小提琴音色状态
AJMP
PICCOLO
;调理成短笛音色状态
SONG1:
MOV
DPTR,#BUTTERFLY
;赋梁祝谱初值
ACALL
SUB_SONG
;调用播放歌曲子程序
AJMP
KEYPRO
;返回至键盘扫描程序
SONG2:
MOV
DPTR,#YOUTH
;赋童年谱值
ACALL
SUB_SONG
;调用播放歌曲子程序
AJMP
KEYPRO
;返回至键盘扫描程序
SONG3:
MOV
DPTR,#MULTIPLY_OF_THE_DRAGON
;赋龙的传人谱初值
ACALL
SUB_SONG
AJMP
KEYPRO
FLUTE:
MOV
P1,#01H
;使长笛滤波电路选通
AJMP
KEYPRO
;跳转回键盘扫描程序
PIANO:
MOV
P1,#02H
;使钢琴琴滤波电路选通
AJMP
KEYPRO
;跳转回键盘扫描程序
TRUMPET:
MOV
P1,#04H
;使小号滤波电路选通
AJMP
KEYPRO
;跳转回键盘扫描电路
VIOLIN:
MOV
P1,#08H
;使小提琴滤波电路选通
AJMP
KEYPRO
;跳转回键盘扫描电路
PICCOLO:
MOV
P1,#10H
;使短笛滤波电路选统统
AJMP
KEYPRO
;跳转回键盘扫描电路
PLAY:
;
抚琴子程序
ORG
0F00H
;子程序进口地点
SJMP
MAIN
ORG
0F1BH
;设置中止进口地点
LJMPTINT1
MAIN:
MOV
TMOD,#10H
;计时器控制字
T1方式计时
SETB
EA
;开中止总开关
SETB
ET1
;同意T1中止
SETB
TR1
;准时开始
MOV
DPTR,#TABLE1
;查问乐律表
PUSH
ACC
MOVC
A,@A+DPTR
MOV
TH1,A
;乐律表查问值高八位赋值
POP
ACC
INC
A
MOVC
A,@A+DPTR
MOV
TL1,A
;乐律表查问值低八位赋值
ACALL
DLAY
AJMP
KEYPRO
;跳转回键盘扫描程序
TINT1:
JB
P1.0,
FLUTE_ON
;判断能否跳到长笛音色档
JB
P1.1,
PIANO_ON
;判断能否调到钢琴音色档
JB
P1.2,
TRUMPET_ON
;判断能否调到小号音色档
JB
P1.3,
VIOLIN_ON
;判断能否跳到小提琴音色档
JB
P1.4,
PICCOLO_ON
;判断能否跳到短笛音色档
FLUTE_ON:
;假如长笛音色档,则控制
P1.0口电压变化
CPL
POP
DPH
POP
DPL
PUSH
DPL
PUSH
DPH
RETI
PIANO_ON:
;假如钢琴琴音色档,则控制
P1.1口电压变化
CPL
POP
DPH
POP
DPL
PUSH
DPL
PUSH
DPH
RETI
TRUMPET_ON:
;假如小号音色档,则控制
P1.2口电压变化
CPL
POP
DPH
POP
DPL
PUSH
DPL
PUSH
DPH
RETI
VIOLIN_ON:
;假如小提琴音色档,则控制
P1.2口电压变化
CPL
POP
DPH
POP
DPL
PUSH
DPL
PUSH
DPH
RETI
PICCOLO_ON:
;假如短笛音色档,则控制
P1.2口电压变化
CPL
POP
DPH
POP
DPL
PUSH
DPL
PUSH
DPH
RETI
DLAY:
MOV
R2,#0F0H;延时程序
DL2:
MOV
R3,#0F0H
DL1:
NOP
NOP
DJNZ
R3,DL1
DJNZ
R2,DL2
RET
TABLE1:
;乐律表
DW
0F88BH
;-1
DW
0F95BH
;-2
DW
0FA14H
;-3
DW
0FA67H
;-4
DW
0FB07H
;-5
DW
0FB8FH
;-6
DW
0FB9EH
;-6#
DW
0FC0BH
;-7
DW
0FC43H
;1
DW
0FCACH
;2
DW
0FD09H
;3
DW
0FD33H
;4
DW
0FD83H
;5
DW
0FDC7H
;6
DW
0FDE7H
;6#
DW
0FE05H
;7
DW
0FE22H
;+1
DW
0FE56H
;+2
DW
0FE84H
;+3
DW
0FE9AH
;+4
DW
0FEC1H
;+5
DW
0FEE3H
;+6
DW
0FEF3H
;+6#
DW
0FF02H
;+7
ORG
0F00H
SUB_SONG:
;自动播放歌曲的子程序
-1
EQU
0H
;低音域简谱码
-2
EQU
1H
-3
EQU
2H
-4
EQU
3H
-5
EQU
4H
-6
EQU
5H
-6#
EQU
6H
-7
EQU
7H
1
EQU
8H
;中音域简谱码
2
EQU
9H
3
EQU
0AH
4
EQU
0BH
5
EQU
0CH
6
EQU
0DH
6#
EQU
0EH
7
EQU
0FH
+1
EQU
10H
;高音域简谱码
+2
EQU
11H
+3
EQU
12H
+4
EQU
13H
+5
EQU
14H
+6
EQU
15H
+6#
EQU
16H
+7
EQU
17H
FREQ_TEMP
.EQU
31H
TIME_TEMP
.EQU
32H
TH0_TEMP
.EQU33H
TL0_TEMP
.EQU
34H
ORG
00H
;播放乐曲子程序的主程序
JMP
START
ORG
OBH
JMP
TIMER0
START:
MOV
SP,#50H
MOV
IE,#10000010B
;中止,EA=ET0=1
MOV
TMOD,#00000001B
;设定计数器0为mode1
BEGIN:
MOV
A,#00H
MOVC
A,@A+DPTR
;获得简谱码
MOV
FREQ_TEMP,A
INC
DPTR
;指向下一个地点
MOV
A,#00H
MOVC
A,@A+DPTR
;获得节拍码
MOV
TIME_TEMP,A
JZ
STOP
;比较唱歌能否结束
PUSH
DPH
PUSH
DPL
MOV
A,FREQ_TEMP
CJNE
A,#FFH,SING_SONG
;比较能否停止发音
CLR
TR0
;停止计时
JMP
HOLD
SING_SONG:
CLR
TR0
;停止计时
MOV
DPTR,#TABLE
;频次值寄存开始地点
MOV
A,FREQ_TEMP
;
RL
A
;FREQ_TEMP地点乘以2
MOVC
A,@A+DPTR
;获得频次值高位组
MOV
TH0,A
;TH0=频次值高位组
MOV
TH0_TEMP,A
MOV
A,FREQ_TEMP
RL
A
;FREQ_TEMP地点乘以2
INC
A
;再加1
MOVC
A,@DPTR
;获得频次值低位组
MOV
TL0,A
;TL0=频次值低位组
MOV
TL0_TEMP,A
SETB
TR0
;开始计时
HOLD:
CALL
DELAY_TIME
;延缓节拍数
POP
DPL
POP
DPH
INC
DPTR
;指向下一个地点
JMP
BEGIN
STOP
CLR
TR0
;乐曲播放结束
SETB
;关掉蜂鸣器
JMP$
DELAY_TIME:
;节拍数
DELAY
#254,#245
;125ms
DJNZ
TIME_TEMP,DELAY_TIME
RET
TIMER0:
MOV
TH0,TH0_TEMP
;从头载入频次值高位组
MOV
TL0,TL0_TEMP
;从头载入频次值低位组
JB
P1.0,
FLUTE_ON
;判断能否调长笛音色档
JB
P1.1,
PIANO_ON
;判断能否调到钢琴音色档
JB
P1.2,
TRUMPET_ON
;判断能否调到小号音色档
JB
P1.3,
VIOLIN_ON
;判断能否跳到小提琴音色档
JB
P1.4,
PICCOLO_ON
;判断能否跳到短笛音色档
FLUTE_ON:
;假如长笛音色档,则是长笛版乐曲
CPL
POP
DPH
POP
DPL
PUSH
DPL
PUSH
DPH
RETI
PIANO_ON:
;假如钢琴音色档,则是钢琴版乐曲
C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 基于 51 单片机 简易 电子琴 设计