基于单片机的简易电子琴毕业设计 - 图文 下载本文

内容发布更新时间 : 2024/11/8 16:56:20星期一 下面是文章的全部内容请认真阅读。

嘉兴学院南湖学院本科生毕业设计

2 电子琴方案设计

2.1 设计要求

利用AT89C51单片机作为主要控制元件设计一个简单按键式的电子琴系统。要求可以弹奏出8种基本的音调,包括中音段的Do、Re、Mi、Fa、SO、La、Si全部音符和高音Do,弹奏键盘的同时扬声器会产生当前的播放音调,数码管会显示出所对应的数字,以便于培养乐感。而且要有一个功能按键,按下此按键可以自动播放已存储的歌曲,在自动播放的过程中如果按下停止键则中断播放歌曲,另外还可适当调节音量的大小。

2.2 电子琴设计方案

电子琴的硬件总体设计框架和系统思路拟采用以下模块结构,如图1所示。

数码管 功率放大模块 主控模块单片机

扬声器 独立按键 (存储播放) 图1 系统结构框图

键盘 系统由AT89C51单片机、独立键盘、音频功率放大模块、扬声器、数码管、存储播放模块所组成。键盘模块的8个弹奏按键分别代表8个音调,使用者按下每个按键,单片机就会产生每个音调对应频率的方波,并且通过音频功率放大模块驱动扬声器发出对应的声音。用户按下每个弹奏按键时,数码管也会将每一个对应字形显示出来。这个电子琴系统还设有存储播放功能,当用户按下功能按键来切换到特定播放音乐模式时,单片机就会把用户事先存储好的乐曲进行播放,在自动播放的过程中如果按下停止键则中断播放歌曲。

本次设计采用AT89C51单片机的两个定时器(如T0,T1)控制频率,在P1.0引脚上输出方波周期信号,产生声音,按下不同的模拟按键就会产生不同的音符,所以使用者可以通过本电子琴系统畅所欲为的弹奏自己想要弹的乐曲。

因为一首乐曲是由许多不同的音调组成的,而每个音调都有其一一对应着的不同频率,所以需要组合各个不同的频率来构成所想要得到的歌曲了。但是对于单片机来说,想要产生不同的频率非常便捷,因为如果单片机某个引脚输出的高低电平的频率和某个音调的频率一样,那么在此引脚接上扬声器就可以发出和此音调相同的声音,所以在单

3

嘉兴学院南湖学院本科生毕业设计

片机上想要产生规定频率的方波信号只要先在某一口线输出高电平,接着延迟一小段时间输出低电平,这样重复循环的输出信号就会产生一个规定频率的方波,简单来说就是通过定时/计数器T0改变输出信号延迟的时间来改变输出方波的频率。因此,想要通过单片机得到一个音调,只要找到这个音调对应频率即可。而播放歌曲部分,需要在编程的时候将每一音调的时间常数作为一组,延时节拍常数再作为一组,将乐曲中的所有常数按照固定顺序排列成一个表,通过循环语句依次播放,就能产生具有一定节奏的音调,就可以实现播放歌曲了。

4

嘉兴学院南湖学院本科生毕业设计

3 硬件设计

3.1 单片机

3.1.1 AT89C51简介

AT89C51是一种闪速存储器,内置的高性能CMOS微处理器芯片具有低电压、低功耗的特点,在其内置的通用的Flash和8位CPU的帮助下,使其功能非常的强大。89c51是用静态逻辑设计的,跟8051相比,它还带有省电模式,即休闲方式和掉电方式。它用Flash ROM替换了ROM/EPROM,但是芯片外部引脚和指令系统却是与早期的8051/8751/8031完全兼容。由于内部使用了Flash ROM,单片机的开发及应用就别以前更加简单了。外形及引脚排列如图2所示。 3.1.2 主要的功能特性

