简易电子琴的设计.docx
- 文档编号:11948120
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:17
- 大小:150.05KB
简易电子琴的设计.docx
《简易电子琴的设计.docx》由会员分享,可在线阅读,更多相关《简易电子琴的设计.docx(17页珍藏版)》请在冰豆网上搜索。
简易电子琴的设计
简易电子琴的设计
摘要
随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。
基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。
本设计关键是要实现一种由单片机控制的简单音乐发生器,它由16个音节组成的键盘,可以在键盘上进行演奏,音乐发生器会根据弹奏,通过扬声器将音乐播放出来。
本系统是由51系列单片机AT89S51,矩阵键盘、LED显示管、扬声器组成,完成显示输入信息、播放相应音符等基本功能。
关键词:
51单片机;矩阵键盘;LED显示管;扬声器
目录
1AT89S51芯片简介1
2设计方案2
2.1控制模块选择方案2
2.2按键选择方案2
3系统硬件设计及原理说明2
3.1系统组成及总体框图2
3.2系统工作原理3
3.3系统硬件总体设计4
3.4显示模块5
3.5扬声器模块5
3.6按键模块5
4系统软件设计及原理说明6
4.1显示模块6
4.2按键模块7
5系统使用说明8
5.1系统安装及配置说明8
5.1.1系统运行环境8
5.1.2系统安装及配置8
5.2系统操作说明8
6心得体会9
参考文献10
附录11
附录A11
附录B14
附录C15
1AT89S51芯片简介
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器5件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:
40个引脚(引脚图如图1-2所示),4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
2设计方案
2.1控制模块选择方案
由于AT89C51单片机性价比较高,并完全满足本设计作品智能化的要求,所以采用AT89C51单片机进行控制。
2.2按键选择方案
传统电子琴可以用键盘上的“1”到“A”键演奏从低SO到高DO等11音。
该设计有16个按钮矩阵,设计成16个音,比传统音阶范围大,弹奏效果好。
3系统硬件设计及原理说明
3.1系统组成及总体框图
该设计要实现一种由单片机控制的电子琴,具有4X4行列式键盘,并根据按键通过扬声器将音乐播放出来。
所以本系统由以51单片机为主控核心,和矩阵键盘、扬声器、LED显示管模块一起组合而成。
具体如图3.1:
图3.1系统总体框图
3.2系统工作原理
本系统扫描键盘矩阵、显示按键、扬声器发出对应音符。
4*4行列式键盘识别及显示原理如下:
组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。
目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。
编码键盘:
键盘本身带有实现接口主要功能所需的硬件电路。
不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。
所以,编码键盘接口简单、使用方便。
但由于硬件电路较复杂,因而价格较贵。
非编码键盘:
键盘只简单地提供按键开关的行列矩阵。
有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。
目前微机系统中,一般为了降低成本大多数采用非编码键盘。
键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。
(1)去抖动:
每个按键在按下或松开时,都会产生短时间的抖动。
抖动的持续时间与键的质量相关,一般为5—20mm。
所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。
去抖问题可通过软件延时或硬件电路解决。
(2)防串键:
防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。
常用的方法有双键锁定和N键轮回两种方法。
双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。
N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。
(3)被按键识别:
如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。
常用的方法有行扫描法和线反转法两种。
行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。
线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输
入/输出端口。
(4)键码产生:
为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。
总体电路具体原理如图3.2:
图3.2系统工作原理图
3.3系统硬件总体设计
本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。
硬件总体设计图如下:
图3.3系统硬件总体设计图
3.4显示模块
LED显示模块如图2-2所示,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。
矩阵扫描显示当前按键模块如图3.4:
图3.4LED显示模块
3.5扬声器模块
矩阵扫描扬声器发出对应音符模块如下:
图3.5扬声器模块
3.6按键模块
对键盘扫描电路的扫描方式有行扫描法和线反转法,在此次程序编写中,采用行扫描法,通过扫描口线电平信息给单片机,经处理程序,判断出是哪个按键按下,并送主程序调子程序以实现不同功能。
图3.6按键模块
4系统软件设计及原理说明
4.1显示模块
七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。
LED数码管的g-a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。
本系统按键显示模块软件流程图如图4.1:
图4.1显示模块流程图
4.2按键模块
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片
机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式:
N=fi÷2÷fr
上式中,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
本系统按键发出对应音符模块软件流程图如图4.2:
图4.2按键发音流程图
5系统使用说明
5.1系统安装及配置说明
5.1.1系统运行环境
WINDOWSXP,PROTEUS7.1SP2,Keiluv32.12
5.1.2系统安装及配置
安装Protues,AltiumDesigner和keiluvsision3。
5.2系统操作说明
(1)Keil下编译,产生目标HEX文件,Proteus下ProgrammeFiles选择产生的HEX文件,点击运行开始模拟。
(2)开启本系统,数码管显示“-”。
(3)按任意键盘,数码管显示所按下的键盘数,扬声器发出相应的音符。
(4)将程序烧写入开发板上的单片机内。
(5)按程序接好线路。
(6)按下任意键扬声器发生,数码管显示按键值。
6心得体会
单片机作为我们的主要专业课之一,虽然在开学初我对这门课并没有太大兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
在课堂上我们掌握的仅仅是理论上的知识,但此次的课程设计锻炼了我们的实践能力,让我们学会如何把学到的专业理论知识运用到实践中去。
整个设计过程中,不仅巩固了书本知识,更学到了许多平时不会去注意的知识,这是在设计过程中遇到问题而查阅大量资料去解决才能获得的。
同时,课程设计还锻炼了我们的思维能力。
要做好一个设计,必须在设计之前先根据要设计的内容选取合适的单片机和设计方案,对所用单片机的内部结构有一个系统的了解;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,一次就想设计好是不现实的,必须经过反复的改进和完善,不仅能实现应有的功能,并能完整的展现出自己的思路;碰到问题时不要着急,这正是一个学习分析的好机会,解决过后之后就不会困于相同的问题了。
另外,同学间的交流也能让我们吸收不同的思维,互帮互助。
还要感谢指导老师在我们遇到困难时给予我们的建议与帮助。
课程设计虽然结束了,但是从中学到的知识却会让我受益终生。
发现、提出、分析、解决问题和实践能力的提高都将益于今后的学习工作。
参考文献
[1]李鸿等.单片机原理及应用[M].湖南大学出版社,2005.
[2]何立民.单片机高级教程--应用与设计[M].北京航空航天大学出版社,2000,8.
[3]戴佳.51单片机C语言应用程序设计实例精讲[M].北京:
电子工业出版社,2006.
[4]于京.51系列单片机C程序设计与应用案例[M].北京:
中国电力出版社,2006.
[5]孙育才.ATMEL新型AT89S52系列单片机及其应用[M].北京:
清华大学出版社,2005.
[6]李华.MCS-51系列单片机实用接口技术[M].北京:
北京航空航天大学出版社,2000.
附录A程序代码
//按键读取程序
#ifndef__keyscan_h_
#define__keyscan_h_
#defineucharunsignedchar
#defineuintunsignedint
externvoiddelay1(void);
ucharkeyscan(void)
{
ucharscancode,tmpcode;
P1=0xf0;
if((P1&0xf0)!
=0xf0)
{
delay1();
if((P1&0xf0)!
=0xf0)
{
scancode=0xfe;
while((scancode&0x10)!
=0)
{
P1=scancode;
if((P1&0xf0)!
=0xf0)
{
tmpcode=P1&scancode;
return(tmpcode);
}
elsescancode=(scancode<<1)|0x01;
}
}
}
return(0);
}
#endif
//数码管显示程序
#ifndef__Digitaltube_h_
#define__Digitaltube_h_
ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x00,0x90}
sbitwela0=P2^0;
sbitwela1=P2^1;
voiddisplay(ucharnumdis)
{
ucharshi,ge;
shi=numdis/10;
ge=numdis%10;
P0=table[shi];
wela0=0;
P0=0xff;
wela0=1;
P0=table[ge];
wela1=0;
P0=0xff;
wela1=1;
}
//主干程序
#include
#include
#include
sbitbeep=P2^4;
ucharkey;
uchark;
uintcodefre[]={64021,64103,64260,64400,64524,64580,64684,64777,
64820,64898,64968,65030,65058,65110,65157,65178};
voiddelay1()
{
uchari;
for(i=110;i>0;i--);
}
voidtime0()interrupt1
{
TH0=fre[k]/256;
TL0=fre[k]%256;
beep=~beep;
}
voidmain(void)
{
TMOD=1;
ET0=1;
EA=1;
while(!
key)
{
P0=0xbf;
wela0=1;
wela1=1;
key=keyscan();
}
while
(1)
{
key=keyscan();
if(key)
{
TR0=1;
switch(key)
{
case0xee:
k=0;break;
case0xde:
k=1;break;
case0xbe:
k=2;break;
case0x7e:
k=3;break;
case0xed:
k=4;break;
case0xdd:
k=5;break;
case0xbd:
k=6;break;
case0x7d:
k=7;break;
case0xeb:
k=8;break;
case0xdb:
k=9;break;
case0xbb:
k=10;break;
case0x7b:
k=11;break;
case0xe7:
k=12;break;
case0xd7:
k=13;break;
case0xb7:
k=14;break;
case0x77:
k=15;break;
default:
break;
}}
elseif(!
key)
{
display(k);
TR0=0;
beep=1;
}
}}
附录B原理图
附录CPCB图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 电子琴 设计