单片机简易电子琴.docx

上传人:b****8 文档编号:23967416 上传时间:2023-05-23 格式:DOCX 页数:26 大小:501.73KB
下载 相关 举报
单片机简易电子琴.docx_第1页
第1页 / 共26页
单片机简易电子琴.docx_第2页
第2页 / 共26页
单片机简易电子琴.docx_第3页
第3页 / 共26页
单片机简易电子琴.docx_第4页
第4页 / 共26页
单片机简易电子琴.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

单片机简易电子琴.docx

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

单片机简易电子琴.docx

单片机简易电子琴

《微机原理》课外设计制作

终期报告

题目(B1):

组号:

任课教师:

组长:

成员:

成员:

成员:

成员:

联系方式:

二零一四年五月十六日

 

一.实验目的

二.设计要求

三.实验方案

四.实验结果及分析

五.收获与体

六.会团队分工合作

七.附录代码

 

课外设计项目:

简易电子琴

一.实验目的

设计具有播放预设音乐、弹奏8个以上音阶、节拍/音量可以设定等功能的简易电子琴。

二.设计要求

1)按下播放按键,播放预设音乐。

2)按下演奏按键,发出1,2,3,4,5,6,7,1?

共8个音阶(C调)。

3)液晶屏显示当前的操作信息(如播放的乐曲名,弹奏的音符)。

4)演奏按键的发声时长和音量大小可调。

5)可以对演奏按键的发声做升调/降调处理。

三.实验方案

1.实验材料

实验材料:

1)单片机实验板2)小喇叭3)电阻、电容、三极管若干,使用元件:

AT89C51、LM324,喇叭,按键等。

2.原件介绍

1)AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2)LM324系列器件带有差动输入的四运算放大器。

与单电源应用场合的标准运算放大器相比,它们有一些显著优点。

该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。

共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。

每一组运算放大器可用图1所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。

两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的相位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。

LM324系列由四个独立的,高增益,内部频率补偿运算放大器,其中专为从单电源供电的电压范围经营。

从分裂电源的操作也有可能和低电源电流消耗是独立的电源电压的幅度。

应用领域包括传感器放大器,直流增益模块和所有传统的运算放大器可以更容易地在单电源系统中实现的电路。

例如,可直接操作的LM324系列,这是用来在数字系统中,轻松地将提供所需的接口电路,而无需额外的±15V电源标准的5V电源电压。

3.设计思路

设计并制作一个简易的电子琴可采用集成电路设计,基于AT89S52单片机设计一款简易的电子琴,采用4*4距阵键盘,有16个按钮矩阵,设计成16个音,可以实现音阶在低音4---高音5之间。

从而可以用来弹奏喜欢的乐曲。

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

对于晶振频率为12MHz的单片机,其定时器的计数周期为1MHz,假如选择工作方式1,那T值便为T=216~5*105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值。

建立这样一个数据表,然后采用查表程序即可。

而升降调的实现则可以通过频率范范和减半来实现。

音符

频率(Hz)

简谱码(T值)

中1DO

523

64580

中2RE

587

64684

中3MI

659

64777

中4FA

698

64820

中5SO

784

64898

中6LA

880

64968

中7SI

988

65030

a)LCD1602显示设计

工业字符型液晶,能够同时显示16x02即32个字符。

(16列2行)1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

如图,板载的变阻器W1可以用来调节1602显示屏的对比度。

本次采用的Mini80e升级版开发板在电路设计上,将显示屏的数据口放在P0上,RS、RW、E分别对应P2.4、P2.5、P2.6。

依据LCD1602的使用手册,可以对LCD1602发送指令和数据。

b)发声音调设计

音阶由不同频率的方波产生,音阶与频率的关系如表1所示。

要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用计时器计时此半周期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。

在ZKS-03实验仪上,产生方波的I/O脚选用P1.6,通过跳线选择器JP1将单片机的P1.6与扬声器的驱动电路相连。

这样P1.6输出不同频率的方波,扬声器便会发出不同的声音。

另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。

只要设定延时时间,就可求得节拍的时间。

延时作为基本延时时间,节拍值只能是它的整数倍。

  

每个音阶相应的定时器初值X可按下法计算:

  

 当晶振fose=12MHz时,各音阶相应的定时器初值X如下表1

表1

总体框图如下:

c)发声时长设计

根据定时器工作的独立性特点,当定时器0控制发生频率时,可以在主程序中使用延时子程序控制发生时长,每次执行延时子程序前打开定时器0,延时结束后关闭定时器0。

