基于电子琴毕业设计毕业设计
1 毕 业 设 计 姓 姓 名 学 学 号 院 院 系 机电工程系 专 专 业 2014 年 11 月 12 日
1 毕 业 设 计......................................................................................................................................1 前 言..................................................................................................................................................2 1 方案论证......................................................................................................................................2 1.1 控制模块选择方案...........................................................................................................2 1.2 按键选择方案...................................................................................................................3 2 系统硬件设计.......................................................................................................................3 2.1 系统组成及总体框图.......................................................................................................3 2.2 元件介绍...........................................................................................................................4 2.3.AT89S52.............................................................................................................................4 表 2.4 管脚备选功能............................................................................................................5 2.5 三极管 913........................................................................................................................6 2.6 显示电路...........................................................................................................................6 2.7 各功能模块原理图.............................................................................................................7 2.8 AT89S52 模块电路原理图................................................................................................7 2.9 键盘扫描模块电路原理图...............................................................................................7 2.10 音频处理模块电路原理图...............................................................................................8 2.11 电源模块电路原理图.....................................................................................................9 3 系统软件设计............................................................................................................................10 3.1.1 音乐相关知识.............................................................................................................10 3.1.2 如何用单片机实现音乐的节拍.................................................................................10 表 3.1.3 音乐节拍表..........................................................................................................11 3.1.4 如何用单片机产生音频脉冲.......................................................................................11 表 3.1.5 音符频率与计数值 T 的对照表..........................................................................11 3.1.6 系统总体功能流程图.................................................................................................12 4 电路仿真....................................................................................................................................16 4.1 ISIS 软件介绍................................................................................................................16 4.2 仿真图介绍.....................................................................................................................16 4.3 仿真图.........................................................................................................................17 6 系统调试......................................................................................................................................18 6.1 软件仿真调试.................................................................................................................18 6.2 软件调试.........................................................................................................................18 7 调试结论......................................................................................................................................18 附录 1:元器件清单.......................................................................................................................19 附录 2:主要电路原理图...............................................................................................................20 附录 3:主要程序...........................................................................................................................20 参考文献:......................................................................................................................................25 致谢:..............................................................................................................................................26 致谢………………………………………………………………………………………….26
2 前 言 单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用 STC89C52 单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有 16 个按键和扬声器。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器 T0 来产生这样方波频率信号,因此,我们只要把歌曲的音阶对应频率关系弄正确即可。
1 方案论证 1.1 控制模块选择方案 方案一:用可控硅制作电子琴。将 220V 交流电经变压器降压,再经过整流、滤波,获得+13.5V 直流电压。将单向可控硅 SCR 和电阻、电容组成驰张振荡器电路。但该设计方案制作成本高且复杂。
方案二:采用 AT89S52 单片机进行控制,由于其性价比高,完全满足了本作品智能化的要求,它的使用方便,抗干扰性能提高。
鉴于上述对比与分析,本设计采用方案二。
3 1.2 按键选择方案 方案一 利用 I/O 口直接连接的独立式键盘,每键都有相应的 I/O 口对应,编程容易控制,实现方便;但拒于 IO 口有限,能接的按键不能太多,而本系统需用户根据需要调整的参数较多,用独立按键会使操作变得复杂。
方案二 利用 PA 口接成 4*4 键盘。优点:利用 16 个 IO 口得到 16 个按键,可使操作介界变得简单,操作也方便;缺点:软件处理比独立按键复杂。
通过比较,方案二为最佳方案。
2 系统硬件设计 2.1 系统组成及总体框图 硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。
该设计要实现一种由单片机控制的电子琴,计具有 16 个音节的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。用单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要音频功率放大电路。
本例使用三极管的放大作用来来实现音频功放电路。
图 2.1-1 系统结构图 键盘扫描 AT89S52 数码管显示 扬声器播放音乐电源部分
4 2.2 元件介绍 2.3.AT89S52 功能特性:AT89S52 是一种低功耗、高性能,在系统可编程 Flash 存储器。使用 Atmel公司高密度非易失性存储器技术制造,片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52 具有以下标准功能:
8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振。另外,AT89S52 可降至0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止[1]。
主要性能:在系统可编程 Flash 存储器、1000 次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、16 个可编程 I/O 口线、三个 8 位定时器/计数器八个中断源、全双工 UART 串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符[2]。
管脚说明:
VCC:供电电压。
GND:接地。
P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P1 口的管脚第一次写 1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0输出原码,此时 P0 外部必须被拉高。
P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1 口作为第八位地址接收。
P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4 个 TTL门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址
5 “1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。
P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。
P3 口也可作为 AT89C52 的一些特殊功能口,如下表所示:
表 表 2.4 管脚备选功能 P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断 0)P3.3 /INT1(外部中断 1)P3.4 T0(记时器 0 外部输入)P3.5 T1(记时器 1 外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3 口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时,ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。
/EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平
6 时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加 12V 编程电源(VPP)。
XTAL1:反向振荡放大器的输入工作电路的输入。
XTAL2:来自反向振荡器的输出[3]。
2.5 三极管 913 三极管是音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为 20。但在 1 脚和 8 脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地为参考同时输出端被自动偏置到电源电压的一半,在 6V 电源电压下,它的静态功耗仅为 24mW,使得三极管特别适用于电池供电的场合。三极管 913 是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中[4]。
图 2.2.2-2 放大器增益 2.6 显示电路 本次毕业设计的显示电路采用 LED 数码管显示,由于 LED 是属于电流控制器件,使用时必须加限流电阻。通过单片机查表得出数码管显示编码,传送给数码管显示,以此来实现按键与显示程序的一致性。
7 2.7 各功能模块原理图 2 2.8 AT89S52 模块电路原理 图 单片机主程序模块通过对键盘扫描程序信号的读取,在通过对应的表,取出数码管显示编码和定时器初始值以产生不同的声音信号。在这一过程中,对数码管编码是直接赋值,对声音信号则是通过中断程序进行控制。
EA/VP31X119X218R ESET9R D17WR16INT012INT113T014T115P1 0/T1P1 1/T2P1 23P1 34P1 45P1 56P1 67P1 78P0 039P0 138P0 237P0 336P0 435P0 534P0 633P0 732P2 021P2 122P2 223P2 324P2 425P2 526P2 627P2 728PSEN29ALE/P30TXD11R XD10GND20Vcc40STC8 9C 51/5289 C5 2R C10 ufVCC30 p30 p 12 MHZ+-B EEPS112电源插口VCCS1S2S3S4S5S6S7S810 KP3 0P3 1P3 2P3 3P3 4P3 5P3 6P3 7P3 0P3 1P3 2P3 3P3 4P3 5P3 6P3 7P1 410 K80 5090 50VccVccP1 430 图 2.4.1-1 AT89S52 模块电路原理图 2.9 键盘扫描模块电路原理图 对键盘扫描电路的扫描方式有行扫描法和线反转法,在此次程序编写中,采用行扫描法,通过在 p 20 ~p 23 上循环送出 0 扫描信号,p 24 ~p 27 输入按键上的高低电平信息给单片机,经处理
8 程序,判断出是哪个开关按下,并送主程序以实现不同功能。
图 2.4.2-1 键盘扫描模块电路原理图 2.10 音频处理模块电路原理图 由于单片机驱动能力不够,在处理音符信号时,需加功率放大装置,因 LM386 芯片具有低功耗、高增益的特点,这合适单片机低功耗输出,所以加装 LM386 音频信号放大器对信号
9 进行放大。
图 2.10 音频处理模块电路原理图 2.11 电源模块电路原理图 由于本次设计的芯片的工作电压都为 5V,为了排除因为电压不稳定或者不准确影响电路的工作和软件的调试,本次设计单独用 LM7805 设计了一个输出 5V 的电压的电路,如图3-11 所示,其中 J0 为一变压器插排接口,输出电压在 7.5V,为交流电压,经过整流桥进行整流,电容滤波,再经过 LM7805 稳压后,得到本次设计所需的 5V 直流电源。
10 图 2.4.5-1 电源模块电路原理图 3 系统软件设计 本软件设计关键是要实现一种由单片机控制的简单音乐发生器,它由 16 个音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。
3.1.1 音乐相关知识 乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低,声音就低,不同音调的乐音是用 C、D、E、F、G、A、B 表示的,这 7 个字母就是乐音的音名,它们一般依次唱成 DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。
音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐[6]。
3.1.2 如何用单片机实现音乐的节拍 除了音符以外,节拍也是音乐的关键组成部分。
节拍实际上就是音持续时间的长短,在单片机系统中可以用延时来实现,如果 1/4 拍的延时是 0.4 秒,则 1 拍的延时是 1.6 秒,只要知道 1/4 拍的延时时间,其余的节拍延时时间
11 就是它的陪数。如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成[7]。音乐的音拍,一个节拍为单位(C 调)具体如下表:
表 表 3.1.3 音乐节拍表 曲调值 DELAY 曲调值 DELAY 调 4/4 125ms 调 4/4 62ms 调 3/4 187ms 调 3/4 94ms 调 2/4 250ms 调 2/4 125ms 3.1.4 如何用单片机产生音频脉冲 了解音乐的一些基本知识后可知,产生不同频率的音频脉冲即能产生音乐,对于单片机而言,产生不同频率有脉冲非常方便,可以利用它的定时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
在本实验中,单片机工作于 12MHZ 时钟频率,使用其定时/计数器 T0,工作模式为 1,改变计数值 TH0 和 TL0 可以产生不同频率的脉冲信号,在此情况下,C 调的各音符频率与计数值 T 的对照如下表:
表 表 3.1.5 音符频率与计数值 T T 的对照表 音符 频率(HZ)计数值(T 值)音符 频率(HZ)计数值(T值)低 1DO 262 63628 #4FA# 740 64860 #1DO# 277 63737 中 5SO 784 64898 低 2RE 294 63835 #5SO# 831 94934 #2RE# 311 63928 中 6LA 880 64968 低 3MI 330 64021 #6LA# 932 64994
12 低 4FA 349 64103 中 7SI 968 65030 #4FA# 370 64185 低 1DO 1046 65058 低 SO 392 64260 #1DO# 1109 65085 #5SO# 415 64331 高 2RE 1175 65110 低 6LA 440 64400 #2RE# 1245 65134 #6LA# 466 64463 高 3MI 1318 65157 低 7SI 494 64524 高 4FA 1397 65178 中 1DO 523 64580 #4FA# 1490 65198 #1DO# 554 64633 高 5SO 1568 65217 中 2RE 587 64633 #5SO# 1661 65235 #2RE# 622 64884 高 6LA 1760 65252 中 3MI 659 64732 #6LA# 1865 65268 中 4FA 698 64820 高 7SI 1967 65283 T 的值决定了 TH0 和 TL0 的值,其关系为:TH0=T/256,TL0=T%256[8] 3.1.6 系统总体功能流程图
13 图 3.1.6 主程序框图 N 定 时 器 初始 化 数 码管显示 0 主程序 开始 循环检测按键 Y 数码管显示 扬声器出声
14 K1 键 按下 K2 键 按下 K3 键 按下 K4 键 按下 K5 键 按下 K6 键 按下 K7 键 按下 3 数码管显示.,并播放 mi 的低数码管显示 4.,并播放 fa 的低数码管显示 5.,并播放 so 的低K8 键 按下 数码管显示 6.,并播放 la 的低数码管显示 7.,并播放 si 的低数码管显示 1,并播放 do 的中数码管显示 2,并播放 re 的中数码管显示 3,并播放 mi 的高
15 图 3.1.6 按键子程序流程图 K9 键按下 K10 键按下 K11 键按下 K12 键按下 K13 键按下 K14 键按下 K15 键按下 数码管显示 4 并播放 fa 的中音 数码管显示 5 并播放 so 的中音 数码管显示 6,并播放 la 的中K16 键按下 数码管显示 7,并播放 si 的中数码管显示 A,并播放 do 的高数码管显示 B,并播放 re 的高数码管显示 C,并播放 mi 的高数码管显示 D,并播放 fa 的高
16 4 电路仿真 S 4.1 ISIS 软件介绍 Proteus ISIS 是英国 Labcenter 公司开发的电路分析与实物仿真软件。它运行于 Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。
该软件的特点是:
(1)实现了单片机仿真和 SPICE 电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232 动态仿真、I2C 调试器、SPI 调试器、键盘和 LCD 系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000 系列、8051 系列、AVR 系列、PIC12 系列、PIC16 系列、PIC18 系列、Z80 系列、HC11 系列以及各种外围芯片。
(3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如 Keil C51 uVision2 等软件。
(4)具有强大的原理图绘制功能。总之,该软件是一款集单片机和 SPICE 分析于一身的仿真软件,功能极其强大。本章介绍 Proteus ISIS 软件的工作环境和一些基本操作[9]。
4.2 仿真图介绍 单片机:P0 口对应数码管编码输出端; P10 口做音乐信号输出端; P2 口做键盘扫描部分输入输出端。
键盘扫描:将 16 位开关通过矩阵连接,接出来四端接输入口(P0.4~P0.7)用于键盘情况的输入,另外四端接输出口(P0.0~P0.3)用于给键盘扫描信号。
数码管显示:在使用时一要接上拉电阻(这是有单片机 P0 口的物理特性决定的),二是要加限流电阻以使流进单片机的小于单片机所能承受的电流。
音乐处理:三极管将单片机 P1.0 口送过来的信号进行功率放大并送扬声器进行音乐的播出。
17 4.3 仿真图 图 4.3 仿真图
18 6 系统调试 电路调试是整个系统功能否实现的关键步骤,我们将整个调试过程分为三大部分:硬件调试、软件调试和综合调试。
6.1 软件仿真调试 软件仿真调试主要是针对单片机部分进行调试。
在软件运行前,先确保电路中连线正确,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要通过目测,用来完成检测电路中是否存在断路或者短路情况等。
在确保软件仿真电路正常,无异常情况(断路或短路)方可进行软件运行,在本次设计中,软件运行主要是测试单片机键盘控制部分、数码管点亮部分、和音频功放电路调试。
A、数码管 LED 电路调试:软件运行,随机按下按钮可以看到数码管显示数字; B、单片机键盘控制部分调试:软件运行,随机按动键盘可以发现各个按键对应的音正确。
6.2 软件调试 调试主要方法和技巧:
通常一个调试程序应该具备至少四种性能:跟踪、断点、查看变量、更改数值。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试[10]。
7 调试结论 通过各方面努力,本次毕业设计任务完成,系统部分功能已实现。可以随意演奏一首喜欢的曲子,并可以显示在数码管上。基本达到预定的效果。毕业设计是专科学习阶段一次非常难得的理论与实践相结合的机会,通过这次系统的项目设计提高了我运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了我查阅各种文献资料、设计手册、设计规范以及软件编程排版的水平。
19 附录 1 1 :元器件清单 名称 参数 数量 备注 排阻 8*470 2 RP1,RP2 插排 SIP2 3 J0,J1,J3 SIP8 2 J4,J5 键盘 直键开关 16 K1-K16 电容 CC1-3V-30pf 2 C21,C22 CL10-3V-0.0047u 1 C33 CC1-3V-0.1u 3 C12,C13,C31 CD11-6.3V-10u 1 C32 CD11-25V-470u 3 C11,C14,C23 电阻 RT-0.125-b-470 1 R32 RT-0.125-b-1K 2 R11,R21 RT-0.125-b-10K 1 R31 晶振 11.05926MHz 1 Y21 扬声器 驻极体电容式 1 数码管 DIP10 1 DPY
20 附录 2 2 :主要电路原理图 附录 3 3 :主要程序 BEEP BIT P3.7;定义蜂鸣器 BEEP 为 P3.7 ON_OFF BIT F0;定义按键标志位 ON_OFF 为 F0 SOUND_BUFF EQU 30H;定义音符缓冲区 SOUND_BUFF 为 30H,用来存放按键号 SOUND_BAK EQU 31H;定义音符备用缓冲区 SOUND_BAK 为 31H,用来备份按键号 ORG 0000H;程序从 0000H 开始 AJMP MAIN;跳转到主程序 MAIN ORG 0BH;定时器 T0 中断入口地址 AJMP TIME0;跳转至定时器 T0 中断服务程序 ORG 030H;主程序从 030H 开始;以下是主程序 MAIN: MOV SP,#5FH;设置堆栈指针为 5FH MOV TMOD,#01H;设定时器 T0 工作模式 1 SETB ET0;开定时器 T0 中断 SETB TR0;启动定时器 T0
21 START: CLR EA;关断总中断 SETB BEEP;关断蜂鸣器 NEXT1: CALL KEY;调按键判断子程序 JB ON_OFF,NEXT1;若 ON_OFF=1,说明无键按下,继续扫描 ACALL KEY_PROC;调按键处理子程序,求出按键号并存放到 SOUND_BUFF MOV SOUND_BAK,SOUND_BUFF;将第1次SOUND_BUFF中的按键号备份到SOUND_BAK中 ACALL DELAY_10ms;调 10ms 延时子程序 CALL KEY;再次调按键判断子程序 JB ON_OFF,NEXT1;若 ON_OFF=1,说明无键按下,继续扫描 ACALL KEY_PROC;调按键处理子程序,再次求出按键号存放到SOUND_BUFF MOV A,SOUND_BUFF;将第 2 次得到的按键号(存放在 SOUND_BUFF 中)送 A CJNE A,SOUND_BAK,NEXT1;比较第 1 次(存放在 SOUND_BAK)和第 2 次(存放在 SOUND_BUFF);存放的按键号是否相等,若不等,跳转到 NEXT1 继续扫描 ACALL SOUND;若两次扫描的键号相同,则调用音符处理子程序,查找出相应音符 SETB EA;打开总中断 NEXT2: CALL KEY;调用按键判断子程序,开始判断按键是否释放 JNB ON_OFF,NEXT2;若 ON_OFF=0,说明按键仍然按下,跳转到 NEXT2 继续等待 AJMP START;若 ON_OFF=1,说明按键释放,跳转到 START,继续循环;按键判断子程序(判断键盘有无键按下,并确认按键特征码)KEY: SETB ON_OFF;ON_OFF 为 1,表示无键按下 MOV P1,#0F0H;置列线为 0,行线为 1 MOV A,P1;读取 P1,求出行线的特征码 1 ANL A,#0F0H;屏蔽低 4 位列线 MOV B,A;送 A 的内容存放到 B,即特征码 1 送 B MOV P1,#0FH;置列线为 1,行线为 0 MOV A,P1;读取 P1,求出列线的特征码 2 ANL A,#0FH;屏蔽高 4 位行线
22 ORL A,B;将特征码 1(B)与特征码 2(A)相或后送 A,求出特征码 CJNE A,#0FFH,KEY_FLAG;若 A 的内容与 FFH 不等(有键按下),则跳转到 KEY_PROC AJMP KEY_RET;若 A 的内容不等 FFH(没有键按下),跳转到 KEY_RET KEY_FLAG: CLR ON_OFF;ON_OFF 清 0,表示有键按下,且键已弹起 KEY_RET: RET;以下是按键处理子程序(根据按键特征码,查表求出按键顺序码,即按键号)KEY_PROC: MOV B,A;若有键按下,将 A 的内容(特征码)送 B MOV DPTR,#TAB1;将 TAB1 的地址送 DPTR MOV R3,#0FFH;将 FFH 送 R3(以方便 0 号键查表),R3 用来存放键值的顺序码 KEY_PROC1: INC R3;R3(键值顺序码)加 1 MOV A,R3;R3(键值顺序码)送 A MOVC A,@A+DPTR;查表 CJNE A,B,KEY_PROC2;若A与B的值不等(未找到),跳转到KEY_PROC2 MOV A,R3;若 A 与 B 的值相等(找到),则取顺序码 MOV SOUND_BUFF,A;将 A 的内容送音符缓冲 SOUND_BUFF KEY_PROC2: CJNE A,#00H,KEY_PROC1;若 A 与 00H(结束码)不等,则跳转到KEY_PROC1,继续查 RET;子程序返回;以下是顺序码 0~F 的特征码 TAB1: DB 0EEH,0EDH,0EBH,0E7H;顺序码 0,1,2,3 的特征码 DB 0DEH,0DDH,0DBH,0D7H;顺序码 4,5,6,7 的特征码 DB 0BEH,0BDH,0BBH,0B7H;顺序码 8,9,A,B 的特征码 DB 07EH,07DH,07BH ,77H;顺序码 C,D,E,F 的特征码 DB 00H;00H 为结束码;以下是音符处理子程序 SOUND: MOV A, SOUND_BUFF;将音符缓冲区 SOUND_BUFF 的内容送 A RL A;向左移 1 位乘 2 MOV DPTR,#TAB2;将 TAB2 的地址送 DPTR
23 MOVC A,@A+DPTR;到标号 TAB2 处取音符 MOV TH0,A;取到的高位字节存入 TH0 MOV 21H,A;取到的高位字节存入 21H MOV A,SOUND_BUFF;再载入取码指针值 RL A;向左移 1 位乘 2 INC A;加 1 MOVC A,@A+DPTR;至表取低位字节计数值 MOV TL0,A;取到的低位字节存入 TL0 MOV 20H,A;取低位字节存入 20H RET;以下是定时器 T0 中断服务程序 TIME0: PUSH ACC;将 A 的值入栈 PUSH PSW;将 PSW 的值入栈 MOV TL0,20H;将 20H 的计数初值送 TL0 MOV TH0,21H;将 21H 的计数初值送 TH0 CPL BEEP;将 BEEP(P3.7)反相 POP PSW;PSW 的值出栈 POP ACC;A 的值出栈 RETI;返回主程序;以下是字符定时值 TAB2: DB 0FAH,1AH,0FAH,6AH;低音 3、4 的定时值 DB 0FBH,00H,0FBH,8CH;低音 5、6 的定时值 DB 0FCH,0EH,0FCH,4AH;低音 7 和中音 1 的定时值 DB 0FCH,0AEH,0FDH,08H;中音 2、3 的定时值 DB 0FDH,30H,0FDH,80H;中音 4、5 的定时值 DB 0FDH,0C6H,0FEH,02H;中音 6、7 的定时值 DB 0FEH,2AH,0FEH,5CH;高音 1、2 的定时值 DB 0FEH,84H,0FEH,98H;高音 3、4 的定时值;以下是 10ms 延时子程序 DELAY_10ms: MOV R7,#50;立即数 50 送 R7 D2: MOV R6,#100;立即数 100 送 R6
24 D1: 党建NZ R6,D1;R6 中的内容减 1,若不为 0,转到 D1 党建NZ R7,D2;R7 中的内容减 1,若不为 0,转到 D2 RET;延时子程序返回 END;程序结束
25 参考文献 [1] 胡汉才:单片机原理及其接口技术,北京清华大学出版社,2004,P142-P145 [2] 苏家健、曹柏荣、汪志锋:单片机原理及应用技术,高等教育出版社,2004.9,P3-P7 [3] 陈明荧:单片机课程设计实训教材,北京清华大学出版社,2003.9,P231-P235 [4] 刘永明、贺民译:[美]Ashish Wilfred Meeta Gupta Kartik Bhatnagar, php 专业项目实例开发,水利水电出版社,2003,P79-P83 [5] 赵鑫、蒋亮、齐兆群:数字电路设计,北京机械工业出版社,2005.6,P27-P31 [6] 龚妮丽:音乐美学论纲,中国社会科学出版社,2002.12,P47-P51 [7] 杨恢先、黄辉先:单片机原理及应用,人民邮电出版社,2006,P114-P117 [8] 徐新艳:单片机原理应用与实践,北京高等教育出版社,2005.3,P64-P67 [9] 张靖武、周灵彬:单片机原理、应用与 PROTEUS 仿真,2008.8,P71-P74 [10] 谢自美:电子线路设计·实验·测试,华中理工大学出版社,1992,P131-P137
26 致谢 本研究及学位论文是在我的导师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,卓老师都始终给予我细心的指导和不懈的支持。同时还在思想、生活上给我以无微不至的关怀,在此谨向卓老师致以诚挚的谢意和崇高的敬意。
在此,我还要感谢在一起愉快的度过大学生活的电气 1202 班的同学们正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!
版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《基于电子琴毕业设计毕业设计》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
