基于汇编的音乐弹奏程序
革命歌曲演奏程序《汇编语言程序设计》课程设计报告

革命歌曲演奏程序《汇编语言程序设计》课程设计报告题目: 革命歌曲演奏程序初始条件:理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。
实践:计算机学院科学系实验中心提供计算机和软件平台。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)编写用键盘选择计算机演奏歌曲的程序,歌曲清单至少包括3首。
(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
(4)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:在正文第一行写课程设计题目;1.需求说明(要求、功能简述)或问题描述;2.设计说明(简要的分析与概要设计);3.详细的算法描述;4.源程序与执行结果(含测试方法和测试结果);5.使用说明;6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。
时间安排:设计时间一周:周1:查阅相关资料。
周2:系统分析,设计。
周3~4:编程并上机调试周5:撰写课程设计报告。
设计验收安排:21周星期五8:00起到计算机学院科学系实验中心进行上机验收。
设计报告书收取时间:21周的星期五下午5:00之前。
指导教师签名: 2007年1月18日系主任(或责任教师)签名: 2007年1月 18日革命歌曲演奏程序1 需求说明这次《汇编语言程序设计》课程设计要求通过一个较大型实用程序的设计与实现,综合运用所学知识,加深理解和掌握。
同时培养学生分析问题和解决问题的能力,以及自学能力。
我选择的题目是《革命歌曲演奏程序》,要求完成的主要任务有:(5)编写用键盘选择计算机演奏歌曲的程序,歌曲清单至少包括3首。
(6)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(7)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
汇编钢琴发声与两只老虎程序

燕山大学课程设计报告汇编与接口课设学院信息科学与工程学院年级专业计算机科学学生姓名学号指导教师提交日期2011/7/1实验一钢琴程序一.实验目的进行汇编语言程序设计应用的综合性训练。
综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。
二.实验要求按下数字键1-8发出哆来咪发嗖拉西多的声音,当按下ctrl+c键时退出程序三.设备与环境PC兼容机、Windows操作系统、汇编程序masm5.0 四.实验分析1.程序开始先将查好的频率写入到数据段中,定义主程序,当用户从键盘输入时,先判断是否是结束键,如果是结束键则退出,如果不是,再判断是不是1-8之间的数字键,若不是,则跳转到出错处理部分;如果是,则去频率表中调出相应的频率,并进入到发音子程序中。
2.发音PC系列机中,利用8254计数器2的输出,控制扬声器的发生音调,作为机器的报警信号或者伴音信号。
计数器2的OUT 端经过放大后接扬声器,OUT端还和8255A的B端口输出PB1相与。
所以要使扬声器工作,要求8255A的PB1和PB0同时为1。
向43端口中写入计数器2控制字,在AX中设置初值为1234DCH,计数值=1234DCH/频率,然后先低后高向42端口写入计数值。
之后将8255A的PB1和PB0修改为1并将原来的值保存在AH中,以便恢复。
为了建立一个与处理器无关的时间延迟,利用硬件,通过监控端口61H的PB4,使PB4每15.08us触发一次,以产生一个固定不变的时间基准。
Waitf子程序就是产生一个N*15.08us 时间延迟的程序,在CX中放入663产生10ms时延,再向BX中放入100来产生1s的持续时间。
五.参考程序:stacks segment para 'stack' ;定义堆栈stacks db 64 dup('stack...')stacks ends;------------------------------------dseg segment para 'data'table dw 262 ;1dw 294 ;2dw 330 ;3dw 349 ;4dw 392 ;5dw 440 ;6dw 494 ;7dw 523 ;8dseg ends;------------------------------------cseg segment para 'code'assume cs:cseg,ds:dseg,ss:stacksmain proc far ;设置数据段的段地址mov ax,dsegmov ds,axnew_note:mov ah,01h ;是否结束int 21hcmp al,20hje exitmov bx,offset tablecmp al,'1' ;判断是否为1-8的数jb new_notecmp al,'8'ja new_noteand ax,0fhshl ax,1 ;(ax-1)*2 字存储sub ax,2mov si,axmov di,[bx][si]call soundfjmp new_notesoundf proc near ;调用子程序push axpush bxpush cxpush dxpush dimov al,0b6hout 43h,almov dx,12h ;设置方式控制字mov ax,348Chdiv diout 42h,almov al,ahout 42h,alin al,61hmov ah,alor al,3out 61h,almov bx,100delay: mov cx,663 ;10ms 通过循环调用实现call waitfdec bxjnz delaymov al,ahout 61h,al ;恢复8255A端口原来的值pop dipop dxpop cxpop bxpop axretsoundf endpwaitf proc nearpush axwaitf1:in al,61hand al,10h ;判断pb4是0还是1cmp al,ahje waitf1mov ah,alloop waitf1pop axretwaitf endpexit:mov ax,4c00h ;返回DOSint 21hmain endpcseg ends;------------------------------------end main六、代码运行与结果在键盘上按下1-8数字时,扬声器会奏出八个不同的音阶,同时频幕上显示出输入字符;输入Ctrl+C退出,如果输入非1-8或空格字符,程序不予响应。
基于汇编的音乐弹奏程序

基于汇编的音乐弹奏程序夏超群【摘要】PC系列8253定时/计数器的2号计数器被初始化后,可产生扬声器发声的音调信号.文章分析了扬声器驱动电路的工作原理,通过程序控制能使扬声器发出不同频率的声音,进而设计出计算机键盘代替钢琴键弹奏音乐的程序.【期刊名称】《武汉工程职业技术学院学报》【年(卷),期】2011(023)003【总页数】3页(P58-60)【关键词】定时/计数器;频率;扬声器【作者】夏超群【作者单位】武汉工程职业技术学院湖北武汉 430080【正文语种】中文【中图分类】TP332.1+20 引言计算机系统中,由可编程定时/计数器集成芯片,可以为处理器和外设提供时间标记,也可以对外部事件进行计数。
而计数和定时两个概念如果联系起来,很容易让人联想到频率,由频率的振动可以产生声音,频率的高低,决定声音音调的高低。
在考虑发声频率高低时,如果还考虑发声时间的长短,或将二者灵活结合,便会产生不同节拍、不同音调的声音,若声音按乐谱输出即为音乐。
下面从PC系统发声原理及实现方法上,说明如何使用PC键盘八个数字键,代替钢琴键弹奏音乐的程序设计。
1 PC系统的发声原理1.1 定时/计数器8253定时/计数器8253有3个内置的计数器,3个计数器的数据端口地址分别是40H、41H、42H,命令端口地址43H。
3个计数器硬件结构基本相同,每个计数器内有一个16位存放初始值的寄存器;一个16位的输出锁存器,在写入锁存命令时,锁定计数器的当前值;一个16位可对初始值进行减1的减法计数器,其内的值不断递减,减到0时,从端口OUT输出一个脉冲信号。
定时/计数器8253的0号计数器作为日时钟计时,它每秒约发出18次中断以修正时间;1号计数器采用DMA传送数据;2号计数器控制扬声器发声,它其实是一个振荡电路,此振荡电路向扬声器发送用户设定频率的脉冲,当扬声器驱动电路的输出端口控制扬声器为接通状态时,就让OUT2信号通过,经滤波和功放电路,使扬声器发出指定频率的声音[3]。
汇编程序设计--乐曲演奏

΢»úÔ-Àí¿Î³ÌÉè¼Æ_ÒôÀÖÑÝ×à_»ã±à¿Î³ÌÉè¼ÆÎ¢»úÔ-Àí¿Î³ÌÉè¼Æ_ÒôÀÖÑÝ×à_»ã±à¿Î³ÌÉè¼ÆËµÃ÷ÕâÊÇÒ»¸öÒôÀÖ³ÌÐò£¬°´´óд×Öĸ¡°A¡±£¬³ªÀÖÇú¡°ÂêÀöÓÐֻС¸áÑò¡±£» °´´óд×Öĸ¡°B¡±£¬³ªÀÖÇú¡°Ì«ºþ´¬¡±°´´óд×Öĸ¡°C¡±£¬³ªÀÖÇú¡°×£¸£¸è¡±°´"Q"æI£¬Í˳öDATA SEGMENT PARA 'DATA'INFO1 DB 0DH,0AH,'WELCOME YOU TO COME HERE!$'INFO2 DB 0DH,0AH,'this is a music program!$'INFO3 DB 0DH,0AH,'please select!$'INFO4 DB 0DH,0AH,'INPUT ERROR!$'INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'MUSLIST DB 0DH,0AH,'A MUSIC1'DB 0DH,0AH,'B MUSIC2'DB 0DH,0AH,'C MUSIC3'DB 0DH,0AH,'Q EXIT'db 0dh,0ah,'$'MUS_FREG1 DW 330,294,262,294,3 DUP (330)DW 3 DUP (294),330,392,392DW 330,294,262,294,4 DUP (330)DW 294,294,330,294,262,-1MUS_TIME1 DW 6 DUP (25*8),50*8DW 2 DUP (25*8,25*8,50*8)DW 12 DUP (25*8),100*8MUS_FREG2 DW 330,392,330,294,330,392,330,294,330DW 330,392,330,294,262,294,330,392,294DW 262,262,220,196,196,220,262,294,332,262,-1MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100DW 2 DUP(50,50,25,25),100DW 3 DUP(50,25,25),100MUS_FREG3 DW 262,262,294,262,349DW 330,262,262,294,262DW 392,349,262,262,523DW 440,349,262,262,466DW 466,440,262,392,349,-1MUS_TIME3 DW 50,50,100,100,100DW 100,100,50,50,100,100DW 100,100,100,50,50,100DW 100,100,100,100,100,50DW 50,100,100,100,100,100DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP ('STACK')STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODEMAIN PROC FARMOV AX,DATAMOV DS,AXMOV aH, 0 ;0ºÅ¹¦ÄÜMOV AL,4 ;ÏÔʾ·½Ê½ºÅ4·ÅÔÚ ALÖÐ 320*200 ËÄɫͼÐÎ INT 10H ;ÏÔʾÆ÷Êä³ö¿ØÖÆÖжϵ÷ÓÃMOV AH,0BH ;ÖòÊÉ«µ÷É«°åMOV BH,0MOV BL,1 ;BH=0,BL=4,±³¾°É«ÎªºìÉ«INT 10H ;ÏÔʾÆ÷Êä³ö¿ØÖÆÖжϵ÷ÓÃMOV BL,00INT 10H ;ÏÔʾÆ÷Êä³ö¿ØÖÆÖжϵ÷ÓÃ;*****¶¨ÒåÒ»¸öºê*****SHOW MACRO bLEA DX,bMOV AH,9INT 21HENDM;**********************show INFO1show INFO2show INFO3show MUSLISTINPUT: MOV AH,01HINT 21HCMP AL,'Q'CALL MUSIC2JMP EXIT1C0: CMP AL,'C'JNZ exitCALL MUSIC3EXIT1: show INFO5JMP INPUTEXIT:call clearshow INFO4show INFO5show INFO1show INFO2show INFO3show MUSLISTjmp inputRETU: MOV AH,4CH INT 21HMAIN ENDPMUSIC1 PROC NEAR PUSH DSSUB AX,AXPUSH AXLEA SI,MUS_FREG1LEA BP,DS:MUS_TIME1 FREG1: MOV DI,[SI] CMP DI,-1JE END_MUS1MOV DX,DS:[BP]MOV BX,1400CALL GENSOUNDADD SI,2ADD BP,2JMP FREG1END_MUS1:RETMUSIC1 ENDPPUSH BXPUSH CXPUSH DXPUSH DIMOV AL,0B6HOUT 43H,ALMOV DX,12HMOV AX,533H*896DIV DIOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61HMOV AH,ALOR AL,3OUT 61H,ALWAIT1: MOV CX,8FF0H DELAY1: LOOP DELAY1 DEC BXJNZ WAIT1MOV AL,AHOUT 61H,ALPOP DIPOP DXPOP CXPOP BXPOP AXRETGENSOUND ENDPMUSIC2 PROC NEAR PUSH DSSUB AX,AXPUSH AXLEA SI,MUS_FREG2LEA BP,DS:MUS_TIME2 FREG2: MOV DI,[SI] CMP DI,-1JE END_MUS2MOV DX,DS:[BP]MOV BX,1400CALL GENSOUNDADD SI,2ADD BP,2JMP FREG1END_MUS2:RETMUSIC2 ENDPMUSIC3 PROC NEAR PUSH DSSUB AX,AXPUSH AXLEA SI,MUS_FREG3LEA BP,DS:MUS_TIME3 FREG3: MOV DI,[SI] CMP DI,-1JE END_MUS3 MOV DX,DS:[BP] MOV BX,1400 CALL GENSOUND ADD SI,2ADD BP,2JMP FREG1END_MUS3:RETMUSIC3 ENDP clear proc near push axpush bxpush cxpush dxmov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hpop dxpop cxpop bxpop axretclear endp CODE ENDS END MAIN。
音乐演奏程序设计

课程设计任务书学生姓名:王琨专业班级:自动化1105班指导教师:向馗工作单位:自动化学院题目: 音乐演奏程序设计要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.使用汇编语言设计一个在计算机上运行的音乐演奏程序。
2.屏幕显示钢琴图像。
3.实现以下附加功能:按“D”键,加快播放速度,按“E”键,降低播放速度。
4. 按"X"鍵,退出。
5.撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:12月30日-----12月31日查阅资料及方案设计1月2日-----1月3日编程1月6日调试程序1月7日-----1月8日撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日摘要汇编语言(Assembly Language)是面向机器的程序设计语言。
在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。
因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
使用汇编语言,可以访问所有能够被访问的软、硬件资源。
使用的编译软件是masm for windows ,MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32asm,是Windows下开发汇编的利器。
汇编语言课程设计 音乐点播程序

一.背景分析及意义随着计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。
而汇编语言做为计算机专业大学生必修之课,每个做为本专业的学生对汇编的理解和学习就显的尤为重要。
汇编语言是计算机能够提供给用户使用的最快而又最好最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显的必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。
这次课程设计是在学习汇编语言与实践相结合的一次综合应用。
通过具体的问题分析、设计、调试、运行程序。
在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。
就这个程序具体而言:知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表;然后编写程序依次取出表中的频率值和时间值,调用GENSOUNDF程序发出各种声音。
这个程序最终通过菜单所提示的信息选取所要欣赏的音乐,是执行此程序后,会很有速且有效的使扬声器接通并发出音频为896 Hz的声音。
二.总体设计思想ROM BIOS 中的BEEP子程序能根据BL中给出的时间计数植控制8254定时器,产生持续时间计数值控制8254定时器,产生持续时间为1个或几个0.5 秒,频率为896Hz的声音。
通过对BEEP的修改,可产生任一频率的声音。
用汇编语言写的GENSOUNG,能使Pc 机发出指定频率和指定延时的声音。
它是一个很好的通用发声程序。
组成乐曲的每个音符的频率值和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用GENSOUND程序发出各种声音。
本程序就是通过GENSOUNG程序演奏乐曲的例子。
该乐曲点播程序由一个乐曲点播主程序和五个子程序组成。
(1)歌曲设置程序;(2)打开另一个显示窗口程序;(3)接收键盘输入程序;(4)返回程序;(5)发声程序。
汇编梦幻钢琴程序设计报告

《汇编语言程序设计》综合程序设计实验报告题目:梦幻钢琴一、项目简介利用汇编语言设计一个模拟钢琴演奏程序。
在显示器上显示出钢琴的键盘,以计算机键盘的相应键模拟钢琴键盘进行乐曲的演奏。
在PC机键盘上按键,屏幕上对应的钢琴键出现跳动,并发出相应音符的声音,例如:按字母“A”,发C大调 do按字母“S”,发C大调 re按字母“D”,发C大调 me按字母“F”,发C大调 fa……按下f1、f2、f3、f4、f5会依次播放程序中所添加的歌曲;如果想要使该歌曲加速播放,可以同时按住“shift”键和“+”键;若要减速播放,则按“shift”键和“-”键。
在弹奏钢琴曲时,直接按动“A”、“S”、“D”、“F”、“G”、“H”、“J”键表示的是中音区,高音区用右shift键加以上键弹奏,低音区用左shift键加以上键弹奏,也可以通过C、D转换是弹奏变为C大调或D 大调。
二、小组成员具体分工1、界面设计-刘静(1)、屏幕设置MOV AH,00HMOV AL,0DHINT 10HMOV AH,0BH ;11号功能,设置背景颜色MOV BL,00HINT 10H(2)、钢琴绘制,绘制键盘时的坐标的确定:白色琴键坐标:ST_LX DW 50,61,72,83,94,105,116 ;起点横坐标ST_MX DW 127,138,149,160,171,182,193ST_HX DW 204,215,226,237,248,259,270ST_Y DW 50 ;起点纵坐标ED_LX DW 60,71,82,93,104,115,126 ;终点纵坐标ED_MX DW 137,148,159,170,181,192,203ED_HX DW 214,225,236,247,258,269,280ED_Y DW 90 ;终点纵坐标黑色琴键坐标BT_X DW 57,68,90,101,112 ;起点横坐标DW 134,145,167,178,189DW 211,222,244,254,265BT_Y DW 50 ;起点纵坐标BD_X DW 64,75,97,108,119 ;终点横坐标DW 141,152,174,185,196DW 218,229,251,262,273BD_Y DW 70 ;终点纵坐标宏定义绘制填充矩形:DRAW MACRO START_X,START_Y,END_X,END_Y,COLOR宏定义绘制不填充矩形:DRAWSQRE MACRO START_X,START_Y,END_X,END_Y,COLOR最后在主程序INIT PROC NEAR调用以上定义的宏来绘制琴键。
51单片机汇编语言音乐程序

51单片机汇编语言音乐程序51单片机汇编语言音乐程序 01两只老虎NEXT BIT 10H 定义标志位ORG 0000HJMP MAINORG 000BHJMP TONEORG 001BHJMP BEATORG 0100HMAIN MOV TMOD11HMOV TH0R2MOV TL0R3MOV TH13CHMOV TL10B0HMOV R400HMOV DPTRTABYD MOV AR4 取音调数据MOVC AADPTRMOV R2AXRL A00HJNZ JP 直接取节拍CALL PD 判断指针是否溢出 MOV AR4MOVC AADPTRMOV R3AXRL A0FFHJZ JPMOV AR2XRL A0FFHJNZ MAINJP INC R4 取节拍数据CALL PDMOV AR4MOVC AADPTRMOV R5ASETB EASETB ET0SETB ET1SETB TR0SETB TR1SETB NEXTJB NEXTINC R4CALL PDJMP YDCJNE A00HL1INC DPHL1 RET音调产生子程序TONE CPL P20MOV TH0R2MOV TL0R3RETI节拍产生子程序BEAT DJNZ R5L2MOV TH13CHMOV TL10B0HL3 RETIL2 CLR TR0CLR TR1CLR NEXTJMP L3两只老虎音符表TAB DB 0FBH0F9H08H0FCH066H08H0FCH0C7H08H0FBH0F9H08H DB 0FBH0F9H08H0FCH066H08H0FCH0C7H08H0FBH0F9H08H DB 0FCH0C7H08H0FCH0F3H08H0FDH4AH10H0FCH0C7H08H DB 0FCH0F3H08H0FDH4AH08H0FDH4AH04H0FDH95H04HDB 0FDH4AH04H0FCH0F3H04H0FCH0C7H08H0FBH0F9H08H DB 0FDH4AH04H0FDH95H04H0FDH4AH04H0FCH0F3H04HDB 0FCH0C7H08H0FBH0F9H08H0FCH66H08H0FAH93H08H DB 0FBH0F9H08H00H08H0FCH66H04H0FAH93H08HDB 0FBH0F9H08H00H10H0FFH0FFHEND02祝你平安ORG 0000HLJMP STARTORG 000BHINC 20H 中断服务中断计数器加1MOV TH00D8HMOV TL00EFH 12M晶振形成10毫秒中断RETISTARTMOV SP50HMOV TH00D8HMOV TL00EFHMOV TMOD01HMOV IE82HMUSIC0NOPMOV DPTRDAT 表头地址送DPTRMOV 20H00H 中断计数器清0MOV B00H 表序号清0MUSIC1NOPCLR AMOVC AADPTR 查表取代码JZ END0 是00H则结束CJNE A0FFHMUSIC5LJMP MUSIC3MUSIC5NOPMOV R6AINC DPTRMOV ABMOVC AADPTR 取节拍代码送R7MOV R7ASETB TR0 启动计数MUSIC2NOPCPL P33MOV AR6MOV R3ALCALL DELMOV AR7CJNE A20HMUSIC2 中断计数器 20H R7否不等则继续循环MOV 20H00H 等于则取下一代码INC DPTRINC BLJMP MUSIC1MUSIC3NOPCLR TR0 休止100毫秒MOV R20DHMUSIC4NOPMOV R30FFHLCALL DELDJNZ R2MUSIC4INC DPTRLJMP MUSIC1END0NOPMOV R264H 歌曲结束延时1秒后继续MUSIC6MOV R300HLCALL DELDJNZ R2MUSIC6LJMP MUSIC0DELNOPDEL3MOV R402HDEL4NOPDJNZ R4DEL4NOPDJNZ R3DEL3RETNOPDATdb 26h20h20h20h20h20h26h10h20h10h20h80h26h20h30h20h db 30h20h39h10h30h10h30h80h26h20h20h20h20h20h1ch20h db 20h80h2bh20h26h20h20h20h2bh10h26h10h2bh80h26h20h db 30h20h30h20h39h10h26h10h26h60h40h10h39h10h26h20h db 30h20h30h20h39h10h26h10h26h80h26h20h2bh10h2bh10h db 2bh20h30h10h39h10h26h10h2bh10h2bh20h2bh40h40h20h db 20h10h20h10h2bh10h26h30h30h80h18h20h18h20h26h20h db 20h20h20h40h26h20h2bh20h30h20h30h20h1ch20h20h20h db 20h80h1ch20h1ch20h1ch20h30h20h30h60h39h10h30h10h db 20h20h2bh10h26h10h2bh10h26h10h26h10h2bh10h2bh80h db 18h20h18h20h26h20h20h20h20h60h26h10h2bh20h30h20h db 30h20h1ch20h20h20h20h80h26h20h30h10h30h10h30h20h db 39h20h26h10h2bh10h2bh20h2bh40h40h10h40h10h20h10h db 20h10h2bh10h26h30h30h80h00HEND03生日歌ORG 0000HJMP STARTORG 000BHJMP TIM0ORG 0030HSTARTMOV TMOD01HMOV IE82H START0MOV 30H00H NEXT MOV A30HMOV DPTRTABLEMOVC AADPTRMOV R2AJZ END0ANL A0FHMOV R5AMOV AR2SWAP AANL A0FHJNZ SINGCLR TR0JMP D1SING DEC AMOV 22HARL AMOV DPTRTABLE1MOVC AADPTRMOV TH0AMOV 21HAMOV A22HRL AINC AMOVC AADPTRMOV TL0AMOV 20HASETB TR0D1 CALL DELAYINC 30HJMP NEXTEND0 CLR TR0JMP START0 TIM0 PUSH ACCPUSH PSWMOV TH021HMOV TL020HCPL P37POP PSWPOP ACCRETIDELAY MOV R702D2 MOV R4187D3 MOV R3248DJNZ R3DJNZ R4D3DJNZ R7D2DJNZ R5DELAYRETTABLE1DW 64260644006452464580DW 64684647776482064898DW 64968650306505865110DW 651576517865217 TABLEDB 82H01H81H94H84HDB 0B4H0A4H04HDB 82H01H81H94H84HDB 0C4H0B4H04HDB 82H01H81H0F4H0D4HDB 0B4H0A4H94HDB 0E2H01H0E1H0D4H0B4HDB 0C4H0B4H04HDB 82H01H81H94H84HDB 0B4H0A4H04HDB 82H01H81H94H84HDB 0C4H0B4H04HDB 82H01H81H0F4H0D4HDB 0B4H0A4H94HDB 0E2H01H0E1H0D4H0B4HDB 0C4H0B4H04HDB 00HEND04八月桂花香ORG 0000HLJMP STARTORG 000BHINC 20H 中断服务中断计数器加1 MOV TH00D8HMOV TL00EFH 12M晶振形成10毫秒中断RETISTARTMOV SP50HMOV TH00D8HMOV TL00EFHMOV TMOD01HMOV IE82HMUSIC0NOPMOV DPTRDAT 表头地址送DPTRMOV 20H00H 中断计数器清0MUSIC1NOPCLR A A清零MOVC AADPTR 查表取代码JZ END0 是00H则结束CJNE A0FFHMUSIC5 如果是休止符往下执行LJMP MUSIC3MUSIC5NOPMOV R6A R6 18H音符的频率INC DPTR DPTR加一MOV A0MOVC AADPTR 取节拍代码送R7MOV R7A R7 30H音符发音的时间SETB TR0 启动计数MUSIC2NOPCPL P23 P23是音乐输出引脚MOV AR6MOV R3A 籖3 R6 18HLCALL DELMOV AR7CJNE A20HMUSIC2 中断计数器 20H R7否不等则继续循环MOV 20H00H 等于则取下一代码INC DPTRLJMP MUSIC1MUSIC3NOP 休止100毫秒CLR TR0MOV R20DH R2 13MUSIC4NOPMOV R30FFH R3 255LCALL DELDJNZ R2MUSIC4INC DPTRLJMP MUSIC1END0NOPMOV R20FFH 歌曲结束延时1秒后继续MUSIC6MOV R300HLCALL DELDJNZ R2MUSIC6LJMP MUSIC0DELNOPDEL3MOV R402HDEL4NOPDJNZ R4DEL4NOPDJNZ R3DEL3RETNOPDATDB 18H 30H 1CH 10H DB 20H 40H 1CH 10H DB 18H 10H 20H 10H DB 1CH 10H 18H 40H DB 1CH 20H 20H 20H DB 1CH 20H 18H 20H DB 20H 80H 0FFH 20H DB 30H 1CH 10H 18H DB 20H 15H 20H 1CH DB 20H 20H 20H 26H DB 40H 20H 20H 2BH DB 20H 26H 20H 20H DB 20H 30H 80H 0FFH DB 20H 20H 1CH 10H DB 18H 10H 20H 20H DB 26H 20H 2BH 20H DB 30H 20H 2BH 40H DB 20H 20H 1CH 10H DB 18H 10H 20H 20H DB 26H 20H 2BH 20H DB 30H 20H 2BH 40H DB 20H 30H 1CH 10HDB 18H 20H 15H 20H DB 1CH 20H 20H 20H DB 26H 40H 20H 20H DB 2BH 20H 26H 20H DB 20H 20H 30H 80H DB 20H 30H 1CH 10H DB 20H 10H 1CH 10H DB 20H 20H 26H 20H DB 2BH 20H 30H 20H DB 2BH 40H 20H 15H DB 1FH 05H 20H 10H DB 1CH 10H 20H 20H DB 26H 20H 2BH 20H DB 30H 20H 2BH 40H DB 20H 30H 1CH 10H DB 18H 20H 15H 20H DB 1CH 20H 20H 20H DB 26H 40H 20H 20H DB 2BH 20H 26H 20H DB 20H 20H 30H 30H DB 20H 30H 1CH 10H DB 18H 40H 1CH 20H DB 20H 20H 26H 40H DB 13H 60H 18H 20H DB 15H 40H 13H 40HDB 18H 80H 00Hend05兰花草SPK EQU P33 蜂鸣器所在端口ORG 0000HJMP STARTSTARTMOV R300HNEXTMOV AR3MOV DPTRTABLEMOVC AADPTRJZ STARTMOV R7AINC R3MOV AR3MOVC AADPTRMOV R2AACALL SONGINC R3SJMP NEXT歌曲播放子程序SONGMOV AR2 取出节拍RL AJNZ KEEPMOV A01HKEEPMOV R2AREPEATACALL EIGHTHDJNZ R2REPEATRET产生18拍延时子程序EIGHTHMOV AR7 查表取出廷时参数保存到R4MOV DPTRDELAY_TMOVC AADPTRMOV R4AMOV AR7 查表取出18拍周期数保存到R5 MOV DPTRS_PARAMOVC AADPTRMOV R5ANEXTCYCACALL SOUNDDJNZ R5NEXTCYCRET发声子程序SOUNDSETB SPKACALL SDELAYCLR SPKACALL SDELAYRET延时子程序SDELAYMOV AR4 廷时值在R4内MOV R0AXL2MOV R103HDL1NOPDJNZ R1DL1DJNZ R0XL2RET18拍周期表S_PARADS 1DHDB 15H16H00DB 19H00H1CH00H1FH21H00H25HDB 00H29H2CH00H31H34H37H00HDB 3EH41H00H49H00H52H57H00HDB 62H延时参数表DELAY_TDS 1DHDB 7EH77H00HDB 6AH00H5EH00H54H4FH00H46HDB 00H3FH3BH00H35H32H2FH00HDB 2AH27H00H23H00H1FH1DH0C0HDB 1AH歌曲表TABLEDW 2202H2902H2902H2902H2906H2702H 我从山中来DW 2502H2702H2502H2402H2208H 带着兰花草DW 2E02H2E02H2E02H2E02H2E06H2C02H 种在小园中DW 2902H2C02H2D02H2A02H2908H 祈祷花开早DW 2902H2E02H2E02H2C02H2906H2702H 一日看三回DW 2502H2702H2502H2402H2206H1D02H 看得花时过DW 1D02H2502H2502H2402H2206H2902H 兰花却依然DW 2702H2502H2402H2002H2208H 苞也无一个DW 0000HEND。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉工程职业技术学院学报
J ur l W u n i e i tt e o na of ha Eng ne rngI iut ns
VO1 2 . 3 NO. 3
S pe b r 0 1 e tm e 2 1
基 于 汇 编 的音 乐 弹奏 程 序
夏 超 群
( 汉工程 职业技 术 学 院 湖 北 武 汉 :3 0 0 武 40 8 )
摘 要
P C系列 8 5 2 3定时/ 数 器的 2号计数 器被初 始化 后 , 计 可产 生扬 声器发 声的音 调信 号 。文
章分 析 了扬 声 器驱动 电路 的工 作原理 , 通过 程序 控制 能使 扬声 器发 出不 同频 率 的声音 , 而设 计 出 进
由扬 声器 驱动 电路 图可 以看 出 ,2 5或 等效 电 85
路 输 出寄存器 第 0位 , 制 8 5 / 2 4定 时器 门控 控 238 5 信号( GAT 2 的状 态 , E) 即是否允 许 2号 计数 器 开始 工作 ; 出寄存器 第 1位 , 制扬声 器 的与 门电路 是 输 控 否接 通 , 即控制扬 声 器 是否 能 接 收 2号计 数 器 的输
音 。
片 , 以为处 理器 和外设 提供 时 间标 记 , 可 也可 以对外 部 事件进 行计 数 。而计 数和 定时两 个概 念如 果联 系 起 来 , 容 易让人 联想 到频 率 , 很 由频 率 的振动 可 以产 生声音 , 频率 的高 低 , 定声 音音 调 的高低 。在考 虑 决
发 声频 率高 低时 , 如果 还考 虑发声 时 间的长 短 , 将 或
1 2 扬声 器驱 动 系统 .
计算 机上 大多数 数据 的输入 / 出 , 是 由系统 输 都
主板 上 的 8 5 2 5可 编程 外 围 接 口芯 片 或 等效 电路 管
二者灵 活结 合 , 会 产 生 不 同 节 拍 、 同 音 调 的 声 便 不 音 , 声音 按 乐谱 输 出 即 为音 乐 。下 面 从 P 若 C系 统 发声原 理及 实 现 方 法 上 , 明如 何 使 用 P 说 C键 盘 八
计算 机键 盘代 替钢琴 键 弹奏音 乐的程 序 。
关键 词 定 时/ 计数 器 ; 率 ; 声 器 频 扬 中图分类 号 : 3 2 1 文献 标识 码 :A 文章 编号 :6 13 2 ( 0 1 0 —0 80 TP 3 . +2 1 7 —5 4 2 1 ) 30 5 —3
定 频 率 的 脉 冲 。当 8 5 2 5或 等 效 电 路输 出寄 存 器第 1 为 1时 , 位 扬声 器 为接通 状 态 , 以接 收 2号 计数 可 器 输 出 的脉 冲信号 , 而控 制 扬 声 器 器 发 出一定 频 从 率的声音。当 85 2 5端 口或 等 效 电路 输 出寄 存 器低 两位 至 少 有 一 位 为 0时 , 使 扬 声 器 停 止 发 声L 。 可 2 ] 由于 2号计 数器 输 出信 号 可 以输 出不 同频 率 , 输 但
选 用 8 5 / 2 4定 时器 芯 片 内 的 2号计 数 器 , 23 8 5 2号 计 数器 产 生一 个振 荡 电路 , 电路 向扬 声 器 发送 指 该
w t: o x, m vc 0
; at w i
ddl l o :o p ddl de x cb
j zwt n
图 1 扬 声 器 驱 动 电 路 图
数 器 的当前 值 ; 个 1 一 6位可 对初 始值 进行减 1的减 法 计 数 器 , 内 的 值 不 断 递 减 , 到 0时 , 端 口 其 减 从 O UT输 出一个 脉 冲信号 。 定 时/ 计数 器 8 5 2 3的 0号 计数 器作 为 日时钟计 时, 它每 秒 约 发 出 1 8次 中 断 以修 正 时 间 ; 计 数 1号
个数 字键 , 代替 钢琴键 弹奏 音乐 的程 序设计 。
理 。8 5 2 5内有三个 8位寄存 器 , 别用 于 输 入或 输 分
出功能 , 其输 出寄存 器 的低 两 位用 来 选 择 扬声 器 的 驱 动方 式 , 采用 8 5 不 2 5的计 算 机 , 通过 等 效 电路 选 择 扬声 器 的 驱 动 方 式 , 们 所 使 用 的 端 口地 址 是 它
收 稿 日期 :0 卜O —O 2 1 42 作者 简 介 : 超 群 ( 9 3 ) 女 , 师 . — i x q 夏 17 ̄ , 讲 E mal c @wg y n t : x . e
夏 超 群 : 于 汇 编 的音 乐 弹 奏 程 序 基
5 9
出信 号 ( OUT ) 2 。综 合 上 面 分析 知 , 2 5或 等 效 电 85 路 输 出寄存 器 第 0位为 1时 , 通 GATE 选 2门电 路 ,
61 [ H 2 ]
。
具 体连 接见扬 声器 驱动 电路 图 1 。
1 P 系统 的发 声原 理 C
1 1 定 时/ 数器 85 . 计 23
定 时/ 计数 器 8 5 2 3有 3个 内置 的计 数 器 , 3个
计 数器 的数 据 端 口地址 分 别 是 4 H、 1 4 H, 0 4 H、 2 命 令 端 口地 址 4 H。3个 计 数 器 硬 件 结 构基 本 相 同 , 3 每个 计数 器 内有一 个 1 6位存 放初 始值 的寄存 器 ; 一 个1 6位 的输 出锁 存 器 , 写 入锁 存 命 令 时 , 定计 在 锁
器 采用 DMA 传 送 数 据 ; 2号 计 数器 控 制 扬 声 器 发
0 引 言
计算 机 系 统 中 , 由可 编 程 定 时/ 数 器 集 成 芯 计
声 , 其实是 一个 振荡 电路 , 它 此振 荡 电路 向扬 声器发 送用户 设定 频率 的 脉 冲 , 当扬 声 器 驱动 电路 的输 出 端 口控 制扬 声器 为接通 状 态 时 , 让 OUT 就 2信 号 通 过 , 滤波 和功 放 电路 , 经 使扬 声器 发 出指 定频 率 的声