文档库 最新最全的文档下载
当前位置:文档库 › 基于单片机的音乐播放器设计软件设计毕业论文

基于单片机的音乐播放器设计软件设计毕业论文

毕业论文

基于单片机的音乐播放器设计软件设计

目录

1绪论 (2)

1.1单片机概述 (2)

1.2课题概述 (3)

2系统硬件原理及设计 (3)

2.1核心器件AT89C51介绍 (4)

2.2硬件电路设计 (6)

2.2.1设计目的 (6)

2.2.2 电路设计原理 (7)

2.2.3 总体电路设计 (7)

2.2.4单片机电路设计 (7)

2.2.5 显示电路设计 (8)

2.2.6 晶振时间电路设计 (8)

2.2.7 控制电路设计 (9)

2.2.8 输出电路设计 (9)

3.系统软件设计 (10)

3.1总体流程图 (10)

3.2单片机音阶代码实现 (11)

3.3单片机产生不同频率脉冲信号的原理: (12)

3.4音乐代码实现 (14)

3.4.1音乐代码库的建立方法 (14)

3.4.2选曲 (15)

3.4.3歌曲的设计 (15)

3.5键控子程序 (18)

3.5.1 播放/暂停子程序 (19)

3.5.2 曲目选择子程序 (20)

4.电路仿真调试 (22)

4.1仿真平台 (22)

4.2仿真测试 (22)

4.3测试总结 (25)

心得体会 (25)

参考文献 (1)

附录一:程序设计 (1)

1绪论

1.1 单片机概述

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲,一块芯片就成了一台计算机。

MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS- 48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。

MCS-51系列单片机主要包括8031、8051和8751等通用产品。DP-51S单片机仿真实验仪是由广州致远电子有限公司设计的DP系列单片机仿真实验仪之一,是一种功能强大的单片机应用技术学习、调试。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分为如下几个范畴:

一、在智能仪器仪表的应用

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。

二、在家用电器中的应用

可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。

三、在工业控制中的应用

用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。

单片机现在可以说是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供了广阔的天地。

纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:

一、微型单片化

现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。

此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。

二、低功耗CMOS化

MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。像80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗低,但由于其物理特征决定其工作速度不够高,而CHMOS 则具备了高速和低功耗的特点,这些特征,更适合于要求低功耗像电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。

1.2 课题概述

基于单片机的音乐播放器可应用于mp3,MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,我设计了一款特殊的"音乐播放器",本播放器可实现播放、暂停、复位等功能。为了体现乐曲播放过程中的动态效果,增加了1只LED,作随机闪烁以指示旋律的节奏。由于时间及条件限制,本设计实现了一种简单的音乐播放器,其核心器件采用AT89C51单片机,本播放器具有电路简单,功能强大,易于拓展等特点。在此基础上,可以添加按键,LED显示屏等模块,实现切换歌曲,歌名显示,动感音乐屏等功能。

2系统硬件原理及设计

2.1核心器件AT89C51介绍

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示

图2-1 AT89C51外形图及引脚序列

主要特性:

·与MCS-51 兼容

·4K字节可编程闪烁存储器

·寿命:1000写/擦循环

·数据保留时间:10年

·全静态工作:0Hz-24MHz

·三级程序存储器锁定

·128×8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

管脚说明:

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口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示

表2.1 P3口被选功能管脚备选功能

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端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

2.2 硬件电路设计

2.2.1设计目的

设计一个音乐播放器,有三个按键及控制按钮:播放/暂停、下一曲、上一

曲;通过控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。同时通过LED灯显示器,用来显示所选曲目,该显示器在音乐播放中关闭,一曲演奏结束时,或选曲时才显示曲目信息,从而利于操作。

2.2.2 电路设计原理

图2-2-2电路设计原理图

2.2.3 总体电路设计

图2-2-3 总体电路图

2.2.4单片机电路设计

89C51单片机拥有4KB的片内ROM和128B的片内RAM。ROM和RAM的片外寻址范围都为64KB。单片机拥有32个并行口和1个串行口。在89C51单片机中存在5个中断源,其中有两个外部中断源、两个内部中断源和一个串行中断源。

图2-2-4 89C51单片机