根据试验,延时256*256个单片机周期的时间很短暂,故放弃采用定时器1而选用采用三层循环设计,使延时为256*256*n。

调节n即可调节发生时长。

d)发声音量设计

LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。

LM386的外形和引脚的排列如图所示。

引脚2为反相输入端,3为同相输入端;引脚5为输出端;引脚6和4分别为 电源和地;引脚1和8为电压增益设定端;使用时在引脚7和地之间接旁路电容,通常取10μF。

音量调节电路图:

四.实验结果及分析

经过大家坚持不懈的努力,简易电子琴的要求都被我们基本实现了,下面就是我们的实验结果。

按下演奏按键,发出1,2,3,4,5,6,7,1?

共8个音阶(C调)。

这里是1的音调。

音调为1,音长也为预设的1。

演奏按键的发声时长可调。

这里为音调3,音长由预设的1变为了2,加长音长。

可以对演奏按键的发声做升调/降调处理。

这里为音调4,可从图中看出4后面有一个“+”号,此为升调。

按下播放按键,播放预设音乐。

我们在这里预设的音乐为梁祝。

此外音调大小是有一个外围电路做的,在实验原理中可以看到。

五.收获与体会

由于本组完全由5个女生组合而成,所以要独立完成本课外设计项目对于我们组来说有很大的难度。

首先遇到的难题就是编写代码。

我们小组在编写代码这一环节上花费了极大的精力和时间。

编写完成的代码的最低要求是通过keil的编译。

且不说以我们自己的能力自己编写的程序很难通过编译,即使是代码经历千辛万苦编译成功,如果烧入单片机内不能实现功能,也是让人心力交瘁的。

通过本次实验也使我们对个个元器件有了进一步的了解,这是一次难得的实践机会。

还有你的方案设计是否能达到最佳的效果,通过仿真做一系列的了解。

所以在本次设计中遇到了许多问题,在调试阶段的时候,根据电路图把电路连接好以后,扬声器没有任何的反应。

经过一系列的检查才发现杜邦线的接线有问题,音频输出口P1.6插到了第六个角(实际上是P1.5)还在调试的最后阶段的种种问题,经过查阅资料才把简易电子琴顺利完成设计。

 

 

六.团队分工合作

潘黎:

查找资料、撰写终期报告

原媛:

编辑程序、修改及完善

黄静:

编辑程序、修改及完善

刘晓涵:

调试程序、测试功能

徐雅文:

查找资料、撰写中期报告

附录;代码部分

LCDRSEQUP2.4;定义管脚和接口

LCDRWEQUP2.5

EEQUP2.6

SPKEQUP1.6

LCDDATAEQUP0

KEYEQUP3

JIEPAIEQU24H;节拍

YINDIAOEQU25H;升降调

ORG00H

LJMPSTAR

ORG0BH;T0中断控制音调发声频率

LJMPTIME0

ORG1BH;T1中断控制音乐播放

LJMPTIME1

ORG30H

TIME0:

MOVTL0,R3

MOVTH0,R2

CPLSPK

RETI

TH01:

DB008H,007H,006H,006H,005H,004H,004H,004H

TL01:

DB028H,043H,079H,016H,070H,0D7H,04FH,011H

TIME1:

MOVTL1,20H

MOVTH1,21H

CPLSPK;由该口输出音频数据

;CLRP1.2

RETI

STAR:

MOVSP,#70H

MOVTMOD,#11H;定时器模式为1

MOVIE,#8AH

CLRTR0

MOVR3,#0FFH;LOW_8_BIT

MOVR2,#0FFH;HIGH_8_BIT

CLRYINDIAO.0;判断是否升降调位清零

MOVP2,0

MOVP0,0

MAIN:

LCALLPANDUAN;调用判断按键子程序

JZMAIN;都不按下返回继续判断

CJNEA,#9,M1;按键不等于9跳转

M1:

JNCM2;若按键为>=9中一个跳转到M2

DECA;按键为1到8执行单音播放

PUSHACC

MOVR5,A

LCALLPRINT;调用屏幕显示

POPACC

LCALLBF;调用单音播放

SJMPMAIN

M2:

CJNEA,#9,M3;按键大于9跳转

LCALLKEY9;调用播放键子程序

LCALLDELAY1

MOVLCDDATA,#01H;写指令01H,清屏

LCALLENABLE

LJMPMAIN

M3:

CJNEA,#10,M4;按键10控制加长节拍