1. 4K字节可编程闪烁存储器 2. 与MCS-51 兼容 3. 寿命:1000写/擦循环 4. 数据保留时间:10年 5. 全静态工作:0Hz-24Hz 6. 三级程序存储器锁定 7. 128*8位内部RAM 8. 32可编程I/O线 9. 两个16位定时器/计数器 10. 5个中断源 11. 可编程串行通道

12. 低功耗的闲置和掉电模式 13. 片内振荡器和时钟电路

图2 AT89C51

3.1.3 I/O端口介绍

P0口:每一个P0接口引脚可以接受8个TTL门电流。它的工作原理是当更改P0口的管脚电平,当P0口的管脚的电平被改写为1的时候,此时P0口的输出状态就被定义为高阻输出。如果通过端口对单片机的Flash进行编程的时候,P0接口可以作为一个源代码的输入端口,就相当于输入端,而在对单片机的Flash进行校验的时候,P0接口可以作为一个源代码的输出端口,此时P0端口的外部必须接一个上拉电阻。除此之外,P0端口还能够外部程序数据的储存器,这时P0引脚的作用与之前的有所不同,其功能被重新定义为数据地址的低8位。

P1口:P1口作为一个其内部自带上拉电阻的一个8位的双向I/O接口,可以作为一个

5

嘉兴学院南湖学院本科生毕业设计

缓冲器来使用,当它作为缓冲器的时候能够接受4个TTL门电路的电流缓冲器。而当P1口的管脚的电平被改写为1的时候,其内部的电平也跟着被拉高,而这个时候,P1口可以作为输入口来输入电流。相反,如果当P1口的管脚的电平被改写为0的时候,P1口可以作为输出口来输出电平,这是因为其内部上拉的缘故。P1口还有一种功能就是作为低八位地址接收数据,而在实现这个功能时只有在内部的Flash在进行编程和校验。

P2口:P2口的作用基本和P1口相同,其内部和P1口一样,也是一个自带上拉电阻的8位双向I/O接口,同样也可以作为一个缓冲器来使用。与P1口不同的是,P2口在作为缓冲器的时候能够同时接受或输出4个TTL门电路的电流缓冲器。跟P1相同,当P2口的管脚的电平被改写为1的时候,其内部的电平也跟着被拉高,而这个时候,P2口就作为输入口来输入电流。相反,如果当P2口的管脚的电平被改写为0的时候,P2口就作为输出口来输出电平。

P3口:P3口管脚的内部也集成了8个同样拥有上拉电阻功能的双向I/O接口。其功能大致与P2口、P1口相同,能够同时接受或者输出4个TTL门电流。当P3口的电平被改写为高电平的时候,其内部的电平会在其内部上拉电阻的作用下变成高电平,当P3口的电平被改写成低电平的时候,内部电平也被下拉为低电平,这时候的P3口将输出ILL电流。

P3口也可作为特殊功能口,如下所示: P3.0 串行输入口 P3.1 串行输出口 P3.2 外部中断0 P3.3 外部中断1 P3.4 T0外部输入 P3.5 T1外部输入

P3.6 外部数据存储器写选通 P3.7 外部数据存储器读选通 3.1.4 定时/计数器的应用

AT89C51单片机内部有两个定时/计数器,它们实际上是个16位加1计数装置。它对片内振荡器输出的脉冲计数时称为定时器,对外部脉冲信号计数时称为计数器。当对单片机片内振荡器输出的脉冲计数时,每隔一个机器周期定时器就加1计数值,当计数值计满溢出时计数完毕并通知单片机。改变AT89C51的定时器里面的特殊功能寄存器TH0及TL0在模式1下的计数值,便会产生不同方波频率,然后通过扬声器产生对应的音调。例如,需要频率为1046Hz时,其周期为T=1/1046=956μs,因此只要令定时/计数器计数956/2=478次,相应的取反输出也是478次,就可得到高音DO(1046Hz)。

脉冲计数值与频率的关系式为:

N?(fi/2)/fr 错误!未找到引用源。 (3-1)

此式中,N是计数值;fi是单片机计数频率(采用12MHz晶振时,经12分频后其输

6