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

上传人:b****8 文档编号:29462471 上传时间:2023-07-23 格式:DOCX 页数:49 大小:512.03KB
下载 相关 举报
完整版基于51单片机的简易电子琴设计.docx_第1页
第1页 / 共49页
完整版基于51单片机的简易电子琴设计.docx_第2页
第2页 / 共49页
完整版基于51单片机的简易电子琴设计.docx_第3页
第3页 / 共49页
完整版基于51单片机的简易电子琴设计.docx_第4页
第4页 / 共49页
完整版基于51单片机的简易电子琴设计.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

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

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

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

完整版基于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

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

当前位置:首页 > 考试认证 > 交规考试

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

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