通过TXAL1 与TXAL2输入时钟信号,通过p1.0~p1.7输出控制现实控制信号的显示,有p3.2、p3.3与p3.5分别作为上一曲、下一曲和开始暂停的控制输入。

2.2.5 显示电路设计

显示电路是一个8位共阴极LED数码管。单片机的P0.0-P0.7分别与数码管的A、B、C、D、E、F、G、DP相连接。

图2-2.5 8位共阴极LED灯

2.2.6 晶振时间电路设计

晶振电路由两个30pF的电容和一个6Mhz的晶体振荡器组成。节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机提供时间信号,为音乐的播放节拍控制提供基本时间单位:当晶体振荡频率为 6.MHz,定时

器工作在方式1下时,若各音阶相对应的定时器计数初值为X,则可根据下式计算X:

166

?=-??

1/(2)(2)12/(610)

f X

图2-2-6 晶振电路

2.2.7 控制电路设计

控制电路,键一与p3.2相连、键二与p3.3相连、键3与p3.5相连。当电键按下时接口接低电平,从而实现对音乐播放器的控制。键一联通实现上一曲更换,键二联通实现下一曲更换,键三联通实现开始暂停操作。

图2-2-7 复位电路

2.2.8 输出电路设计

发声电路由数字扬声器连接p2.0接口实现音乐的输出,由控制电路发出操作指令后,单片机调用相应程序,并将音乐信号由p2.0口输出,通过驱动扬声器发出美妙的音乐。

图2-2-8 输出电路

3.系统软件设计

3.1 总体流程图

主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目判断。确定歌曲曲目后,数码管再进行显示。然后,子程序对是否播放进行循环判断,得到播放中断的指令后再进行播放。

执行播放后,关闭数码管显示并调用查表子程序进行播放音乐。在播放音乐的过程中,查表子程序循环判断音乐是否结束。当音乐结束时,程序跳转回曲目识别子程序。

图3-1 总体流程图

3.2单片机音阶代码实现

音调的高低用音阶表示,不同的音阶对应不同的频率。因此,不同频率的方波就可以产生音阶,音阶与频率的关系见表1。由于频率的倒数是周期,因此可

由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。将与扬声器连

接的P1.7取反后就可得到方波的周期,从而达到了控制频率,即音阶的目的。

音阶与频率的关系及如下表:

注:0表示简谱中的空拍

表3-2 方式1下定时器的初值

当晶体振荡频率为6.144MHz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为X,则可根据下式计算X:

166

?=-??

1/(2)(2)12/(610)

f X

音调的长短用节拍数表示(例如1/4拍、2/4拍、……),不同节拍数的不同音符的组合形成乐谱。程序中,音的节拍可由延时子程序实现。延时子程序设定为四分之一拍,节拍值只能是它的整数倍。

3.3 单片机产生不同频率脉冲信号的原理:

