南京工程学院单片机课程设计_电子琴

  • 格式:doc
  • 大小:108.69 KB
  • 文档页数:17

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

目录 (1)

一、设计任务(要求) (2)

二、总体方案 (2)

三、原理框图 (3)

四、系统模块详细设计与调试 (4)

(一)键盘扫描模块 (4)

(二)数码管显示模块 (4)

(三)音调编码读取模块 (4)

(四)定时器中断模块 (4)

五、设计总结 (5)

六、参考文献 (6)

七、附件材料 (6)

一、设计任务(要求)

利用51系列单片机、按键、扬声器等器件,设计一个电子琴。

具体功能要求如下:

设计键盘电路,使其具有数字键1、2、3、4、5、6、7、8、9作为电子琴按键,演示键DEMO,其中1~7号键按下后即发出相应的音调。8号键按下后依次发出“1、2、3、4、5、6、7” 音调,9号键按下后依次发出“7、6、5、4、3、2、1” 音调,按下DEMO键,自动演示一首歌曲,用单片机某一接口发出音频脉冲,驱动扬声器发音。

利用定时器定时,可以发出不同频率的脉冲,不同频率的脉冲经扬声器驱动电路放大滤波后,就会发出不同的音调.定时器按设置的定时参数产生中断,一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不同频率的脉冲.按键一次,发50个脉冲.发完后继续检测键盘,如果键还按下,继续发音,发脉冲个数的多少可以决定节拍的长短。

二、总体方案

按照设计任务(要求),电子琴的主要涉及以下几个模块:

1、定时器控制不同频率发音;

2、矩阵键盘的扫描;

3、除此以外,我还在本次设计中加入了数码管显示,分别显示当前弹奏的

音符。于是又多了数码管显示模块;

实现方案:

通过不断地键盘进行扫描。当有按键按下时,执行该按键对应的程序,包括:发出相应的音符或音乐、数码管显示当前音符。当按键松开,将音符停止发出,如果是音乐,将进行演奏。

其中,不同的音符,采用定时器中断,从而发出不同的音符。即改变不同的定时器初始值。

对于音乐的音符,采用自编的特殊编码,以便程序的调用。本程序的设计采用了三位数编码,即:利用三位数表示一个音符。第一位由1-7组成,表示音符1-7;第二位由1-4组成,表示音阶的低、中、高和超高;第三位由1-9组成,表示该音阶的拍数,计算方式是1/2拍⨯数字。

例如:6,2,2……表示一拍中音6;4,3,1……表示半拍高音4。

a b c则,调用的频率参数为

关于对音符编码的调用,设一个音的编码为,,

⨯+,该参数用于修改定时器初始值;调用的时间参数为c,该参数用于修b a

7

改定时器执行时间。

三、原理框图

四、系统模块详细设计与调试

(一)键盘扫描模块

1、矩阵键盘工作原理

矩阵键盘的按键设在行、列线的交点上。行线通过上拉电阻接到+5V电源上。无键盘按下时,行线出于高电平状态;当有按键按下时,行线电平状态将由此按键相连接的列线的电平决定。

2、设计思路

通过扫描法识别键盘。即,先将某一列线置为低电平,其余各列线置为高电平,检查各行线电平的变化,如果某行线电平的为低电平,就可以确立此行此列交叉点处的按键被按下。

(二)数码管显示模块

1、硬件电路

数码管的显示,是通过74LS374锁存器来实现的。段选和位选分别是P3.5和P3.4。数据的输出为P0口。(详见附录一:硬件原理图)

2、设计思路

通过分别控制段选、位选锁存器的导通(低电平)、锁存信号(高电平)。

从而分时给数码管写入数据并锁存。

(三)音调编码读取模块

1、编码规则

本程序的设计采用了三位数编码,即:利用三位数表示一个音符。第一位由1-7组成,表示音符1-7;第二位由1-4组成,表示音阶的低、中、高和超高;第三位由1-9组成,表示该音阶的拍数,计算方式是1/2拍 数字。

例如:6,2,2……表示一拍中音6;4,3,1……表示半拍高音4。

2、读取方式

首先读取前两位数,以确定音调。然后读取最后一位,以确定拍数(时间)。然后依次递增3位。

音调确定后,通过查表获取定时器初始值,并调用定时器中断。拍数,即定时器中断执行的循环次数,以此来控制声音的时间。

(四)定时器中断模块

1、定时器的调用

本程序的设计采用定时器中断的方法来使蜂鸣器发出不同的频率声音,从而实现电子琴的音调。定时器的初始值不同,产生的频率也就不同。

定时器的调用是循环不断的,它的循环包括两类:一类是一个音节频率的循环,从而控制一个拍数的长短;另一类是下一个音节的到来,重新写入初值,直至结束标志位的到来,即0,0,0。

如果再调用程序中,再加入一个整体循环,则可以反复执行音乐播放。

即,检测到结束标志后,重新播放音乐而不间断。(本程序,没有使用该循环。)

2、初始值的生成与写入

定时器的初始值,是通过网络搜索得到的,不同的初值代表着会发出不同频率的音调。将它制成表,以便程序读取。

五、设计总结

我课程设计的题目是电子琴的设计。主要用的了之前所学的定时器中断、矩阵键盘扫描、数码管显示、C51编程等相关的单片机及接口技术的知识和理论。在课设中,也充分的做到了学以致用,把之前所学的知识应用的实际当中去。同时,也通过实践来检验之前所学的理论,发现了很多对理论知识的误解。这些,也都在实践中得到了很好的弥补。

在设计程序的初始阶段,我本打算一次性完成任务,但每次尝试都以失败告终。后来,我学会了分模块处理问题,逐一突破。这也是我在此次课程设计中的一大收获。让我充分懂得了,如何去处理一个较大的工程项目。

首先,我先实现了使单片机发出不同音调的基本功能,然后开始考虑键盘扫描。但是在调试时,总是出现BUG。在部分按键按下后,蜂鸣器会一直响,无法终止。这个问题一直困扰了我很久,尝试了很多方法都没能成功,终于在一天早上醒来后的第一次尝试,终于成功了,即在键盘扫描中加入一个程序,当音乐执行到结束标志后,此时若没有键盘被按下时,令蜂鸣器停止鸣叫不做任何响应,直至有键盘再被按下。

最后,我将两个模块进行结合,于是便成功的写出了电子琴的程序。而且成功进行了调试。

第一天验收,老师让我再加入数码管显示功能。于是,我又写了数码管显示模块的程序。数码管显示是通过锁存器来完成的。当我程序写完之后进行调试,数码管没有进行显示,多次调试发现:只有长时间按下按键才会有相应字符显示。于是我尝试把段选信号的选通与锁存指令和P0数据写在一起,这样就可以立即显示当前字符了。

第二天验收,顺利通过。事后,我又采用了外部中断的方法进行电子琴的模式切换等其他功能,从而不断地丰富了电子琴的功能。同时,也对程序进行了整理,使程序更加规、美观、易读。

总而言之,此次课设,我学的东西很多。也深深地懂得理论不进行实际,是不行的。只有通过实践才能检验自己对理论知识的理解和掌握。在写程序的时候,一定要有良好的习惯,格式要有自己的排版方式,不能混乱。这样易于检查和调整。

通过这次课设。大大提高了我对单片机以及编程的能力与信心。我相信,以后通过自己的不断深入的学习,我一定能够熟练的运用单片机到实际当中去。