超级电子琴文档格式.docx

上传人:b****6 文档编号:20266905 上传时间:2023-01-21 格式:DOCX 页数:17 大小:277.46KB
下载 相关 举报
超级电子琴文档格式.docx_第1页
第1页 / 共17页
超级电子琴文档格式.docx_第2页
第2页 / 共17页
超级电子琴文档格式.docx_第3页
第3页 / 共17页
超级电子琴文档格式.docx_第4页
第4页 / 共17页
超级电子琴文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

超级电子琴文档格式.docx

《超级电子琴文档格式.docx》由会员分享,可在线阅读,更多相关《超级电子琴文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

超级电子琴文档格式.docx

MCS-51单片机原理接口及应用王质朴北京理工大学出版社2009.11

基于Proteus的单片机系统设计与仿真实例蒋辉平机械工业出版社

2009.7

 

指导老师签字:

日期:

目录

1引言1

1.1电子琴概述1

1.2本设计任务1

2总体方设计1

2.1播放模块1

2.2按键控制模块2

2.3总体硬件组成框图2

2.4系统硬件设计2

2.4.1中心控制模块的硬件设计2

2.4.2播放模块的硬件设计3

2.4.3LCD液晶显示电路设计与原理3

2.4.4按键控制模块的硬件设计4

2.5系统的软件设计5

2.5.1下位机软件流程5

2.5.2电子琴汇编程序6

3系统调试与测试结果分析10

3.1使用的仪器仪表10

3.2系统调试11

3.3测试结果12

参考文献13

1引言

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。

1.1电子琴概况

电子琴有简易电子琴(玩具琴)和高档电子琴(教学琴,演奏琴)两大类。

简易电子琴是指采用分立元件(目前已不多见)或采用中小规模集成电路的电子琴。

这类电子琴成本较低,音色较差、音准不佳且故障率较高,而采用大规模集成电路的简易电子琴的音色、音准和可靠性都有较大的改善。

1.2本设计任务

利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。

当系统扫描到键盘上有键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。

如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按的键的音。

2总体方案设计

本系统采用单片机AT89C51为电子琴的控制核心,系统主要包括播放模块、按键控制模块。

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

2.1自动播放歌曲程序

检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下

2.2按键控制模块

电子琴设有8个按键,其中7个作为音符输入,另外1个作为模式转换按键,实现用户自弹作曲。

7个按键分别代表7个音符,包括中音段的全部音符。

通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。

然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现自编歌曲。

键盘扫描程序:

检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;

无键按下,则返回键盘扫描程序继续检测。

2.3总体硬件组成框图

图2-1总体硬件组成框图

2.4系统硬件设计

为使该模块化电子琴控制系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。

硬件电路包括中心控制模块、播放模块、按键控制模块三大模块。

2.4.1中心控制模块的硬件设计

本次设计中中心控制模块是采用AT89C51单片机来控制整个系统。

其中P3.7口作为输入口,连接蜂鸣器驱动电路,而P1口连接按键控制电路,从而实现播放音乐的功能,P0口用LCD屏显示输出结果。

2.4.2播放模块的硬件设计

如下图所示,播放模块其实就是喇叭,它接到P3.7口上当有按键按下时,它就会发出声音..

图3-1播放模块硬件连接图

2.4.3LCD1602液晶显示电路设计与原理

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

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源。

VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

Proteus7.7中的1602液晶只有14个引脚,少了背光电源的两根引脚,完全兼容。

本设计中,液晶的数据口与单片机的P0口相连。

2.4.4按键控制模块的硬件设计

在P1口连有7个按键它们一端接5伏电源,一端接地.在仿真时,只要有一个键被按下,并被单片机扫描到,则会使播放器发出声音.

图3-2按键控制电路图

P3口也可作为AT89C51的一些特殊功能口,

P3口引脚特殊功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2(外部中断0)

P3.3(外部中断1)

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

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

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

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

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

2.5系统的软件设计

软件是该电子琴控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。

2.5.1下位机软件流程

本系统中下位机(单片机89C51)的主要功能就是实现音乐播放功能。

其主程序流程如图4-1所示。

图4-1软件程序流程图

2.5.2电子琴汇编程序

/*-----------------------------------------------

名称:

电子琴

内容:

8个按键控制8个音符

------------------------------------------------*/

#include<

reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

#defineKeyPortP1

#definecomm0

#definedat1

