单片机课程设计---简易电子琴设计Word下载.doc
- 文档编号:6961374
- 上传时间:2023-05-07
- 格式:DOC
- 页数:22
- 大小:392.96KB
单片机课程设计---简易电子琴设计Word下载.doc
《单片机课程设计---简易电子琴设计Word下载.doc》由会员分享,可在线阅读,更多相关《单片机课程设计---简易电子琴设计Word下载.doc(22页珍藏版)》请在冰点文库上搜索。
按键三:
复位键)
AT89C51
中心控制
该系统通过电子琴按键随意键入所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。
通过这样可以不断的弹奏音乐。
4*4矩阵键盘
晶振产生频率
LED灯的显示
供电复位电路
扬声器,放大音乐
弹奏或播放音乐
图1硬件系统总体框图
2.2软件设计流程图
P1
图2软件设计流程图
2.3工作原理
打开电子琴电源开关后,电子琴默认为弹奏状态(录音LED灯亮表示按键弹奏录音,不亮则普通按键弹奏功能),弹奏/播放显示灯点亮。
此时可以进行弹奏音乐,按下矩阵键盘中的任意键,扬声器发相应的音调,数码管显示对应的数字。
按下播放按钮,电子琴处于自动播放状态,弹奏/播放显示灯不亮,就会播放刚才弹走过的音乐,并循环进行播放,如果按下录音按键,将录音灯灭掉,此时播放的音乐改变,播放电子琴内置的音乐,并显示相应音符,循环播放。
此时,如果按下复位键,数码管显示0,清楚录音,此时系统又处于弹奏状态。
本设计存储了二首音乐,可循环播放.(小星星和欢乐颂)
三、运行环境
3.1硬件环境
3.1.1总体设计软件模型
连线:
P3^7————蜂鸣器
P2^0————连接LED0(模式指示灯:
弹奏--亮,播放--不亮)
P2^1————连接LED1和独立开关(录音指示灯:
弹奏保存--亮,弹奏不保存--不亮)
P3^2————独立按键,外部中断控制复位键
P3^3————独立按键,外部中断播放/弹奏切换按键
P1————连接数码管显示
P0————连接矩阵键盘
此设计模块实现的功能有:
1.把不同的频率也就是节拍的声音输入到放大器,播放弹奏的声音;
2.在弹奏音乐的同时将音符显示于数码管;
3.弹奏音乐的时候要将音符输入到数码管;
4.播放内置储存的音乐时要显示此时播放的音乐音符;
5.具备存储在播放所弹奏的音乐的功能;
6.复位功能,模式复位、录音清楚,数码管显示为0。
3.1.2AT89C51单片机相关介绍
1)AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C51它是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图3.2所示。
图3AT89C51引脚分布图
主要引脚功能:
1、RST(9):
复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;
2、XTAL1(19):
反向振荡器放大器的输入及内部时钟工作电路的输入;
3、XTAL2(18):
来自反向振荡器的输出;
4、P1口(1-8):
P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流;
5、/:
当保持低电平时,单片机只访问外部程序存储器。
为高电平时,单片机只访问内部程序存储器。
2)芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM、定时器、计数器、串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
3.1.3矩阵式键盘的结构与工作原理
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,本系统中的矩阵键盘中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
图4矩阵式键盘
3.1.4按键显示模块
1)数码管的分类
本设计用的是七段码。
可显示0-F。
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
1.共阳数码管:
是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
2.共阴数码管:
在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
2)数码管的驱动方式
数码管的驱动方式分为:
静态式和动态式两类。
1.静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
优点是:
编程简单,显示亮度高,缺点是占用I/O端口多。
2.动态显示驱动:
动态驱动是将所有数码管的8个显示笔划"
a,b,c,d,e,f,g,dp"
的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
显示模块如图所示。
图5显示模块
3.1.5功能显示灯模块
当按下弹奏/播放功能键时,LED0灯亮(P2^0)表示弹奏模式,再次按下LED0熄灭表示播放模式;
当独立开关控制LED1亮时表示弹奏保存录音或者播放录音歌曲,不亮时则表示弹奏不会保存录音或者播放内置音乐。
图6功能显示灯模块
3.1.6音乐播放装置
本次设计很简陋,没有MP3那样优美的音乐,但此次设计分成“音调”和“节拍”两部分,听起来还是不错的。
音调:
表示一个音符唱多高的频率
节拍:
表示一个音符唱多长的时间。
由于本课程设计是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。
因此,我们只需弄清楚音乐中的音符和对应的频率,利用单片机的定时/计数器来产生方波频率信号即可。
要产生相应的音频脉冲,只需要计算出某音频的周期,再除以2。
利用计数器计时半周期,计满时使P2.0反向,然后重复计时再反向。
本例中,单片机工作在12MHz时钟,使用定时器/计数器T0,工作模式为1,改变计数初值TH0、TL0就可产生不同频率的脉冲信号。
例如低3MI音,频率为330Hz,其周期T=1/f=1/330=3030us,计数值N=3030/2=1515,所以每计数1515次P2.0反向。
计数初值T=65536-N=64021。
C调的各音符频率与计数值T的对照表如下图所示。
表1C调各音符频率与计数值T对照表
音符
频率(HZ)
简谱码(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63731
中5SO
784
64898
低2RE
294
63853
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
370
64185
高1DO
1046
65058
低5SO
392
64260
1109
65085
415
64331
高2RE
1175
65110
低6LA
440
64400
1245
65134
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
1480
65198
554
64633
高5SO
1568
65217
中2RE
587
64684
1661
65235
622
64732
高6LA
1760
65252
中3M
659
64777
1865
65268
中4FA
698
64820
高7SI
1967
65283
3.1.7振荡电路
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部震荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
晶振通常选用6MHz、12MHz或者24MHz。
本设计中采用的是12MHz。
电容器C1、C2起稳定振荡频率、快速起振的作用,电容值一般5~30pF。
内部振荡方式所得的时钟信号比较稳定,电路中使用较多。
振荡方式如下图:
图7振荡电路
3.1.8控制按钮电路
控制按钮,控制是弹奏还是演唱(P3.3)以及复位功能(P3.2)
图8控制按钮电路
3.1.9扬声器电路
图9扬声器电路
3.2软件环境
3.2.1I/O并行口直接驱动LED显示
对应键值的显示:
表2字形码表及对应的音符
0x3f
8
0x7f
1
0x06
9
0x6f
2
0x5b
A
0x77
3
0x4f
中1DO
B
0x7c
4
0x66
C
0x39
5
0x6d
D
0x5e
6
0x7d
E
0x79
7
0x07
F
0x71
在本设计中,数码管的显示通过
P1=DSY_CODE[x]
这句语言来查表并输出,实现音符的显示。
图10LED显示
3.2.2音乐播放设计
在音乐播放程序中用到了两个定时/计数器。
其中T0用来产生音调,播放弹奏时的按键音调声音,T1用来播放音乐。
弹奏时根据不同的键值,调用不同的音符表中的值,并赋值给定时器以便产生不同的声音。
下图为演奏发声的流程图:
图11演奏发声流程图
四、开发工具和编程语言
4.1开发工具
4.1.1Proteus软件
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。
Proteus软件具有其它EDA工具软件(例:
multisim)的功能。
这些功能是:
1.原理布图
2.PCB自动或人工布线
3.SPICE电路仿真
革命性的特点:
1.互动的电路仿真
用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
2.仿真处理器及其外围电路
可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。
4.1.2Keil软件
1)系统概述
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil的优势。
下面详细介绍KeilC51开发系统各部分功能和使用。
2)KeilC51单片机软件开发系统的整体结构
C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
使用独立的Keil仿真器时,注意事项:
*仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。
*仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
*仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;
但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。
3)优点
1.KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
2.与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
五、详细设计
5.1矩阵式键盘的按键识别方法
矩阵扫描法:
行扫描法,是一种最常用的按键识别方法,介绍过程如下。
1、判断键盘中有无键按下。
将全部行线置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
2、判断闭合键所在的位置。
在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
相关代码:
P0=0xff;
Line=1;
Mask=0x01;
for(i=0;
i<
4;
i++)
{
Col=0;
P0=~Mask;
ScanCode=P0&
0xf0;
if(ScanCode!
=0xf0)delay();
switch(ScanCode)
{
case0xe0:
Col=1;
break;
case0xd0:
Col=2;
case0xb0:
Col=3;
case0x70:
Col=4;
default:
Col=0;
}
if(Col>
0)
{
num=(Line-1)*4+Col;
if(SAVE==0)//保存,灯亮
{
save[a]=num;
a++;
}
if(num==0)
{
TR0=0;
SPK=1;
//在未按键时,防止长期高电平损坏喇叭
}
else
P1=CharCode[num-1];
High=tab[num-1][0];
Low=tab[num-1][1];
TR0=1;
while
(1)
{
ScanCode=P0&
if(ScanCode==0xf0)
{
TR0=0;
SPK=1;
break;
}
}
}
}
Mask<
<
=1;
Line++;
}
5.2键盘接口必须具有的4个基本功能
(1)去抖动:
每个按键在按下或松开时,都会产生短时间的抖动。
抖动的持续时间与键的质量相关,一般为5—20mm。
所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。
(2)被按键识别:
如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。
(3)键码产生:
为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。
如下为键盘编码表:
unsignedcharcodetab[][2]=
{
0x00,0x00,
0xf8,0x8c,
0xf9,0x5b,
0xfa,0x15,
0xfa,0x67,
0xfb,0x04,
0xfb,0x90,
0xfc,0x0c,
0xfc,0x44,
0xfc,0xac,
0xfd,0x09,
0xfd,0x34,
0xfd,0x82,
0xfd,0xc8,
0xfe,0x06,
0xfe,0x22,
0xfe,0x56,
0xfe,0x85,
0xfe,0x9a,
0xfe,0xc1,
0xfe,0xe4,
0xff,0x03
};
这是个二维数组,第一列是高位(THx),第二列是地位(TLx),一共有16行,第一行对应休止符。
用AT89C51的并行口P0接4×
4矩阵键盘,以P0.0-P0.3作输入线,以P0.4-P0.7作输出线;
(4)在数码管上显示每个按键的“0-F”序号。
5.3数码管的相关代码
unsignedcharcode CharCode[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
5.4C调各音符频率的相关代码
将数值转换为16进制的数,分成高八位和低八位,我们要为这个音符建立一个表格,单片机通过查表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 简易 电子琴 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)