1、 摘 要电子琴是现代电子科技与音乐结合的产物。电子琴是一种新型的键盘乐器,采用半导体集成电路,对乐音信号进行放大,通过扬声器产生音响.由音色,自动伴奏,自动和弦三大部分组成.它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。关键词: 单片机,键盘,扬声
2、器,电子琴Abstract Electronic organ is a modern electronic music technology and the product is a new type of keyboard instruments. It played an important role in modern music. SCM has powerful control functions and flexible programming characteristics. It has converged with modern peoples lives, become a
3、n irreplaceable part. The main content is AT89C51 control of the core components, design of a electronic organ. SCM as a host to the core, with the keyboard, speaker and other core modules. In the main control module has 8 keys and a speaker. The system is steady, its simple hardware circuits, softw
4、are functions, reliability of control system and high cost performance is its advantages. It also has certain practical and reference value.Key words : SCM keyboard speaker electronic organ 目 录引 言1第一章 总体方案论证与设计31.1 控制模块31.2 播放模块41.2 按键控制模块4第二章 系统的软件设计62.1 音乐弹奏原理62.2 音乐弹奏设计72.3 软件流程图82.4 上位机软件及程序9第三章
5、 系统调试与测试结果分析183.1 使用的仪器及软件183.2 系统调试183.2.1 硬件调试183.2.2 软件调试193.2.3 硬件软件联调203.3 测试结果20总结21致谢21参考文献22附录1 源程序23 引 言电子琴是现代电子科技与音乐结合的产物。电子琴是一种新型的键盘乐器,采用半导体集成电路,对乐音信号进行放大,通过扬声器产生音响.由音色,自动伴奏,自动和弦三大部分组成.它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为
6、主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。键盘乐器,采用半导体集成电路,对乐音信号进行放大,通过扬声器产生音响。发音音量可以自由调节。音域较宽,和声丰富,表现力极其丰富。电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和声。还常作为独奏乐器出现,具有鲜明时代特色。但电子琴的局限性也十分明显:旋律与和声缺乏音量变化,过于协和、单一;在模仿各类管、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。电子琴的演奏有较大一
7、部分是通过自动和弦伴奏来配合完成的,在音乐中和弦的连接推动了旋律地进行,不同的和声连接,形成了不同的音乐色彩。本次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的电子琴. 本方案以AT89C51单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块在主控模块上设有8个按键和8个扬声器.根据使用者的操作随意弹奏想要表达的音乐。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号。 通过本课程的实训,旨在使学生在
8、掌握先修课程的基础上,一方面能综合应用这些课程的理论知识,更重要的一方面,是让学生亲自动手,参与到工程实践训练中。使学生在之前掌握的知识,以及单片机知识的基础上,进一步掌握电子产品设计以及开发调试的全过程。电路设计、电路调试、程序调试、程序下载等实践实训部分,真正培养学生理论联系实际.分析解决一般性技术问题以及实际动手的能力。利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出7个不同的音调,并且要求按下按键发声,松开延时一段时间停止,当按下第八个键时,开始播放实现存储在程序中的音乐;按第二次播放第二个音乐,第三次播放第三个音乐,依次类推。当系统扫描到键盘上有键被按下,则快速检测出是哪
9、一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。同时,相应的指示灯被点亮。 第一章 总体方案论证与设计声音的产生是一种音频效果,振动的频率高,则为高音,频率低,则为低音,人能辨别的声音频率大概为20Hz-20KHz,在数字电路中,以脉冲信号驱动扬声器,产生声音。在同样的频率下,人耳很难分辨正弦信号或是脉冲信号产生的音效。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方
10、波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。AT89C51的内部定时器使其工作计数器模式下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。在本次电子琴设计中,我们组成员单片机芯片在仿真的时候我们用的AT89C51,在最后的时候用的是STC89C52芯片,而89C52系列的兼容性也比较好。52的内存是51的两倍,其引脚功能都是一样的。本系统采用单片机AT89C52为电子琴的控制核心,系统主要包括音频放大模块、按键控制模块。下面对各模块的设计逐一进行论证比较。1.1 控制模块AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programma
11、ble and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。本次设计中中心控制模块是采用AT89C51单片机来控制
12、整个系统。P1口连接按键控制电路,P2口接LED指示灯,P3.4连接放大电路、喇叭, 从而实现播放音乐的功能。RST连接复位电路,XTAL1和XTAL2引脚连接晶振电路与芯片组成的最小系统。1.2 播放模块播放模块是喇叭构成。它几乎不存在噪声,音响效果较好。而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。如下图所示,播放模块其实就是放大电路加上喇叭,它接到P3.4口上,当有音符输出时,它就会发出声音。1.2 按键控制模块电子琴设有8个按键,其中7个作为音符输入,另外1个作为模式转换按键,实现用户自弹作曲。接与P1口。7个按键分别代表7个音符,包括中音段的全部音符。通过软硬件设计,按键外
13、部触发系统,启动电子琴。然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现按键发音。当读取需要电子琴已储存的歌曲时,按下按键8即可轮流播放以存储的歌曲。1.4 总体硬件组成原理图为使该模块化电子琴控制系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。硬件电路包括中心控制模块、播放模块、按键控制模块三大模块。 第二章 系统的软件设计软件是该电子琴控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。2.1 音乐弹奏原理由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的
14、频率,这样就可以利用不同的频率的组合,即可弹奏出我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。演奏中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。电子琴弹奏部分:实际上就是把每个按键所对应的值经过处理后发给单片机,再在单片机内把数字当作指针指向所对应的音符。如下表所示:按键音阶S1doS2reS3miS4faS5soS6laS7xiS8
15、音乐2.2 音乐弹奏设计发音电路有三极管、电阻和扬声器组成,接在P3.4口,通过定时器溢出的时间不同,P3.4口输出不同频率的高低电平,P3.4输出的脉冲频率不同,三极管导通的频率也不同,从而扬声器根据不同频率的脉冲发出的声音也不相同。如下表所示:各音符频率与计数值T的关系音符频率Hz半周期(ms)简谱码T定时值(H)简谱码T定时值(D)低Do1313.82F11761719低Re1473.4F2B762135低Mi1653.03F42A62506低Fa1752.86F4D762679低So1962.55F60962985低La2202.27F71F63263低Si2472.02F818635
16、12中Do2621.91F88C63628中Re2941.7F95B63835中Mi3301.52FA1564021中Fa3491.43FA6764103中So3921.28FB0464260中La4401.14FB9064400中Si4941.01FC0C64524高Do2620.96FC4464580高Re2940.85FCAC64684高Mi3300.76FD0964777高Fa3490.71FD2A64810高So3920.64FD8264898高La4400.57FDC864968高Si4940.51FE2E650702.3 软件流程图本系统中单片机89C51的主要功能就是实现音乐播
17、放功能。其主程序流程如图4-1所示。2.4 上位机软件及程序 本系统的上位机软件主要是编辑电子琴播放状态的内容,在设计中采用汇编语言编写了电子琴控制系统控制和播放内容的程序。 ORG 0000HSJMP M1ORG 000BHMOV TH0,R1 ;设置定时器初值MOV TL0,R0CPL P3.4 ;输出方波RETIM0:MOV R5,#00HM1:CLR A MOV C,P1.0 ;判断是否为按键1MOV ACC.0,CJZ DO MOV C,P1.1 ;判断是否为按键2MOV ACC.0,CJZ RAIMOV C,P1.2 ;判断是否为按键3MOV ACC.0,CJZ MIMOV C,P
18、1.3 ;判断是否为按键4MOV ACC.0,CJZ FAMOV C,P1.4 ;判断是否为按键5MOV ACC.0,CJZ SOMOV C,P1.5 ;判断是否为按键6MOV ACC.0,CJZ LAMOV C,P1.6 ;判断是否为按键7MOV ACC.0,CJZ XIMOV C,P1.7 ;判断是否为按键8MOV ACC.0,CJZ M7 LJMP M1M7:LJMP M2DO:MOV R1,#0FCH ;设定各音节初值 MOV R0,#43H MOV R2,#08H CLR P2.0 ;打开灯D1 LJMP NEXTRAI:MOV R1,#0FCH MOV R0,#0ABH MOV R
19、2,#08H CLR P2.1 ;打开灯D2 LJMP NEXTMI:MOV R1,#0FDH MOV R0,#08H MOV R2,#08H CLR P2.2 ;打开灯D3 LJMP NEXTFA:MOV R1,#0FDH MOV R0,#33H MOV R2,#08H CLR P2.3 ;打开灯D4 LJMP NEXTSO:MOV R1,#0FDH MOV R0,#81H MOV R2,#08H CLR P2.4 ;打开灯D5 LJMP NEXTLA:MOV R1,#0FDH MOV R0,#0C7H MOV R2,#08H CLR P2.5 ;打开灯D6 LJMP NEXTXI:MOV
20、R1,#0FEH MOV R0,#05H MOV R2,#08H CLR P2.6 ;打开灯D7 LJMP NEXTNEXT:CLR AMOV TMOD,#01H ;设定定时器工作方式MOV IE,#82H ;开启总中断MOV TH0,R1 ;设置初值MOV TL0,R0SETB TR0 ;开启中断0LOOP1: LCALL D200C ;调用延时DJNZ R2,LOOP1 ;判定是否延时完CLR TR0 ;关闭中断MOV A,#0FFH ;关灯MOV P2,A LJMP M1 ;跳转主程序M5:CJNE R5,#04H,M9 ;判断是否为歌曲4MOV DPTR,#QULJMP LOOPM9:
21、CJNE R5,#05H,M8 ;判断是否为铃声MOV DPTR,#LSLJMP LOOPM8:CJNE R5,#06H,M10 ;判断按键是否到第6次M10:LJMP M0 M4:CJNE R5,#03H,M5 ;判定是否为歌曲3MOV DPTR,#PLLJMP LOOPM3:CJNE R5,#02H,M4 ;判定是否为歌曲2MOV DPTR,#LINGLJMP LOOPM2:INC R5 ;记录按键8次数CJNE R5,#01H,M3 ;判定是否为歌曲1MOV DPTR,#TABLOOP: CPL P2.7 ;打开灯D8CLR AMOVC A,A+DPTR ;取音符MOV R1,A INC
22、 DPTRCLR AMOVC A,A+DPTRMOV R0,AORL A,R1JZ NEXT0 ;判定是否为结束符号MOV A,R0ANL A,R1CJNE A,#0FFH,NEXT3 ;判定是否为休止符CLR TR0MOV R2,04HLCALL D200CINC DPTRLJMP LOOPNEXT3: MOV TMOD,#01H ;设定定时器工作方式MOV IE,#82H ;开启总中断MOV TH0,R1 ;设置初值MOV TL0,R0SETB TR0 ;开启中断0SJMP NEXT2 NEXT0:CLR TR0 ;关中断MOV A,#0FFH ;关灯MOV P2,A LJMP M1 ;跳
23、转至主程序NEXT2: CLR A INC DPTR MOVC A,A+DPTR ;取节拍MOV R2,ALOOP3: LCALL D200C ;调用延时DJNZ R2,LOOP3 ;判断是否延时完 INC DPTR ;跳到下一音符LJMP LOOPD200C:MOV R3,#65H ;延时子程序D200B:MOV A,#0FFHD200A:DEC AJNZ D200ADEC R3CJNE R3,#00H,D200BRETTAB:DB ;歌 曲 10FDH,81H,02H,0FDH,81H,04H,0FDH,81H,02H,0FDH,81H,04H,0FDH,08H,02H,0FDH,81H,
24、02HDB 0FCH,43H,04H,0FDH,0C7H,04H,0FDH,81H,08HDB FDH,81H,02H,0FDH,81H,04H,0FDH,81H,02H,0FDH,81H,04H,0FDH,08H,02H,0FCH,0ABH,02HDB 0FCH,43H,04H,0FDH,08H,04H,0FCH,0ABH,08HDB 0FCH,0ABH,06H,0FDH,08H,02H,0FDH,81H,04H,0FDH,81H,02H,0FDH,81H,02HDB 0FDH,08H,04H,0FDH,08H,02H,0FCH,0ABH,02H,0FCH,43H,04H,0FCH,43H,
25、04HDB 0FCH,0ABH,06H,0FDH,08H,02H,0FCH,43H,04H,0FCH,43H,02H,0FBH,8FH,02HDB 0FBH,03H,04H,0FBH,8FH,04H,0FBH,03H,08HDB 00H,00HLING: ;歌 曲2DB 0FDH,08H,04H,0FDH,08H,04H,0FDH,08H,04H,0FCH,43H,04HDB 0FBH,03H,08H,0FBH,03H,08HDB 0FDH,08H,04H,0FDH,08H,04H,0FDH,08H,04H,0FCH,43H,04HDB 0FDH,08H,08H,0FCH,43H,02H,0F
26、CH,0ABH,02H,0FDH,08H,02H,0FDH,33H,02HDB 0FDH,81H,04H,0FDH,81H,04H,0FDH,08H,04H,0FCH,43H,04HDB 0FBH,03H,04H,0FBH,03H,04H,0FBH,03H,08HDB 0FBH,8FH,04H,0FCH,0BH,04H,0FCH,43H,04H,0FDH,08H,04HDB 0FCH,0ABH,10HDB 00H,00HPL: ;歌 曲 3DB 0FCH,43H,04H,0FCH,0ABH,04H,0FDH,08H,04H,0FCH,43H,04HDB 0FDH,81H,10HDB 0FDH,
27、0C7H,04H, 0FDH,0C7H,04H,0FEH,05H,04H,0FDH,0C7H,04HDB 0FDH,81H,10HDB 0FDH,0C7H,04H, 0FDH,0C7H,04H,0FEH,05H,08HDB 0FDH,0C7H,04H, 0FDH,0C7H,04H,0FDH,81H,08HDB 0FDH,0C7H,04H,0FDH,81H,04H ,0FDH,08H,04H,0FDH,81H,04HDB 0FDH,08H,04H,0FCH,43H,04H,0FCH,0ABH,04H, 0FDH,08H,04HDB 0FCH,43H,10HDB 00H,00HQU: ;歌 曲4D
28、B 0FDH,81H,06H,0FEH,05H,02H,0FDH,81H,04H,0FDH,33H,04HDB 0FDH,08H,04H,0FCH,0ABH,04H,0FCH,43H,08HDB 0FCH,43H,04H,0FCH,43H,04H,0FCH,0ABH,04H,0FDH,08H,04HDB 0FDH,08H,04H,0FCH,43H,04H,0FDH,08H,04H,0FDH,33H,04HDB 0FDH,81H,10HDB 0FDH,81H,10HDB 00H,00HLS: ;铃声DB 0FDH,0C7H,04H,0FDH,0C7H,04H,0FDH,81H,04H DB 0F
29、DH,0C7H,04H,0FDH,0C7H,04H,0FDH,81H,04HDB 00H,00HEND 第三章 系统调试与测试结果分析3.1 使用的仪器及软件 单片机仿真软件 Proteus 单片机设计软件 DXP蜂鸣器 LS13.2 系统调试根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:中心控制模块的调试,音乐播放模块的调试,按键控制模块的调试等,最后将各模块组合后进行整体测试。3.2.1 硬件调试对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。硬件的图片如下所示3.2.2 软件
30、调试软件调试采用Proteus软件,将编好的程序进行调试,主要是检查语法错误。Proteus的仿真图如下所示3.2.3 硬件软件联调 将调试好的硬件和软件进行联调,主要调试系统的实现功能。3.3 测试结果此次系统设计结果较好,分别播动7个按键会发出7种高低不同的声音,按第8个按键,将轮流放出以存储的4首歌曲 总 结 经过两周的忙碌,我的电子琴终于仿真成功.虽然失败了几次,但经过老师对硬件连接图的纠正,自己又调整.了程序最后终于方仿真成功.心情很激动,一方面:觉得很有成就感;另一方面:收获很大,:不但锻炼了编程的能力,而且通过编程对硬件的整个流程了解了。在仿真过程中,我犯了两个低级错误:一个是用
31、了没有模型的元件,另一个是喇叭可以不用驱动就能发出声音。经老师提醒,我改正了连接图。结果成功了。用单片机控制播放模块和按键控制模块制作出的电子琴,结构简单,可靠性高,并且价格低廉,具有实用的价值。这种电子琴能够支持单音弹琴和曲目播放,如果与高品质的音源芯片连接,音质更可与高档电子琴相媲美。在这里我首先衷心的感谢我的导师蔡长青老师,本文不论是从选题到完成,还是从理论上的探讨到实际问题的解决,无不包含着蔡老师的心血,并且其他同学的相互鼓励和帮助为毕业设计的正常进行起到了非常大的效果。在整个毕业设计的过程中我懂得了许多东西,也培养了我独立工作的能力,坚定了对自己工作能力的信心,相信会对今后的学习工作
32、生活有非常重要的影响,而且大大的提高了我动手的能力,是我充分体会到了在创造过程中的艰难探索和成功的喜悦。虽然这个项目还不是很完善,但是在这次设计过程中所学的东西是本次毕业设计的最大收获和财富,将使我终身受益。蔡长青老师的悉心指导和建议给了我极大的帮助和支持,使我受益匪浅,在该论文完成之际,谨向蔡长青老师致以深深的谢意和崇高的敬意,更希望老师在以后的学医生涯中多加的指点,并提出宝贵的意见,使我们对学到的知识掌握的更为牢固些,从而在以后的实际应用中充分发挥。参考文献1 MCS-51系列单片机原理及应用,刘淑荣,王瑾,中国电力出版社2 视频: Protues教程,6天堂坠落6,优酷网附录1 源程序O
33、RG 0000HSJMP M1ORG 000BHMOV TH0,R1 ;设置定时器初值MOV TL0,R0CPL P3.4 ;输出方波RETIM0:MOV R5,#00HM1:CLR A MOV C,P1.0 ;判断是否为按键1MOV ACC.0,CJZ DO MOV C,P1.1 ;判断是否为按键2MOV ACC.0,CJZ RAIMOV C,P1.2 ;判断是否为按键3MOV ACC.0,CJZ MIMOV C,P1.3 ;判断是否为按键4MOV ACC.0,CJZ FAMOV C,P1.4 ;判断是否为按键5MOV ACC.0,CJZ SOMOV C,P1.5 ;判断是否为按键6MOV
34、ACC.0,CJZ LAMOV C,P1.6 ;判断是否为按键7MOV ACC.0,CJZ XIMOV C,P1.7 ;判断是否为按键8MOV ACC.0,CJZ M7 LJMP M1M7:LJMP M2DO:MOV R1,#0FCH ;设定各音节初值 MOV R0,#43H MOV R2,#08H CLR P2.0 ;打开灯D1 LJMP NEXTRAI:MOV R1,#0FCH MOV R0,#0ABH MOV R2,#08H CLR P2.1 ;打开灯D2 LJMP NEXTMI:MOV R1,#0FDH MOV R0,#08H MOV R2,#08H CLR P2.2 ;打开灯D3 L
35、JMP NEXTFA:MOV R1,#0FDH MOV R0,#33H MOV R2,#08H CLR P2.3 ;打开灯D4 LJMP NEXTSO:MOV R1,#0FDH MOV R0,#81H MOV R2,#08H CLR P2.4 ;打开灯D5 LJMP NEXTLA:MOV R1,#0FDH MOV R0,#0C7H MOV R2,#08H CLR P2.5 ;打开灯D6 LJMP NEXTXI:MOV R1,#0FEH MOV R0,#05H MOV R2,#08H CLR P2.6 ;打开灯D7 LJMP NEXTNEXT:CLR AMOV TMOD,#01H ;设定定时器工
36、作方式MOV IE,#82H ;开启总中断MOV TH0,R1 ;设置初值MOV TL0,R0SETB TR0 ;开启中断0LOOP1: LCALL D200C ;调用延时DJNZ R2,LOOP1 ;判定是否延时完CLR TR0 ;关闭中断MOV A,#0FFH ;关灯MOV P2,A LJMP M1 ;跳转主程序M5:CJNE R5,#04H,M9 ;判断是否为歌曲4MOV DPTR,#QULJMP LOOPM9:CJNE R5,#05H,M8 ;判断是否为铃声MOV DPTR,#LSLJMP LOOPM8:CJNE R5,#06H,M10 ;判断按键是否到第6次M10:LJMP M0 M
37、4:CJNE R5,#03H,M5 ;判定是否为歌曲3MOV DPTR,#PLLJMP LOOPM3:CJNE R5,#02H,M4 ;判定是否为歌曲2MOV DPTR,#LINGLJMP LOOPM2:INC R5 ;记录按键8次数CJNE R5,#01H,M3 ;判定是否为歌曲1MOV DPTR,#TABLOOP: CPL P2.7 ;打开灯D8CLR AMOVC A,A+DPTR ;取音符MOV R1,A INC DPTRCLR AMOVC A,A+DPTRMOV R0,AORL A,R1JZ NEXT0 ;判定是否为结束符号MOV A,R0ANL A,R1CJNE A,#0FFH,NE
38、XT3 ;判定是否为休止符CLR TR0MOV R2,04HLCALL D200CINC DPTRLJMP LOOPNEXT3: MOV TMOD,#01H ;设定定时器工作方式MOV IE,#82H ;开启总中断MOV TH0,R1 ;设置初值MOV TL0,R0SETB TR0 ;开启中断0SJMP NEXT2 NEXT0:CLR TR0 ;关中断MOV A,#0FFH ;关灯MOV P2,A LJMP M1 ;跳转至主程序NEXT2: CLR A INC DPTR MOVC A,A+DPTR ;取节拍MOV R2,ALOOP3: LCALL D200C ;调用延时DJNZ R2,LOOP
39、3 ;判断是否延时完 INC DPTR ;跳到下一音符LJMP LOOPD200C:MOV R3,#65H ;延时子程序D200B:MOV A,#0FFHD200A:DEC AJNZ D200ADEC R3CJNE R3,#00H,D200BRETTAB:DB ;歌 曲 10FDH,81H,02H,0FDH,81H,04H,0FDH,81H,02H,0FDH,81H,04H,0FDH,08H,02H,0FDH,81H,02HDB 0FCH,43H,04H,0FDH,0C7H,04H,0FDH,81H,08HDB FDH,81H,02H,0FDH,81H,04H,0FDH,81H,02H,0FD
40、H,81H,04H,0FDH,08H,02H,0FCH,0ABH,02HDB 0FCH,43H,04H,0FDH,08H,04H,0FCH,0ABH,08HDB 0FCH,0ABH,06H,0FDH,08H,02H,0FDH,81H,04H,0FDH,81H,02H,0FDH,81H,02HDB 0FDH,08H,04H,0FDH,08H,02H,0FCH,0ABH,02H,0FCH,43H,04H,0FCH,43H,04HDB 0FCH,0ABH,06H,0FDH,08H,02H,0FCH,43H,04H,0FCH,43H,02H,0FBH,8FH,02HDB 0FBH,03H,04H,0F
41、BH,8FH,04H,0FBH,03H,08HDB 00H,00HLING: ;歌 曲2DB 0FDH,08H,04H,0FDH,08H,04H,0FDH,08H,04H,0FCH,43H,04HDB 0FBH,03H,08H,0FBH,03H,08HDB 0FDH,08H,04H,0FDH,08H,04H,0FDH,08H,04H,0FCH,43H,04HDB 0FDH,08H,08H,0FCH,43H,02H,0FCH,0ABH,02H,0FDH,08H,02H,0FDH,33H,02HDB 0FDH,81H,04H,0FDH,81H,04H,0FDH,08H,04H,0FCH,43H,04HDB 0FBH,03H,04H,0FBH,03H,04H,0FBH,03H,08HDB 0FBH,8FH,04H,0FCH,0BH,04H,0FCH,43H,04H