/*------------------------------------------------

变量

ucharHigh,Low;

//定时器预装值的高8位和低8位

sbitSPK=P3^7;

//定义喇叭接口

sbittab=P2^6;

//功能键

sbitRS=P2^0;

//液晶数据命令选择

sbitRW=P2^1;

//液晶读写选择

sbitEN=P2^2;

//液晶使能端

ucharcodefreq[][2]={

0xD8,0xF7,//00440HZ1

0xBD,0xF8,//00494HZ2

0x87,0xF9,//00554HZ3

0xE4,0xF9,//00587HZ4

0x90,0xFA,//00659HZ5

0x29,0xFB,//00740HZ6

0xB1,0xFB,//00831HZ7

0xEF,0xFB,//00880HZ`1

};

ucharTime;

ucharcodeYINFU[9][1]={{'

'

},{'

1'

2'

3'

4'

5'

6'

7'

8'

}};

//世上只有妈妈好数据表

ucharcodeMUSIC[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,

6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,

6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,

5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,

2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0

};

//音阶频率表高八位

ucharcodeFREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,

};

//音阶频率表低八位

ucharcodeFREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i

0xEE,0x44,0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,

ucharcodedis1[2][10]={"

electronic"

"

organ"

/*------------------------------------------------

函数声明

voidInit_Timer0(void);

//定时器初始化

延时函数大约约2*z+5us

voiddelay2xus(ucharz)

{

while(z--);

}

延时函数大约约1ms

voiddelayms(ucharx)

while(x--)

{

delay2xus(245);

}

1602液晶写命令comm/数据dat

voidlcd_wr(ucharcomm_dat,ucharxdat)

RS=comm_dat;

RW=0;

delay2xus(10);

P0=xdat;

EN=1;

delayms

(1);

EN=0;

1602液晶写字符串命令

voidlcd_string(ucharadd,ucharmun,uchar*pstring)

lcd_wr(comm,0x80+add);

while(mun--)

lcd_wr(dat,*(pstring++));

*1602初始化*

voidlcd_init()

P0=0x00;

lcd_wr(comm,0x38);

delayms

(2);

lcd_wr(comm,0x0c);

lcd_wr(comm,0x06);

lcd_wr(comm,0x01);

节拍延时函数

各调1/4节拍时间:

调4/4125ms

调2/4250ms

调3/4187ms

voiddelayjie(uchart)

uchari;

for(i=0;

i<

t;

i++)

delayms(250);

TR0=0;

歌曲处理函数

voidSong()

TH0=High;

//赋值定时器时间,决定频率

TL0=Low;

TR0=1;

//打开定时器

delayjie(Time);

//延时所需要的节拍

主函数

voidmain(void)

ucharnum,k,i;

lcd_init();

lcd_string(0,10,dis1[0]);

//开机画面

lcd_string(11,5,dis1[1]);

//开机画面

Init_Timer0();

//初始化定时器0,主要用于数码管动态扫描

SPK=0;

//在未按键时,喇叭低电平,防止长期高电平损坏喇叭

lcd_string(0x40+2,5,"

NOTE:

"

);

while

(1)

switch(KeyPort)

{

case0xfe:

num=1;

break;

case0xfd:

num=2;

case0xfb:

num=3;

case0xf7:

num=4;

case0xef:

num=5;

case0xdf:

num=6;

case0xbf:

num=7;

case0x7f:

num=8;

default:

num=0;

}

lcd_string(0x40+7,1,YINFU[num]);

if(num==0)

//在未按键时,喇叭低电平,防止长期高电平损坏喇叭

else

High=freq[num-1][1];

Low=freq[num-1][0];

TR0=1;

if(tab==0)

delayms(10);

i=0;

while(i<

100)

{

k=MUSIC[i]+7*MUSIC[i+1]-1;

//去音符振荡频率所需数据

High=FREQH[k];

Low=FREQL[k];

Time=MUSIC[i+2];

//节拍时长

i=i+3;

if(P1!

=0xff)//长按任意8音键退出播放

{

if(P1!

=0xff)

i=101;

}

Song();

TR0=0;

定时器初始化子程序

voidInit_Timer0(void)

TMOD|=0x01;

//使用模式1,16位定时器,使用"

|"

符号可以在使用多个定时器时不受影响

EA=1;

//总中断打开

ET0=1;

//定时器中断打开

定时器中断子程序

voidTimer0_isr(void)interrupt1

{TH0=High;

SPK=!

SPK;

3系统调试与测试结果分析

3.1使用的仪器仪表

 单片机仿真器  KEILC

蜂鸣器LS1

3.2系统调试

根据系统设计方案,本系统的调试共分为三大部分:

硬件调试,软件调试和软硬件联调。

由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:

中心控制模块的调试,音乐播放模块的调试,按键控制模块的调试等,最后将各模块组合后进行整体测试。

3.2.1硬件调试

硬件调试主要是针对单片机部分进行的调试。

在上电之前,先确保电路中不存在断路或短路情况。

这一工作时整个调试工作的第一步,也是非常重要的一个步骤。

在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在短路或断路的情况的任务。

注意焊点之前,确保焊点没有短接在一起,同事注意焊点的美观,确保没有开路以及短路的现象出现。

在确保硬件电路正常且无异常情况(断路或短路)的情况下方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要是检测单片机控制部分、和音频转换电路硬件调试。

1、数码管LED电路调试:

接通电源,随机按下按钮可以看到数码管显示数字。

2、键盘单片机控制部分调试:

上电后,随机按动键盘可以发现各个按键对应的音正确。

3.2.2软件调试

调试主要方法和技巧:

通常一个调试程序应该具备至少四种性能:

跟踪、断点、查看变量、更改数值。

整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序模块进行分别调试。

3.2.3硬件软件集合仿真图

3.3测试结果

根据仿真结果可知,本次课程设计能够准确并彻底的完成设计要求。

右侧数码管可以显示1、2、3、4、5、6、7、8八个数字,分别代表DO、RE、MI、FA、SO、LA、SI、DO八种音符。

以5.3为例具体进行分析:

当上电以后点击开始按键,一次按下1、2、3、4、5、6、7、8八个键。

会响起由低到高的八种声音。

按下播放键,会自动播放音乐。

参考文献

[1]单片机课程设计指导书皮大能北京理工大学出版社2010.7

[2]8051单片机实践与应用吴金戎清华大学出版社2003.8

[3]单片机技术基础教程与实践夏路易电子工业出版社 2008.1

[4]MCS-51单片机原理接口及应用王质朴北京理工大学出版社2009.11

[5]基于Proteus的单片机系统设计与仿真实例蒋辉平机械工业出版社

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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