基于单片机的数字音乐盒设计.docx

上传人:b****8 文档编号:9615156 上传时间:2023-02-05 格式:DOCX 页数:59 大小:163.71KB
下载 相关 举报
基于单片机的数字音乐盒设计.docx_第1页
第1页 / 共59页
基于单片机的数字音乐盒设计.docx_第2页
第2页 / 共59页
基于单片机的数字音乐盒设计.docx_第3页
第3页 / 共59页
基于单片机的数字音乐盒设计.docx_第4页
第4页 / 共59页
基于单片机的数字音乐盒设计.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

基于单片机的数字音乐盒设计.docx

《基于单片机的数字音乐盒设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字音乐盒设计.docx(59页珍藏版)》请在冰豆网上搜索。

基于单片机的数字音乐盒设计.docx

基于单片机的数字音乐盒设计

基于单片机的数字音乐盒设计

任务书

一、任务

设计一款基于AT89C51单片机的数字音乐盒。

二、设计要求

(1)利用单片机的I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。

(2)共有10首音乐,每首乐曲都由相应的按键控制,并有开关键、暂停键、上一曲及下一曲控制键;

(3)利用LCD液晶显示歌曲的序号、播放时间,开机时显示英文欢迎提示字符。

任务书1

目录2

1概述5

1.1单片机数字音乐盒有关介绍5

1.2LED显示屏控制技术状况9

1.3本设计任务10

2总体方案论证与设计12

2.1单片机的选取12

2.2LED显示方式13

2.3LED驱动模块13

2.4系统总体结构框图14

3系统硬件设计15

3.1AT89C51芯片功能和硬件连接15

3.2LED显示器18

3.3键盘19

3.4系统复位电路的设计20

3.5时钟电路模块20

3.6输出显示电路21

3.7音频输出部分21

3.8整体硬件电路23

4系统软件设计25

4.1主模块的设计25

4.2外部中断源系统设计26

4.3基本显示模块设计27

4.4系统初始化程序28

4.5音调、节拍以及编码的确定方法28

4.6程序流程图33

4.7文档顶端程序清单35

5调试结果46

5.1系统总电路图46

5.2运行结果及分析46

总结48

参考文献49

1概述

传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。

但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。

水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。

另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。

基于单片机设计制作的电子式音乐盒。

与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。

电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。

基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。

所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。

另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富。

1.1单片机数字音乐盒有关介绍

电子音乐已广泛地应用于社会生活的各个领域。

其类型从音乐卡片到CD、MP3等多种多样,制作原理也各不相同。

声音是通过振动产生的。

单片机对某一I/O引脚以一定的频率循环置1和清0,这一引脚便产生一定频率的方波,该方波通过放大后作用于扬声器便产生一定频率的声音。

若改变输出方波的频率,产生的声音也就改变了。

通过控制输出方波的时间长短,声音的长短也就得到控制。

因此,根据乐谱,单片机就可产生电子音乐。

音乐中最关键的两个要素是音符和节拍。

单片机控制的音乐发生器系统由硬件电路和软件两部分构成。

利用单片机控制的电子音乐发生器软硬件上具有独特的优点,系统的开发周期短,成本低,电路制作容易。

更换歌曲时,硬件电路无需作任何修改,只需修改软件即可实现。

软件编程时,可用51系列单片机的汇编语言或C51语言实现。

同时还可根据个人的习好通过软件改变节拍的延时时间,增加电子音乐的趣味性。

1.1.1发音原理介绍

发音原理:

播放一段音乐需要的是两个元素,一个是音调,另一个是音符。

首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。

对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。

另外,音符的频率有所不同。

基于上面的内容,这样就对发音的原理有了一些初步的了解。

音符的发音主要靠不同的音频脉冲。

利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。

只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

1.1.2音符频率的产生

音符及定时器初始值:

例如:

中音1(do)的音频=523HZ,周期T=1/523s=1912

定时器/计数器0的定时时间为:

T/2=1912/2

=956

定时器956

的计数值=定时时间/机器周期=956

/1

=956(时钟频率=12MHZ)

装入T0计数器初值为65536-956=64580

将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。

将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。

下表1.1是C调各音符频率与计数初值T的对照表:

表1.1C调各音符频率与计数初值T的对照表

音符

