简易电子琴.docx
《简易电子琴.docx》由会员分享,可在线阅读,更多相关《简易电子琴.docx(15页珍藏版)》请在冰豆网上搜索。
简易电子琴
《单片机与接口技术》
课程设计报告
课题名称
简易电子琴
学院
2222
专业
11111
班级
…..
姓名
…
学号
2222222
时间
22222
1
目录
概述
1课程设计概述…………………………………………3
2课题设计的任务与主要内容…………………………3.
3单片机89C51的简介………………………………….3
4系统组成……………………………………………….5
4.1系统工程原理………………………………...5
5系统硬件设计…………………………………………6
5.1系统硬件总体设计………………………….6
5.2子系统1……………………………………..6
5.3子系统2………………………………………7
6系统软件设计…………………………………………8
6.1系统软件总体设计………………………….8..
6.2子系统1……………………………………8
6.3子系统2………………………………….9
6.4系统操作说明………………………………10
程序……………………………………………..11
7参考文献…………………………………………….12
2
1摘要课程设计概述
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
随着社会的发展进步,人们的生活水平也逐步提高,音乐已经成为了我们生活中很重要的一部分,在工作和学习之余,欣赏音乐不仅使身心得到放松,同时
也提高人们的精神品质和个人素养。
当代,爱好音乐的年轻人越来越多,也有不
少人自己练习弹奏乐器,作为业余爱好和一种放松的手段,鉴于一些乐器学习难度大需花费太多精力,且其价格太过于高昂,使得一部分有这种想法的人不得不放弃这种想法,而电子琴又是一种新型的键盘乐器,它是现代电子科技与音乐结合的产物,价格相对便宜,能够满足一般爱好者的需求,因此,在现代音乐中扮演着重要的角色。
故简易电子琴的研制具有一定的社会意义。
2课题设计的任务与主要内容
本文的主要内容是用AT89C51单片机为核心控制元件,设计一个简单的电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
定时器按设置的定时参数产生中断,由于定时参数不同,就会发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同音调。
本系统设计制作一个可演奏的电子琴。
综合应用了项设计。
(1)利用所给键盘的键能够在扬声器发出8个不同的音符。
(2)不同频率音符播放。
可以通过按键控制16种发音。
(3)使用LED数码管显示8个不同的音符。
3单片机89C51的简介
AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价
比的解决方案。
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随
3
机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
该系列单片机引脚与封装如下图所示:
图1
主要引脚功能:
1、RST(9):
复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;
2、XTAL1(19):
反向振荡器放大器的输入及内部时钟工作电路的输入;
3、XTAL2(18):
来自反向振荡器的输出;
4..P1口(1-8):
P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓
冲器能接收和输出4个TTL门电流;
5.
/
:
当
保持低电平时,单片机只访问外部程序存储器。
为高电平时,单片机只访问内部程序存储器。
4
4系统组成
本系统只要以51单片机为主控核心,与矩阵键盘、扬声器、LED显示管模块一起组合而成。
具体如下:
图2
4.1系统工作原理
本系统扫描键盘矩阵、显示按键、扬声器发出对应音符。
4X4行列式键盘识别及显示原理如下:
组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。
目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。
编码键盘:
键盘本身带有实现接口主要功能所需的硬件电路。
不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。
所以,编码键盘接口简单、使用方便。
但由于硬件电路较复杂,因而价格较贵。
非编码键盘:
键盘只简单地提供按键开关的行列矩阵。
有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。
目前微机系统中,一般为了降低成本大多数采用非编码键盘。
键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。
(1)去抖动:
每个按键在按下或松开时,都会产生短时间的抖动。
抖动的持续时间与键的质量相关,一般为5—20mm。
所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。
去抖问
题可通过软件延时或硬件电路解决。
(2)防串键:
防串键是为了解决多个键同时按下或者前一按键没有释放又
有新的按键按下时产生的问题。
常用的方法有双键锁定和N键轮回两种方法。
双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。
N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。
(3)被按键识别:
如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方
5
法完成。
常用的方法有行扫描法和线反转法两种。
行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。
线反转法的基本
思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。
(4)键码产生:
为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。
用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。
总体电路具体原理如下:
图3
5系统硬件设计
5.1系统硬件总体设计
6
本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。
硬件总体设计图如下:
图4
5.2子系统(模块)一
LED显示模块如图2-2所示,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。
矩阵扫描显示当前按键模块如下:
图5
5.3子系统(模块)二
矩阵扫描扬声器发出对应音符模块如下:
7
图5
6系统软件设计
6.1系统软件总体设计
本系统的软件流程图如下:
图3
8
6.2子系统一
七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。
LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。
本系统按键显示模块软件流成图
图6
6.3子系统二
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式(如式2-1所示)是:
N=
9
fi÷2÷fr 2-1
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
T=65536-N=65536
-fi÷2÷fr
例如:
设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1046=65059
本系统按键发出对应音符模块软件流程图如下:
图7
6.4系统操作说明
(1)Keil下编译,产生目标HEX文件,Proteus下ProgrammeFiles选择产生的HEX文件,点击运行开始模拟。
10
(2)开启本系统,数码管显示“-”。
(3)按任意键盘,数码管显示所按下的键盘数,扬声器发出相应的音符。
本系统总体代码如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_Table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};
uintcodeTone_Delay_Table[]=
{64021,64103,64260,64400,64524,64580,64684,64777,
64820,64898,64968,65030,65058,65110,65157,65178};
sbitBEEP=P3^0;
ucharKeyNo;
voidDelayMS(ucharx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
voidKeys_Scan()
{
ucharTmp,k;
P1=0x0F;
DelayMS
(2);
Tmp=P1^0x0F;
switch(Tmp)
{
case1:
k=0;break;
case2:
k=1;break;
case4:
k=2;break;
case8:
k=3;break;
default:
return;
}
P1=0xF0;
DelayMS
(2);
Tmp=(P1>>4)^0x0F;
switch(Tmp)
{
case1:
k+=0;break;
case2:
k+=4;break;
case4:
k+=8;break;
case8:
k+=12;break;
default:
return;
}
KeyNo=k;
}
voidplay_Tone()interrupt1
{
TH0=Tone_Delay_Table[KeyNo]/256;
TL0=Tone_Delay_Table[KeyNo]%256;
BEEP=~BEEP;
}
voidmain()
{
P0=0xBF;
TMOD=0x01;
IE=0x82;
while
(1)
{
P1=0xF0;
if(P1!
=0xF0)
{
Keys_Scan();
P0=DSY_Table[KeyNo];
TR0=1;
}
else
{
TR0=0;
}
DelayMS
(2);
}
}
七、参考文献
[1]李群芳,肖看,《单片机原理、接口及应用》,北京,清华大学出版社,2005年
[2]戴佳,戴卫恒,《51单片机C语言应用程序设计实例精讲》,电子工业出版社,2005年
[3]刘海成,《单片机及应用系统设计原理与实践》,北京,北京航空航天大学出版社,2009年
[4]楼然苗,李光飞,《单片机课程设计指导》,北京,北京航空航天大学出版社,2007年
[5]吴金戌,沈庆阳,郭庭吉,《8051单片机实践与应用》,北京,清华大学出版社,2002年
[6]吴国经,《单片机应用技术》,北京,中国电力出版社,2004.年
[7]高天康《音乐知识词典》甘肃人民出版社2003.08
12