超级电子琴.docx
《超级电子琴.docx》由会员分享,可在线阅读,更多相关《超级电子琴.docx(17页珍藏版)》请在冰豆网上搜索。
超级电子琴
课程设计工作内容与基本要求
1.设计任务
电子琴是利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音,且结果用LCD屏显示出来。
2.设计要求
2.1系统硬件电路设计
根据该系统设计的功能要求选择所用元器件,设计硬件电路。
要求用Proteus绘制整个系统电路原理图。
2.2软件设计
根据该系统要求的功能进行软件设计,绘制整个系统的软件流程图;根据流程图编写程序并汇编调试通过;列出软件清单,软件清单要求逐条加以注释。
2.3Proteus仿真
用Proteus对系统进行仿真并进行软硬件调试。
2.4编写设计说明书
内容包括任务书、设计方案分析、硬件部分设计、软件部分设计、调试结果整理分析、设计调试的心得体会等,字数不少于4000字;硬件部分设计要绘制整个系统电路原理图,对各部分电路设计原理做出说明;软件设计部分要绘制整个系统及各部分的软件流程图,列出程序清单,逐条加以注释,并在各功能块前加程序功能注释。
4.工作计划
序号
设计内容
所用时间
1
布置任务及调研
2天
3
制作与调试
4天
4
撰写设计报告书
1天
合计
7天
5.主要参考资料
单片机课程设计指导书皮大能北京理工大学出版社2010.7
8051单片机实践与应用吴金戎清华大学出版社2003.8
单片机技术基础教程与实践夏路易电子工业出版社 2008.1
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
#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);
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;
EN=0;
lcd_wr(comm,0x38);
delayms
(2);
lcd_wr(comm,0x0c);
delayms
(1);
lcd_wr(comm,0x06);
delayms
(1);
lcd_wr(comm,0x01);
}
/*------------------------------------------------
节拍延时函数
各调1/4节拍时间:
调4/4125ms
调2/4250ms
调3/4187ms
------------------------------------------------*/
voiddelayjie(uchart)
{
uchari;
for(i=0;idelayms(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;break;
case0xfb:
num=3;break;
case0xf7:
num=4;break;
case0xef:
num=5;break;
case0xdf:
num=6;break;
case0xbf:
num=7;break;
case0x7f:
num=8;break;
default:
num=0;break;
}
lcd_string(0x40+7,1,YINFU[num]);
if(num==0)
{
TR0=0;
SPK=0;//在未按键时,喇叭低电平,防止长期高电平损坏喇叭
}
else
{
High=freq[num-1][1];
Low=freq[num-1][0];
TR0=1;
}
if(tab==0)
{
delayms(10);
if(tab==0)
{
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音键退出播放
{
delayms(10);
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;
TL0=Low;
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的单片机系统设计与仿真实例蒋辉平机械工业出版社
2009.7