频率(Hz)/初值(

音符

频率(Hz)/初值(

低1DO

262/63627

中1DO

523/64580

高1DO

1042/65056

低2RE

294/63835

中2RE

589/64687

高2RE

1245/65134

低3M

330/64021

中3M

661/64780

高3M

1318/65157

低4FA

350/64107

中4FA

700/64822

高4FA

1397/65178

低5SO

393/64264

中5SO

786/64900

高5SO

1568/65217

低6LA

441/64402

中6LA

882/64969

高6LA

1760/65252

低7SI

495/64526

中7SI

990/65031

高7SI

1967/65282

音符、音符编码及定时器初始值:

为了产生音符,必须求出音符低音5—高音5的计数初值。

例如C调的低1DO的THTL=65536-50000/262=63627,中音DO的THTL=65536-500000/523=64580,高音DO的THTL=65536-500000/1042=65056。

为了方便写谱,对其进行简单的编码,在编程时,根据音符编码(表1.2)查找对应的计数初值。

比如说音乐是C调的,那么出现低音的5SO,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI,直接写一个3代码。

表1.2音符编码表

音符

音符编码

音符

音符编码

不发音

0

低5SO

1

低6LA

2

低7SI

3

中1DO

4

中2RE

5

中3M

6

中4FA

7

中5SO

8

中6LA

9

中7SI

A

高1DO

B

高2RE

C

高3M

D

高4FA

E

高5SO

F

高6LA

G

1.1.3节拍频率的产生

节拍的产生与编码:

音乐中的节拍用延时时间产生。

例如,1拍=0.4s,1/4拍=0.1s,以此类推。

假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。

为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表1.3和表1.4所示。

表1.3节拍数编码表

按1/4拍为一个延时时间的节拍编码与节拍对应的表

按1/8拍为一个延时时间的节拍编码与节拍对应的表

节拍编码

节拍

节拍编码

节拍

节拍编码

节拍

节拍编码

节拍

1

1/4

6

6/4

1

1/8

6

6/8

2

2/4

8

8/4

2

2/8

8

8/8

3

3/4

A

10/4

3

3/8

A

10/8

4

4/4

C

12/4

4

4/8

C

12/8

5

5/4

F

15/4

5

5/8

表1.4乐谱节拍编程时的时间延时表

乐谱节拍

1/4拍的延时时间

乐谱节拍

1/8拍的延时时间

4/4

125ms

4/4

62ms

3/4

187ms

3/4

94ms

2/4

250ms

2/4

125ms

音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。

1.2LED显示屏控制技术状况

显示屏的控制系统包括输入接口电路、信号控制、转换和数字化处理电路及输出接口电路等,涉及的具体技术很多,其关键技术包括串行传输与并行传输技术、动态扫描与静态锁存技术、自动检测及远程控制技术等。

1.2.1串行传输与并行传输技术

LED显示屏的数据传输方式主要有串行和并行两种。

日前普遍采用串行控制技术,显示屏每个单元内部的不同驱动电路和各级联单元之间,每个时钟仅传送一位数据。

采用这种方式的驱动IC种类较多,不同显示单元之间的联线较少,可减少显示单元的数据传输驱动元件,从而提高整个系统的可靠性和性价比,具体工程实现也较为容易。

1.2.2动态扫描与静态锁存技术

LED显示屏控制系统实现显示信息的刷新技术有动态扫描和静态锁存两种方式。

一般室内显示屏多采用动态扫描技术,即一行发光二极管共用一行驱动寄存器,根据共用一行驱动寄存器的发光二极管像素数目,分为1/4、1/16扫描等。

室外显示屏基本上采用静态锁存技术,即每一个发光一极管都对应有一个驱动寄存器,无需时分工作,从而保证了每一个发光一极管的亮度占空比为100%。

动态扫描法可以大大减少控制器的I/O口,因此应用较广。

1.2.3自动检测及远程控制技术

LED显示屏的构成复杂,特别是室外显示屏,供电、环境亮度、环境温度条件等都直接影响显示屏的正常运行。

在LED显示屏的控制系统中,因根据需要对温度、亮度、电源等进行自动检测控制,也可根据需要,远程实现对显示屏的亮度、色度调节、图像水平和垂直位置的调节以及工作方式的转换等。

1.3本设计任务

随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。

小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。

传统的音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。

本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。

本设计是基于单片机控制的数字音乐盒的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机数字音乐盒。

若该设计使用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。

若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。

片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。

另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。

在该设计中利用单片机I/O口产生一定频率的方波,驱动蜂鸣器,发出各种不同的音调,从而演奏乐曲,并能够由LCD显示信息。

键盘在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。

本设计采用4*4键盘,16*2LCD,七段显示数码管LED。

在开机按钮按下时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。

在演奏过程中可通过功能键选择乐曲,暂停,播放。

2总体方案论证与设计

本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。

要求利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD显示信息,从而演奏乐曲,开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。

本设计采用4*4键盘,16*2LCD,七段显示数码管LED。

下面对各模块的设计逐一进行论证比较。

2.1单片机的选取

首先选择单片机中最为普遍的MCS51系列。

其中AT89C2051是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C2051单片机可应用于许多高性价比的应用场合。

主要性能:

●和MCS-51产品兼容;

●2KB可重编程FLASH存储器(1000次);

●2.7-6V电压范围;

●全静态工作:

0Hz-24KHz

●2级程序存储器保密锁定

●128*8位内部RAM

●15条可编程I/O线

●两个16位定时器/计数器

●6个中断源

●可编程串行通道

●高精度电压比较器(P1.0,P1.1,P3.6)

●直接驱动LED的输出端口

由于完成核心功能——音频输出只需一个I/O口,并且额外功能LED移位显示可根据所选单片机的剩余I/O口进行设计,因此AT89C2051足以满足基本要求。

其20个引脚体积小巧,内部2k字节的程序存储器容量适中,低压低频工作条件,并且价格低廉容易购得。

综上,本次设计选择AT89C2051单片机。

2.2LED显示方式

方案一:

静态显示。

将一帧图像中的每一个二极管的状态分别用0和1表示,若为0,则表示LED无电流,即暗状态;若为1则表示二极管被点亮。

若给每一个发光二极管一个驱动电路,一幅画面输入以后,所有LED的状态保持到下一幅画。

对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,成本高,且可靠性也较低。

方案二:

动态显示。

对一幅画面进行分割,对组成画面的各部分分别显示,是动态显示方式。

动态显示方式,可以避免静态显示的问题。

但设计上如果处理不当易造成亮度低,闪烁问题。

因此合理的设计既应保证驱动电路易实现,又要保证图像稳定、无闪烁。

动态显示采用多路复用技术的动态扫描显示方式,复用的程度不是无限增加的,因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短,发光的亮度等因素。

通过实验发现,当扫描刷新频率(发光二极管的停闪频率)为50Hz,发光二极管导通时间≥1ms时显示亮度较好,无闪烁感。

鉴于上述原因,采用方案二。

2.3LED驱动模块

方案一:

采用静态锁存方式,将每一个LED发光管的一端接至单片机的一个I/O口,另一端通过电阻接电源。

这种方法可以直接驱动LED,原理简单,驱动能力强,LED的亮度也可以通过限流电阻调节,非常方便,但此种方法太浪费单片机的I/O口,只适合于较小的系统。

方案二:

采用动态扫描方式,通过三极管驱动并联在一起的LED发光管的一端(共阴或共2端),LED发光管的另一脚接通用I/O口,控制其亮灭。

该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

比较以上两种方案,系统设计中采用方案二。

2.4系统总体结构框图

3系统硬件设计

本设计中用到了AT89C51单片机,4*4键盘,蜂鸣器,2LCD等硬件电路常用元器件。

3.1AT89C51芯片功能和硬件连接

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

3.1.1主要特性:

·与MCS-51兼容

·4K字节可编程闪烁存储器

·寿命:

1000写/擦循环

·数据保留时间:

10年

·全静态工作:

0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

3.1.2管脚说明(如图3.1):

图3.1

VCC:

供电电压。

GND:

接地。

   P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

   P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

   P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

   P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

管口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

   /EA/VPP:

/EA保持低电平时,在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

   XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

   XTAL2:

来自反向振荡器的输出。

  

3.1.3振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为

片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

3.1.4芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE

管脚处于低电平10ms来完成。

在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。

在闲置模式下,CPU停止工作。

但RAM,定时器,计数器,串口和中断系统仍在工作。

在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

3.2LED显示器

LED(LightEmittingDiode)是发光二极管英文名称的缩写。

LED显示器是由发光二极管构成的,所以在显示器前面冠以“LED”。

LED显示器在单片机系统中的应用非常普遍。

3.2.1LED显示器的结构

常用的LED显示器为8段。

每一个段对应1个发光二极管,这种显示器有共阳极和共阴极两种:

共阴极LED显示器的发光二极管的阴极连接在一起,通常此公共阴极接地。

当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。

同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。

为了使LED显示器显示不同的符号或数字,就要把不同段的发光二极管点亮,这样就要为LED提供代码,因为这些代码可使LED相应的段发光,从而显示不同字型,因此该代码称为段码。

7段发光二极管,再加上1个小数点位,共计8位。

因此提供给LED显示器的段码正好是1B。

各段与字节中各位对应关系如下表3.1:

表3.18段LED结构及外形

代码位

D7

D6

D5

D4

D3

D2

D1

D0

显示位

dp

g

f

E

d

c

b

a

3.2.2LED显示器工作原理

由N个LED显示块可以拼接成N位的LED显示器。

如图是LED显示器的结构原理图3.2。

N个LED显示器有N个位选线和8*N位根段码线。

段码线控制显示字符的字型,而位选线为各个LED显示块中

各段的公共端,它控制该LED显示位的亮或暗。

LED显示器

有静态显示和动态显示两种。

3.3键盘

键盘在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。

3.3.1键盘输入的特点

键盘实质上是一级按键开关的集合。

通常,键盘开关利用了机械触点的合、断作用。

3.3.2按键的确认

键的闭合与否,反映在行线输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,通过对行线电平高低状态的检测,便可确认按键按下与否。

为了确保CPU对一次按键动作只确认一次按键有效,必须消除抖动的影响。

按键输入电路由4*4矩阵键盘组成,P1口作为输入控制按键,其中

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

当前位置:首页 > 自然科学 > 天文地理

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

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