学年论文基于51单片机电子设计制作屏幕式声光电子琴学年论文.docx
《学年论文基于51单片机电子设计制作屏幕式声光电子琴学年论文.docx》由会员分享,可在线阅读,更多相关《学年论文基于51单片机电子设计制作屏幕式声光电子琴学年论文.docx(20页珍藏版)》请在冰豆网上搜索。
学年论文基于51单片机电子设计制作屏幕式声光电子琴学年论文
泉州师范学院
学年论文
题目:
基于51单片机电子设计制作-屏幕式声光电子琴
学院:
物理与信息工程学院
专业班级:
10电子信息与科学技术2班
学号:
100303099
姓名:
涂锐烽
指导老师:
吴志伟
完成日期:
2013年8月30号
1
目录
摘要………………………………………………………………………..
Abstract…………………………………………………………………….
1.引言…………………………………………………………………
1.1设计的目的……………………………………………………...
1.2设计的内容……………………………………………………...
2.系统硬件设计………………………………………………………
2.1原理图……………………………………………………………….
2.2系统板硬件连线…………………………………………………….
2.3主要芯片简介…………………………………………………..
2.4LCD显示器……………………………………………………
2.5三极管放大电路……………………………………………….
2.6时钟电路………………………………………………………..
2.7复位电路………………………………………………………
2.8键盘方案………………………………………………………
3.系统软件设计……………………………………………………..
3.1理论基础……………………………………………………………
3.2系统流程图…………………………………………………………
4.设计结果及分析…………………………………………………..
5.总结……………………………………………………………….
参考文献…………………………………………………………………
附录主要程序代码…………………………………………………….
2
摘要
作为电气专业的学生,掌握电子琴的制作是很好检验我们所学知识应用。
它所包含的知识基本上覆盖我们的模拟电子技术基础、数字电子技术基础、单片机基础等技术课程的重要章节。
用电子琴可以演奏出各种美妙的音乐,而音乐是由音符组成,不同的音符又是由相应频率的振动产生,而用单片机来产生不同的频率非常方便,可以利用单片机的定时/计数器T0来产生这样方波频率信号.子琴的设计以89C52单片机作为系统的核心控制部分,通过制作硬件电路和软件的设计编写,然后进行软硬件的调试运行,最终达到设计电路的乐器演奏、点歌、存储及显示功能。
可以用它来弹奏和播放乐曲。
特点是设计思路简单、清晰,成本低。
关键词:
单片机;电子琴;按键;扬声器
Abstract:
Asstudentsofelectricalengineering,theproductionofmasterkeyboardisagoodtestourknowledgeapplications.TheknowledgeitcontainsbasicallycoveringourAnalogElectronics,FundamentalsofDigitalElectronics,microcontroller-basedtechnologiessuchastheimportantsectionsofthecourse.Keyboardcanplayavarietyofwonderfulmusic,andthemusiciscomposedbynotes,thedifferentnotesturn,thecorrespondingfrequencyvibrationgeneratedwiththemicrocontrollertogeneratedifferentfrequencyisveryconvenient,theuseofsingle-chiptimer/counterT0tothissquarewavefrequencysignaldesignofthekeyboard89C52microcontrollerasthecoreofthesystemcontrolsection,preparedbyproductionhardwareandsoftwaredesign,andhardwareandsoftwaredebuggingandrunning,andultimatelytodesignthecircuitofmusicalinstruments,song,storageanddisplaycapabilities.Youcanuseittoplayandplaymusic.Characteristicsarebysimple,cleardesignideas,lowcost.
Keywords:
single-chip;electronicorgan;button;speaker
3
引言
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可代替的一部分。
本文的主要内容是用STC89C52RC单片机为核心控制元件,设计一个电子琴。
以单片机作为核心,与按键,扬声器等模块组成核心主控制模块。
本文主要对使用单片机设计简单电子琴进行了分析,并介绍了基于单片机电子琴系统的硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
本文分别从原理图,主要芯片,各模块原理及程序调试来详细阐述。
一首音乐是许多不同的音阶组成的,而每一个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
1.1设计的目的
巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个简易的八音符电子琴的设计,进一步加深对单片机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤。
巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。
1.2设计的内容
1.通过八个按键,分别控制发出do,re,mi,fa,sao,la,xi,do八个音符。
2.显示屏上显示所按的键,如按下第一个键,屏幕上显示do,当选择播放歌曲时,显示歌词。
4
系统硬件设计
2.1原理图
图2-1
2.2系统板硬件连线
系统板硬件连线如图2-1所示,发生模块,及LCD显示模块连线如下
1.“单片机系统”的P1.0端口用导线连接到“音频放大模块”区域中的SPK端口上;
2.“单片机系统”的P2.0---P2.7端口用导线连接到“八个音符按键”区域;
3.“单片机系统”的P0.0---P0.7端口用八芯的排阻连接到液晶显示屏上。
2.3主要芯片简介
STC89C52RC芯片
STC89C52RC有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52RC可以按照常规方法进行编程,也可以在线编程。
其将通用的微
5
处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
▲芯片封装与引脚功能
2-3STC89C52RC引脚图
▲主要功能特性:
·兼容MCS51指令系统·8k可反复擦写(>1000次)FlashROM
·32个双向I/O口·256x8bit内部RAM
·3个16位可编程定时/计数器中断·时钟频率0-24MHz
·2个串行中断·可编程UART串行通道
·2个外部中断源·共6个中断源
·2个读写中断口线·3级加密位
·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能
2.4LCD显示器
6
图2.4LCD显示器引脚图
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
引脚1:
VSS,一般接地;
引脚2:
VDD,接电源(+5V);
引脚3:
V0,液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
引脚4:
RS,RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
引脚5:
R/W,R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
引脚6:
E,E(或EN)端为使能(enable)端,下降沿使能。
引脚7--10:
底4位三态,双向数据总线0--3位;
引脚11—14:
高4位三态,双向数据总线4—7位;
引脚15:
BLA,背光电源正极;
引脚16:
BLK,背光电源负极。
7
寄存器选择控制表:
RS
R/W
操作说明
0
0
写入指令寄存器(清除屏等)
0
1
读busyflag(DB7),以及读取位址计数器(DB0~DB6)值
1
0
写入数据寄存器(显示各字型等)
1
1
从数据寄存器读取数据
2.5三极管放大电路
图2--5放大电路输出原理图
此部分的放大电路简单容易实现。
可以采用两个大功率PNP型硅管8550,利用“分压偏置式工作点稳定直流通路”,达到了对静态工作点的稳定。
分压电阻分别选择10K。
蜂鸣器一端接+5V电压,一端接晶体管的发射极。
由P1.0输出预定的方波,加到晶体管进行放大,再输出到嗡宁器,很好的实现了频率、声音的转换。
2.6时钟电路
此系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
MCS-51内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C5和
8
C6构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12.0592MHz,电容应尽可能的选择陶瓷电容,电容值约为30μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
图2-6MSC-51片内振荡电路
2.7复位电路
MS-51的复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RESET通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路,如图7所示。
当时钟频率选用12MHz时,C取10μF,R2约为1KΩ,R4约为10KΩ。
图2-7为复位电路的原理图。
图2-7复位电路原理图6
9
2.8键盘方案
1键盘设计原理图
此系统琴键输入是通过独立式键盘来完成的。
由于8052单片机的八位I/O口足以能实现控制C调各音阶的输出,并且独立式键盘的编程容易易懂,结构简单,实现起来方便,而且每个按键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,所以采用独立式键盘。
P2.0~P2.7口分别对应琴键1~7输入,如下图所示。
图2-8-1键盘设计原理图
2.关于键盘的抖动问题的分析和解决
当用手按下一个键时,如图4所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。
这就是抖动。
抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。
很容易想到,抖动问题不解决就会引起对闭合键的识别。
10
用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。
图2-8-2键抖动信号波形
系统软件设计
3.1理论基础
软件的设计主要是对STC89C52RC单片机进行编程,屏幕式声光电子琴
的程序主要是对音符频率的转换,采用定时中断,延时等实现其设计指标,通过外中断T0控制音乐的播放。
首先建立音乐,把音乐的音符找出,建立各个音符的定时常数T值表,如表1所示。
编写程序时我们把T值表按顺序建立在“TABLE”。
每个发音符使用1个字节,字节的高4位(简谱码)代表音符的高低,低4位(节拍码)代表音符的节拍。
如果l拍为0.4s,1/4拍就是0.1s,只要设定延迟时间就可求得节拍的时间。
假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。
所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。
1/4拍的延时时间在此我们设为125ms,节拍码如表2所示。
音符节拍码编程时放在程序的最后面“SONGx”处。
T值表按顺序建立在“TABLE”如下:
table:
dw64260,64400,64524,64580
dw64684,64777,64820,64898
dw64968,65030,65058,65110
dw65157,65178,65217
11
3.2系统程序流程图
程序框图如图3。
图3程序框图
12
设计结果与分析
单片机的频率和声音输出的原理是,利用琴键控制定时器的开中断和闭中断,即实现发音和闭音。
在此期间再通过对定时器的定时时间进行控制来产生不同频率的方波,驱动功放发出不同音阶的声音。
把C调中相应琴键对应的音符变换为定常数,作为数据表格存放在存储器中。
由程序查表得到定时常数,用以控制定时器产生方波的频率。
当下一个琴键按下时,再查下此琴键所对应音符的定时常数。
依次进行下去,就可以演奏出自己所要的歌曲。
单片机以其体积小、可靠性高、控制功能强、使用方便、性能价格比高、容易产品化等特点
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能,体积小,价格低廉,稳定可靠,应用广泛的特点。
他的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
总结
经过两周努力,简易电子琴的设计基本上完成了。
在整个设计过程中,不像以前很多都只是差不多相当于一个焊接工。
从着手设计开始,到最终调试成功总共花了两周时间,从开始的选题,到查资料查看可行性,到最后成功无处不充满了我的期待。
1)这个设计的基本是学习C语言并加以应用,对于我来说,没有想到的是入手的速度比我的预料慢,在网上搜索大程序的基础上加以修改和编译,总体上所到了许多的时间,并动手绘制原理图,不着手制作硬件(电路板)。
2)通过这个程序设计让我更加了解了C语言,能更好的运用C语言了,对数字系统结构也有了更进一步的了解和认识,从中学习到很多的知识,对我以后的学习将有更大的帮助。
通过两周的课程设计,我对单片机原理及应用,C语言等系列知识都有了一定的了解。
通过这些我的硬件和软件开发能力都获得了提高。
首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。
基本掌握了Protel99SE原理图
13
的方法,并设计了一个单片机最小系统。
使用单片机技术开发页面的能力也有了很大提高。
在整个设计过程中,有很多人对任务的完成给予了重要的支持和帮助。
感谢老师给了我本次设计的机会并提供指导;感谢许多同学在我此课程设计遇到问题时给我的帮助使我能够顺利地进行设计的工作;论坛中有很多认识不认识的朋友也都为我的设计提出了很宝贵的建议,同样在这里感谢他们。
参考文献
[1]段晨东编著.单片机原理及接口技术.北京:
清华大学出版社,2008
[2]范风强编著.单片机语言C51应用实战集锦.北京:
电子工业出版社,2003
[3]陈家俊,郑滔编著.程序设计教程.北京:
机械工业出版社,2004
[4]陈明萤,8051单片机课程设计实训教材[M].北京:
清华大学出版社2003年9月.
[5]徐新艳,单片机原理、应用与实践[M].北京:
高等教育出版社
附录主要程序代码
#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineKeyPortP3
unsignedcharHigh,Low;//定时器预装值的高8位和低8位
longintnum1;
sbitSPK=P1^4;//定义喇叭接口
sbitlcdrs=P0^1;//数据命令端口
14
sbitlcdrw=P0^2;//读写端口.我们在这里只写/
sbitlcden=P0^3;//使能端口
ucharcodetable1[]="HAPPYBIRTHDAY";
ucharcodetable2[]="TOYOU";
voiddelay(uintz)
{
uintx,y;
for(x=0;xfor(y=0;y<110;y++);
}
voidwrite_com(ucharcom)
{
lcdrs=0;//写指令时RS=L
lcden=0;
P2=com;//给端口送指令
delay(5);//延时5MS
lcden=1;//使能端高电平有效
delay(5);
lcden=0;
}
voidwrite_date(uchardate)
{
lcdrs=1;//写数据时RS=L
lcden=0;
P2=date;//给端口送数据
delay(5);//延时5MS
15
lcden=1;//使能端高电平有效
delay(5);
lcden=0;
}
voidinit()
{
lcdrw=0;//写信号拉低
lcden=0;//使能端拉低
write_com(0x38);//开显示
write_com(0x0c);//开显示不显示光标
write_com(0x06);//每写一个地址和光标加一
write_com(0x01);//显示清零
write_com(0x80);//第一行的初始地址为0x80
for(num1=0;num1<16;num1++)//循环的数字要看上面的占多少个字符
{
write_date(table1[num1]);//多了和少了都不会对的。
delay(5);
}
write_com(0x80+0x40);//第二行初始地址为0x80+0x40
for(num1=0;num1<14;num1++)
{
write_date(table2[num1]);
delay(5);
}
}
16
unsignedcharcodefreq[][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
};
voidInit_Timer0(void);//定时器初始化
/*------------------------------------------------
主函数
------------------------------------------------*/
voidmain(void)
{unsignedcharnum;
SPK=0;
Init_Timer0();//初始化定时器0,
//在未按键时,喇叭低电平,防止长期高电平损坏喇叭
//段锁存置0电平,防止LED亮的时候数码管亮
init();
while
(1)
{
17
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;
}
if(num==0)
{
TR0=0;
SPK=0;//在未按键时,喇叭低电平,防止长期高电平损坏喇叭
}
else
{
High=freq[num-1][1];
Low=freq[num-1][0];
TR0=1;
}
delay(200);
write_com(0x18);
}
}
18
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
voidInit_Timer0(void)
{
TMOD|=0x01;//使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
EA=1;//总中断打开
ET0=1;//定时器中断打开
TR0=1;//定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
voidTimer0_isr(void)interrupt1
{
TH0=High;
TL0=Low;
SPK=!
SPK;
}
19