INCJIEPAI

ANLJIEPAI,#07H

LJMPMAIN

M4:

CJNEA,#11,M5;按键11控制减短节拍

DECJIEPAI

ANLJIEPAI,#07H

LJMPMAIN

M5:

CJNEA,#14,M6

SETBYINDIAO.0;升降调执行

CLRYINDIAO.1;降调

LJMPMAIN

M6:

CJNEA,#15,M7

SETBYINDIAO.0;升降调执行

SETBYINDIAO.1;升调

LJMPMAIN

M7:

CJNEA,#13,M8;按键13复位

CLRYINDIAO.0;没有升降调

LJMPMAIN

M8:

LJMPMAIN

KEY9:

;播放已有音乐

LCALLDELAY1;调用延时

MOVLCDDATA,#01H;清屏及设置屏幕

LCALLENABLE

MOVLCDDATA,#38H

LCALLENABLE

MOVLCDDATA,#0CH

LCALLENABLE

MOVLCDDATA,#06H

LCALLENABLE

MOVLCDDATA,#80H;显示屏第一行起始地址

MOVR1,#16

LCALLENABLE

MOVDPTR,#GEMING1;显示歌名

LCALLDISP

MOVR1,#16

MOVLCDDATA,#0C0H;第二行起始地址

LCALLENABLE

MOVDPTR,#GEMING2

LCALLDISP

PUSHACC

MOV30H,#00H

JIXU3:

MOVA,30H

MOVDPTR,#QUMU1

MOVCA,@A+DPTR

MOVR2,A

JZEND0

ANLA,#0FH

MOVR5,A

MOVA,R2

SWAPA

ANLA,#0FH

JNZSONG

CLRTR1

JMPD1

SONG:

DECA

MOV22H,A

RLA

MOVDPTR,#QUMU0

MOVCA,@A+DPTR

MOVTH1,A

MOV21H,A

MOVA,22H

RLA

INCA

MOVCA,@A+DPTR

MOVTL1,A

MOV20H,A

SETBTR1

D1:

LCALLDELAY2

INC30H

JMPJIXU3

END0:

CLRTR1

POPACC

RET

DELAY1:

MOVR7,#1;延时子程序

S1:

MOVR6,#255

S2:

DJNZR6,S2

DJNZR7,S1

RET

DELAY2:

MOVR7,#02H

D2:

MOVR4,#255

D3:

MOVR3,#248

DJNZR3,$

DJNZR4,D3

DJNZR7,D2

DJNZR5,DELAY2

RET

PANDUAN:

MOVP3,#0FH

MOVA,P3

XRLA,#0FH

JNZJIXU1

RET

JIXU1:

;消除按键抖动

MOVR6,#255

HJ:

MOVR7,#255

DJNZR7,$

DJNZR6,HJ

MOVP3,#0FH

MOVA,P3

XRLA,#0FH

JNZJIXU2

RET

JIXU2:

MOVP3,#0FH

MOVA,P3

MOVP3,#0F0H

ORLA,P3

MOVB,0

CJNEA,#0FFH,K1;扫描按键

LJMPYY

K1:

INCB

CJNEA,#7EH,K2

LJMPYY

K2:

INCB

CJNEA,#0BEH,K3

LJMPYY

K3:

INCB

CJNEA,#0DEH,K4

LJMPYY

K4:

INCB

CJNEA,#0EEH,K5

LJMPYY

K5:

INCB

CJNEA,#7DH,K6

LJMPYY

K6:

INCB

CJNEA,#0BDH,K7

LJMPYY

K7:

INCB

CJNEA,#0DDH,K8

LJMPYY

K8:

INCB

CJNEA,#0EDH,K9

LJMPYY

K9:

INCB

CJNEA,#7BH,K10

LJMPYY

K10:

INCB

CJNEA,#0BBH,K11

LJMPYY

K11:

INCB

CJNEA,#0DBH,K12

LJMPYY

K12:

INCB

CJNEA,#0EBH,K13

LJMPYY

K13:

INCB

CJNEA,#77H,K14

LJMPYY

K14:

INCB

CJNEA,#0B7H,K15

LJMPYY

K15:

INCB

CJNEA,#0D7H,K16

LJMPYY

K16:

INCB

CJNEA,#0E7H,YY

YY:

MOVA,B;将按键数值放于A

RET

PRINT:

;显示屏显示按键及节拍音调

LCALLDELAY1;延时一段时间

MOVLCDDATA,#01H;写指令01H,清屏