(1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。

(2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下:

例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。

计数脉冲值与频率的关系公式如下:

N=Fi/2/Fr

第3章系统软件原理及设计

表3-3-1 C调各音符频率与计数值T的对照表

表3-2-2 节拍码对照表

1/4节拍1/8节拍

曲调值DELAY 曲调值DELAY

调4/4 125毫秒调4/4 62毫秒

调3/4 187毫秒调3/4 94毫秒

调2/4 250毫秒调2/4 125毫秒

表3-3-3 各调节拍的时间设定表

四分之一拍延时代码设计:

1/4拍的延迟时间=187毫秒

DELAY: MOV R7,#2

D2: MOV R4,#187

D3: MOV R3,#248

DJNZ R3,$

DJNZ R4,D3

DJNZ R7,D2

RET

3.4 音乐代码实现

3.4.1音乐代码库的建立方法

(1)先找出乐曲的最低音和最高音范围,然后确定音符表T的顺序。

(2)把T值表建立在TABLE1,构成发音符的计数值放在“TABLE”。

(3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。

(4)音符节拍码00H为音乐结束标记。

3.4.2选曲

在一个程序中,需要演奏两首或两首以上的歌曲时,音乐代码库的建立有两种方法:

(1)将每首歌曲建立相互独立的音符表T和发音符计数值TABLE。

(2)在建立公用音符表T后,再写每首歌的发音计数值TABLE中的代码

不管采用那种方法,每首歌曲结束时,在TABLE中均需加上音乐结束符00H。

3.4.3歌曲的设计

下面以歌曲《军港之夜》的设计为例,讲述歌曲在单片机中的实现。曲谱如下图所示

图3-4-3《军港之夜》乐谱

从歌中可看出,最低音为低7Si,最高音为高1Do。根据音乐软件的设计方法,简谱对应的简谱码、T值、节拍数如表所示。

简谱发音简谱码T值节拍码节拍数

低7 低音Si 1 64524 1 1/4

1 中音Do

2 64580 2 2/4

2 中音Re

3 6468

4 3 3/4

3 中音Mi

4 64777 4 1

4 中音Fa

5 64820 5 1+1/4

5 中音So

6 64898 6 1+1/2

6 中音La

7 6496

8 8 2

7 中音Ti 8 65030 A 2+1/2

高1 高音Do 9 65058 C 3

低6 低音La A 64400 F 3+3/4 低5 低音So B 64260

表3-4-3 简谱对应的简谱码、T值、节拍数

《军港之夜》代码实现如下:

SONG1: DB 04H ;1=C 2/4 军港之夜

DB

32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H, 52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB

0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H, 52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H

DB

34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0 E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H

DB

22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61 H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H DB

32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,5 2,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52 H

DB

32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C 2H,14H,14H

DB

32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,1 4H,14H

DB

0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H, 52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H

DB

34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0 E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H

DB

22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61 H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H DB

32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,5

2,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52 H

DB

32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C 2H,14H,14H

DB

32H,52H,52H,32H,32H,21H,31H,24H,74H,0D2H,0C2H,14H,14H,14H,1 4H

DB 00H

TABLE2:DW

63835,64021,64103,64260,64400,64524,64580,64684,64777

DW 64820,64898,64968,65030,65058,65110,65157,65178

《死了都要爱》代码实现如下:

SONG2: DB 02H ;1=C 4/4 死了都要爱

DB 04H,94H

DB

0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H, 92H,94H,92H,02H

DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H

DB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H

DB

0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H, 92H,94H,92H,02H

DB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H

DB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H

DB

24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H, 84H,74H,74H,62H,62H,0D8H,78H,28H,38H,34H,24H

DB

24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54 H,44H ;#音不准

DB

58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H,94H,98H ,98H,08H

DB

84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72 H,72H,72H,92H,91H,91H,94H,54H,74H,94H

;;*************************************************

DB

0A8H,0A4H,0A2H,0B2H,0C4H,0B4H,0A4H,0A4H,0A4H,92H,92H,98 H,82H,72H,78H,04H,0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94

H,0A4H

DB 04H,0C4H,0D4H,0C4H,0C8H,04H,94H

DB

0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H, 92H,94H,92H,02

DB

0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C 2H,0D4H,0D8H,0D4H,0D2H,92H

DB

0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H, 92H,94H,92H,02

DB

0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C 2H,0D4H,0D8H,0D4H,0D2H,92H

;*************

DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8H

DB 0C8H,0C8H,0C8H,08H

DB 00H

《中华人民共和国国歌》代码实现如下:

ONG3: DB 03H ;G=2/4 中华人民共和国国歌

DB

04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14 H,02H,32H,12H,21H,31H,52H,51H,51H,54H

DB

32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H, 34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04H

DB

52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D 2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H, 54H,54H

DB

12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H, 02H,12H,02H,0C4H,14H

DB

0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14 H,0C4H,14H,14H,04H

DB 04H,04H,04H,04H

DB 00H

END;

3.5 键控子程序

键控子程序主要由播放/暂停子程序、上一曲子程序、下一曲子程序组成,分别由一个计数器中断和两个外部中断实现。

3.5.1 播放/暂停子程序

播放/暂停在程序利用内部中断T0口。将T0口设为计数中断并工作在方式2下。标识符初值赋值为R1=00H,计数初值设为TH0=0FFH,TL0=0FFH。当按键第一次产生中断信号时,播放/暂停子程序改变标志符R1,将其赋值为01H。此时播放器由暂停状态进入播放状态。当按键第二次产生中断信号时,播放/暂停子程序判断R1是否为02H后,将R1再次赋值为00H。此时,播放器由播放状态进入暂停状态。

相关文档
相关文档 最新文档