基于单片机的电子琴和音乐播放器设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

每个音与 delay 时间对应如下表所示:
音符
Delay
中音 Do
8876
中音 Re
7476
中音 Mi
6456
中音 Fa
5886
中音 So
5036
中音 La
4036
中音 Xi
3236
高音 Do
3006
音符 高音 Re 高音 Mi 高音 Fa 高音 So 高音 La 高音 Xi 高音 Do
Delay 2446 1936 1666 1186 766 376 186
4
RG1 RD3
RE0 RG14
RE1 RD4 RE3 RE2
3.输出模块(显示屏)
采用型号为 RT1602C 的液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图 形,显示多样,清晰可见, 与传统的阴极射线管相比,液晶显示屏具有占用空间小、低功耗、 低辐射、无闪烁、降低视觉疲劳等优点。字符型液晶屏是一种用 5*7 点阵图形来显示字符的 液晶显示器,根据显示的容量可以分为 1 行 16 个字、2 行 16 个字、2 行 20 个字等,最常用 的为 2 行 16 个字。
2.输入模块(键盘) 一个简易的电子琴需要键盘 15 个按键,选择用 4*4 行列式键盘完成输入。4*4 行列式
键盘又称为矩阵键盘,它是用 4 条 I/O 线作为行线,4 条 I/O 线作为列线组成的键盘。在行 线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是 4×4 个。这种行列 式键盘结构能够有效地提高单片机系统中 I/O 口的利用率。
80MHz 的主频,1.56DMIPS/MHz,总线 32 位; USB 2.0 接口; 2 个带 1024 缓存的 CAN 2.0 接口; 8 通道 DMA 通道; 5 级流水线,哈佛架构; 1 个以太网接口; 512K 的 Flash,外加 12k 的启动 Flash; 128K 的 RAM; 可编程中断向量控制器; 16 个 10 位 AD 转换器; UART/SPI/IIC 等串行通信方式; 带 JTAG 调试口,具有休眠功能,节省能耗。
而键盘应具有以下几个基本功能: (1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键 的质量相关,一般为 5—20mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处 在稳定接通或稳定断开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解 决。 (2)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方 法完成。常用的方法有行扫描法和线反转法两种。行扫描法的基本思想是,由程序对键盘逐 行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方 法在微机系统中被广泛使用。本实验采用扫描法。 (3)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建 立一个键盘编码表,通过查表获得被按键的键码。
PORTClearBits(IOPORT_E, BIT_0); delay(1);
//将C列全部设置为输入为高电平1
PORTSetPinsDigitalIn(IOPORT_E, BIT_1 | BIT_2 | BIT_3);
PORTSetPinsDigitalIn(IOPORT_D, BIT_4 );
型号为 RT1602C 的液晶显示屏就是 2 行 16 个字。它有 16 个管脚,分别有电源地、电 源正、偏压信号、读写控制、使能控制、I/O 接口、背光控制等功能。它的读写操作、屏幕 和光标的操作都是通过指令编程来实现的。
VO 为显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高。为了简化电 路以及获得最好的显示效果,将 VO 端口直接接地。
单片机应用系统打下良好基础。
二. 实验分工
本次实验我的队友主要负责的部分是 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 过程期间出现的问题是由我们两个人共同查阅资料完成的,整体合作协调很好,完成的较 为顺利。
三.功能简介
1.设计一个电子琴。所能实现的功能如下: (1).能够实现舒适化菜单,由按键选择菜单中的两个功能:播放乐曲和弹奏乐曲,并实现其功
5.2 软件设计 5.2.1 程序流程图
开始
判断 LCD 按键 SW1
弹奏功能
SW3 播放功能
键盘扫描
键盘扫描
根据按键值在相应 数组中寻找对应键 值的音符频率
根据按键值含有七首 曲子的二维数组中寻 找对应键值的曲目
喇叭播放对 应音符
相应曲目节拍与音调通 过同一参数一一对应
喇叭播放相应
曲子
6
结束
5.2.2 各模块具体软件实现
能; (2).播放乐曲:又初始化菜单选择进入,进入后屏幕提示”SONGPLAYING”,同时事先在程序
中存入了 8 首不同的乐曲,可以一次通过键盘的按键来选择播放各首乐曲。在播放曲目中设 置了暂停键,按下即暂停,不按下则继续播放循环播放。
(3).自行弹奏:设计键盘上的 13 个键能够发出低音部 5,6,7,中音部 1,2,3,4,5,6, 7,高音部 1,2,3 总共 14 个音,要求按下按键发声,松开延时一段时间停止,中间再换按 其他键则发另一音调的声音。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以 2,即为半 周期的时间。利用定时器计时半周期时间,每当计时终止后就将相应的端口反相,然后重复 计时再反相。就可在各对应的引脚上得到此频率的脉冲。
我们小组利用 PIC32MX795F512L 的 80M 主频,运用 delay 函数,改变 delay 的时间以产 生不同频率的方法产生不同音阶。由于主频较高,没有一个音符的频率可以参考,于是我们 小组是利用自己的乐理知识将每个音校正。
PORTSetBits(IOPORT_E, BIT_1 | BIT_2 | BIT_3);
PORTSetBits(IOPORT_D, BIT_4 );delay(1);
//第一列
R0=0;R1=1;R2=1;R3=1; //第一行
if(C0==0)
//第一列
7
{ delay(10); if(C0==0) return 1;
北京邮电大学
基于单片机的电子琴和音乐播放器设计
实验报告
学院:信息与通信工程学院 指导老师:葛顺明
1
摘要
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演 着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的 生活中,成为不可替代的一部分。本文的主要内容设计为一个基于 PIC32MX795F512L 单片 机的电子琴与音乐播放器,利用单片机上的按键来选择相应功能,利用键盘按键来选择弹奏 某一音调或播放某首曲子。能够实时将数据传至液晶屏显示。根据单片机的工作原理,通过 硬件电路制作和软件编译,设计出一个能够自由弹奏乐曲及流畅播放内置音乐的电子琴与音 乐播放器。该系统主要由液晶显示模块、键盘模块、喇叭模块组成。设计利用 MPLAB 软件对 源程序进行编译和调试。
(4).走马灯:设计了 4 个蓝光走马灯配合播放音乐和演奏时闪烁。 2.当系统扫描到有键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启
动,发出一定频率的脉冲,该频率的脉冲输入到蜂鸣器后,就会发出相应的音调如果在 前一个按下的键发声的同时另一个键被按下,则启动中断系统,前面键的发音停止,转 到后按的发音程序,发出后按的键的音调。
2
四.实验原理
4.1 音频脉冲的产生
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利 用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非 常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把 一首歌曲的音阶对应频率关系弄正确即可。
本小组的节拍是由 while 函数实现的,在每个节拍 delay 的时间中播放对应的音符,1/8 为 1,1/4 为 2,以此类推。而 while 循环的时间为节拍*310,这是我们经过反复试验确定的 最佳的节拍延时。
五.方案设计
5.1 硬件设计 5.1.1 电路设计框图
输出模块: LCD RT1602C
4.2 音乐节拍的产生
每个音符使用 1 个字节,字节的高 4 位代表音符的高低,低 4 位代表音符的节拍,表 1-2 为节拍与节拍码的对照表。如果 1 拍为 0.4s,1/4 拍是 0.1s,只要设定延时时间就可求得 节拍的时间。假设 1/4 拍为 1DELAY,那么 1 拍应为 4DELAY,以此类推。所以只要求得 1/4 拍 的 DELAY,其余的节拍就是它的倍数,表 1-3 为 1/4 和 1/8 拍的时间设定。
关键词: PIC32MX795F512L 单片机,模块
一. 实验目的
1.通过学习使用单片机 PIC32,使学生增进对单片机的感性认识,加深对单片机理论方面的理 解。 2. 使学生掌握单片机的内部功能模块的功能和应用,如定时器/计数器、中断、I/O 口等。 3 使学生理解和掌握单片机应用系统的软件硬件设计过程、方法及实现,为以后设计和实现
脚号 1 2 3
符号 GND VDD V0
引脚功能以及接法 电源地 电源正 显示偏压信号
脚号 9 10 11
符号 D2 D3 D4
引脚功能以及接法 RF13 RB12 RB13
5
4
RS
数据/命令控制 RA7 12
D5
RB14
5
R/W
读/写控制 RA6
13
D6
RB8
6
E
使能信号 RF4
14
D7
RB9
void delay(uint ms)
{
uint x,y;
for(x=ms;x>0;x--)
for(y=10;y>0;y--);
}
uchar keyboard() //判断按下哪一键
{
while(1)
{
delay(100);
//将R行全部设置为输出为低电平0;
PORTSetPinsDigitalOut(IOPORT_G, BIT_14 | BIT_1 );
PORTSetPinsDigitalOut(IOPORT_D, BIT_3 );
PORTSetPinsDigitalOut(IOPORT_E, BIT_0 );
PORTClearBits(IOPORT_G, BIT_14 | BIT_1 );
PORTClearBits(IOPORT_D, BIT_3);
3
输入模块: 4*4 键盘
PIC32MX7 95F512L
芯片
输出模块: 喇叭
输出模块: 走马灯
5.1.2 硬件概述
本电路是由 PIC32MX795F512L 单片机为控制核心,具有键盘输入、液晶显示屏输出和 三极管驱动的喇叭构成的简易电子琴电路。
1.单片机
PIC32MX795F512L 型号单片机具有 USB、CAN 和以太网的高性能 32 位闪存,其所 拥有的主要资源有:
1.键盘模块
运用行扫描的方式来判断是否有键按下及按下的是哪一键。首先令行都为输出并置为
零,列为输入且都为高电位,则只要有一列为低就是有键按下。再依次令每一行为低电平其
他行为高电平,检查每一列是否为低电平,行和列均为低电平所对应的交汇处即为按键按下
的地方。
#include "KEYBOARD.h"
//时延函数
R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。 GND 接电源,VDD 接正电源。 RS 为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。源代码中 write_cmd 函数为向 LCD 写入指令的函数,因此会有 RS=0;write_date 函数为向 LCD 写入 数据的函数,因此会有 RS=1。 E 端为使能端,当 E 端由高电平跳变成低电平,也就是下降沿时,LCD 模块进行命令执 行。 BL1 和 BL2 为设置 LCD 背光,分别接了电源与地。 DO~D7 八个为数据 I/O 口,按照表格内的接法相连。
7
D0
数据 I/O RF5
15
BL1 背光源正
8
D1
RFபைடு நூலகம்2
16
BL2 背光源负
4.输出模块(喇叭) 将一固定端口通过三极管 PNP 放大再连接喇叭构成我们的输出音频模块。喇叭一端接电
源一端接发射极,当有方波送入时,喇叭便发出相应频率的响声。
5.输出模块(走马灯) 将四个发光二极管与四个端口相连,另外一端通过小电阻接地,通过控制四个端口依次为高 电平使得四个灯依次点亮,实现走马灯的效果。
相关文档
最新文档