LCALLENABLE

MOVLCDDATA,#38H;写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口

LCALLENABLE

MOVLCDDATA,#0CH;写指令0FH,显示ON,光标ON,闪烁ON

LCALLENABLE

MOVLCDDATA,#06H;写指令06H,光标输入方式增量移位

LCALLENABLE

MOVLCDDATA,#80H;第一行起始字符地址

MOVR1,#16

LCALLENABLE

MOVDPTR,#TITLEA;第一行显示字符表头地址

LCALLDISP;显示第一行数据

MOVLCDDATA,#0C0H

MOVR1,#16

LCALLENABLE

MOVDPTR,#TITLED

LCALLDISP

MOVR1,#5

MOVLCDDATA,#0C0H

LCALLENABLE

MOVDPTR,#TITLEB

LCALLDISP

MOVLCDDATA,#0C5H

LCALLENABLE

MOVA,#'1'

ADDA,R5

LCALLDISP1

MOVLCDDATA,#0C6H

LCALLENABLE

MOVA,#''

JNBYINDIAO.0,PING

JBYINDIAO.1,JIANG

MOVA,#'*';升调符号为*

SJMPPING

JIANG:

MOVA,#'_';降调符号为_

PING:

LCALLDISP1

MOVR1,#5

MOVLCDDATA,#0C8H;第二行起始字符地址

LCALLENABLE

MOVDPTR,#TITLEC;第二行显示字符表头地址

LCALLDISP

MOVLCDDATA,#0CDH

LCALLENABLE

MOVA,#'1'

ADDA,JIEPAI

LCALLDISP1

RET

ENABLE:

CLRLCDRS;写指令子程序

CLRLCDRW

CLRE

LCALLDELAY1

SETBE

RET

DISP:

MOVA,#00H;将ACC清零

MOVCA,@A+DPTR;查表取得要显示的数据

LCALLDISP1;写入一个数据

INCDPTR;数据表指针加1,准备取下一个数据

DJNZR1,DISP

RET

;-----------------

DISP1:

MOVLCDDATA,A

SETBLCDRS

CLRLCDRW

CLRE

MOVR7,#255

S3:

DJNZR7,S3

SETBE

RET

BF:

MOVR4,A

MOVDPTR,#TL01

MOVCA,@A+DPTR

MOVB,#02

JNBYINDIAO.0,TWO

JBYINDIAO.1,ONE

ZERO:

DIVAB;升调

SJMPTWO

ONE:

MULAB;降调

TWO:

CPLA

INCA

MOVR3,A

MOVA,R4

MOVDPTR,#TH01

MOVCA,@A+DPTR

MOVB,#02

JNBYINDIAO.0,TWO2

JBYINDIAO.1,ONE2

ZERO2:

DIVAB

SJMPTWO2

ONE2:

MULAB

TWO2:

CPLA

INCA

MOVR2,A

MOVA,R4

SETBTR0

LCALLDELAY

CLRTR0

RET

DELAY:

;控制节拍的延时

ANLJIEPAI,#07

XRLJIEPAI,#0FFH

XRLJIEPAI,#0FFH

INCJIEPAI

MOVR5,JIEPAI

DECJIEPAI

X3:

MOVR7,#255

X2:

MOVR6,#255

X1:

DJNZR6,X1

DJNZR7,X2

DJNZR5,X3

RET

 

;-----------------

TITLEA:

DB'DIANZIQINXITONG';显示的内容

TITLEB:

DB'DIAO:

'

TITLEC:

DB'Yinc:

'

TITLED:

DB''

QUMU0:

;音乐码表

DW64260,64400,64524,64580

DW64684,64777,64820,64898

DW64968,65030,65058,65110

DW65157,65178,65217

QUMU1:

DB51H,21H,41H,12H,83H,81H,61H,81H,58H,53H

DB61H,31H,22H,13H,21H,42H,52H,0E2H,42H,21H

DB11H,91H,41H,18H,63H,81H,32H,52H,21H,41H

DB16H,0E4H,11H,21H,31H,51H,26H,11H,21H,43H

DB51H,82H,62H,52H,61H,51H,42H,21H,11H,0E4H

DB44H,21H,41H,21H,11H,0E1H,11H,21H,41H,18H

DB61H,81H,51H,61H,51H,41H,32H,21H,41H,18H;音符通过定时器发声

DB00H

GEMING1:

DB'.Music.Playing.'

GEMING2:

DB'Liangzhu'

END

 

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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