电子琴初版.doc_第1页
电子琴初版.doc_第2页
电子琴初版.doc_第3页
电子琴初版.doc_第4页
电子琴初版.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 任务编写一个简易电子音乐播放程序。2 基本要求1 将存储于内存中的音乐数据播出(格式自定义)。2 能够播出21个音阶(低音17、中音17、高音17)。3 扩展要求1 可以播出长短音(分长音、中音、短音)。2 可从文件中读音乐数据(格式自定义)。源 码DATASEGMENTD1DB *,0dh,0ah,$D2DB * This is a simple electronic-piano *,0DH,0AH,$D3DB * Designed by ZZY ,Student id :20105495 *,0DH,0AH,$D4DB * Please follow the instructions ! *,0DH,0AH,$D5DB 0dh,0ah,1. Enter Q to chose edit(1-7),0DH,0AH,$D6DB 2. Enter W to chose play,0DH,0AH,$D7DB 2-1. Enter z x c to chose low mid high,0DH,0AH,$D8 DB 2-2. Enter v b n to chose duanyin zhongyin changyin,0DH,0AH,$D9 DB 2-3. Press 1-7 to play ,0DH,0AH,$D10DB 3. Press q to back set,0dh,0ah,$D11DB 4. Press ESC to quit,0dh,0ah,0dh,0ah,$STR1DB 100DB ?DB 100 DUP(?)STR2DW 100 DUP(?)DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,D1MOVAH,09HINT21H LEADX,D2MOVAH,09HINT21H LEADX,D3MOVAH,09HINT21H LEADX,D4MOVAH,09HINT21HLEADX,D1MOVAH,09HINT21HLEADX,D5MOVAH,09HINT21HLEADX,D6MOVAH,09HINT21HLEADX,D7MOVAH,09HINT21HLEADX,D8MOVAH,09HINT21HLEADX,D9MOVAH,09HINT21HLEADX,D10MOVAH,09HINT21HLEADX,D11MOVAH,09HINT21HQ1:MOV AH,0BH;检查键盘状态INT 21H;DOS调用CMP AL,00H;有键按下?JZ Q1;无键按下,转Q1 MOV AH,01H;键盘输入并回显 INT 21H CMP AL,1BH;有键是ESC? JZ Q2;是,退出CMPAL,Q;是Q?JZQ3;编辑播放CMPAL,W;是W?JZQ4;弹奏歌JMPQ1Q2:MOV AH,4CH;带返回码结束(是ESC结束)INT21HQ3:MOVDX,OFFSET STR1MOVAH,0AHINT21HMOVDL,0AHMOV AH,02HINT21HMOVDL,0DHINT21HMOVSI,OFFSET STR1+2MOVDI,OFFSET STR2MOVCL,STR1+1MOVCH,0AGAIN:MOVAL,BYTE PTRSICMPAL,1JZX1CMPAL,2JZX2CMPAL,3JZX3CMPAL,4JZX4CMPAL,5JZX5CMPAL,6JZX6CMPAL,7JZX7X1:MOVWORD PTRDI,248JMPXX2:MOVWORD PTRDI,278JMPXX3:MOVWORD PTRDI,312JMPXX4:MOVWORD PTRDI,330JMPXX5:MOVWORD PTRDI,371JMPXX6:MOVWORD PTRDI,416JMPXX7:MOVWORD PTRDI,467X:INC SIINCDIINCDILOOP AGAINMOVWORD PTRDI,0JMPBOFANGQ4:MOVAH,01HINT21HCMPAL,7AH;是z吗?JZL;是跳转选发声长短并输出低音CMPAL,78H;是x吗?JZM;是跳转选发声长短并输出中音CMPAL,63H;是c吗?JZH;是跳转选发声长短并输出高音JMPQ4L:MOV AH,0BHINT 21HCMP AL,00H;无按键按下 JZ L;结果为0,回到L MOV AH,01H;键盘输入并回显 INT 21HCMPAL,76H;是v吗?JNZL_1;不是跳转MOVDX,00200H;是置发音延时次数最少JMPA8;跳转到低音设定L_1:CMPAL,62H;是b吗?JNZL_2;不是跳转MOVDX,00400H;是置发声延时次数中等JMPA8;跳转到低音设定L_2:CMPAL,6EH;是n吗?JNZL;不是跳转MOVDX,00800H;是置发声延时次数最长JMPA8;跳转到低音设定M:MOV AH,0BHINT 21HCMP AL,00HJZ M MOV AH,01HINT 21HCMPAL,76HJNZM_1MOVDX,00200HJMPA8_1;跳转到中音设定M_1:CMPAL,62HJNZM_2MOVDX,00400HJMPA8_1;跳转到中音设定M_2:CMPAL,6EHJNZMMOVDX,00800HJMPA8_1;跳转到中音设定H:MOV AH,0BHINT 21HCMP AL,00H JZ H MOV AH,01H INT 21HCMPAL,76HJNZH_1MOVDX,00200HJMPA8_2;跳转到高音设定H_1:CMPAL,62HJNZH_2MOVDX,00400HJMPA8_2;跳转到高音设定H_2:CMPAL,6EHJNZHMOVDX,00800HJMPA8_2;跳转到高音设定A8:MOV AH,0BH;低音设定 INT 21H CMP AL,00H;有键按下? JZ A8;无键按下,转A8 MOV AH,08H;键盘输入无回显 INT 21H CMP AL,1BH;有键按下,是ESC键? JZ A0;是,结束CMPAL,31HJNZA1 MOVBX,4798;计数初值=1.19MHZ/248HZ(统一选B音调)JMPA7A0:MOVAH,4CHINT21HA1:CMPAL,32HJNZA2MOVBX,4280JMPA7A2:CMPAL,33HJNZA3MOVBX,3814JMPA7A3:CMPAL,34HJNZA4MOVBX,3606JMPA7A4:CMPAL,35HJNZA5MOVBX,3208JMPA7A5:CMPAL,36HJNZA6MOVBX,2861JMPA7A6:CMPAL,37HJNZA9MOVBX,2548A7:CALLSOUND;调用发声子程序JMPA8A9:CMPAL,71H;是q吗?JZA10;是q,转到重新设置JMPA8A10: MOVDX,qMOVAH,02HINT21HCALLQ1A8_1:MOV AH,0BH;中音设定 INT 21H CMP AL,00H;有键按下? JZ A8_1;无键按下,转A8_1 MOV AH,08H INT 21H CMP AL,1BH;有键按下,是ESC键? JZ A0_1;是,结束CMPAL,31HJNZA1_1MOVBX,2404JMPA7_1A0_1:MOVAH,4CHINT21HA1_1:CMPAL,32HJNZA2_1MOVBX,2140JMPA7_1A2_1:CMPAL,33HJNZA3_1MOVBX,1907JMPA7_1A3_1:CMPAL,34HJNZA4_1MOVBX,1800JMPA7_1A4_1:CMPAL,35HJNZA5_1MOVBX,1604JMPA7_1A5_1:CMPAL,36HJNZA6_1MOVBX,1429JMPA7_1A6_1:CMPAL,37HJNZA9_1MOVBX,1273A7_1:CALLSOUND;调用发声子程序JMPA8_1A9_1:CMPAL,71H;是q吗?JZA10_1;是q,转到重新设置JMPA8_1A10_1: MOVDX,qMOVAH,02HINT21HCALLQ1A8_2:MOV AH,0BH;高音设定 INT 21H CMP AL,00H;有键按下? JZ A8_2;无键按下,转A8_2 MOV AH,08H INT 21H CMP AL,1BH;有键按下,是ESC键? JZ A0_2;是,结束CMPAL,31HJNZA1_2MOVBX,1202JMPA7_2A0_2:MOVAH,4CHINT21HA1_2:CMPAL,32HJNZA2_2MOVBX,1070JMPA7_2A2_2:CMPAL,33HJNZA3_2MOVBX,954JMPA7_2A3_2:CMPAL,34HJNZA4_2MOVBX,900JMPA7_2A4_2:CMPAL,35HJNZA5_2MOVBX,802JMPA7_2A5_2:CMPAL,36HJNZA6_2MOVBX,715JMPA7_2A6_2:CMPAL,37HJNZA9_2MOVBX,637A7_2:CALLSOUND;调用发声子程序JMPA8_2A9_2:CMPAL,71H;是q吗?JZA10_2;是q,转到重新设置JMPA8_2A10_2: MOVDX,qMOVAH,02HINT21HCALLQ1SOUNDPROCNEAR;段内调用方式PUSHAXPUSHBXPUSHCXPUSHDXMOVAL,10110110B;8253计数器2,模式3,计数初值16位,二进制OUT43H,AL MOV AX,BX;设定计数初值nOUT42H,AL;写入初值低8位进入2号定时器MOVAL,AHOUT42H,AL;写入初值高8位进入2号定时器INAL,61H;读8255的PB口原始初始值MOVAH,AL;保留到AHORAL,00000011B;使PB0/PB1均为1OUT61H,AL;打开GATE2门,输出方波到扬声器MOVCX,0FFFFH ;置CX=65535MOVBX,DX;DX决定发音长短DELAY:LOOPDELAY;延时(LOOP参数为CX)DECBX;将BX指定内容减一JNZDELAYMOV AL,AH;取回8255的PB口原初始值OUT61H,AL;恢复8255的PB口POPDXPOPCXPOPBXPOPAXRETSOUNDENDPBOFANG:IN AL,61HOR AL,00000011BOUT 61H,ALAGA:MOV SI,OFFSET STR2LAST: CMP WORD PTRSI,0JE AGAMOV DX,12HMOV AX,34DEHDIV WORD PTRSIOUT 42H,ALMOV AL,AHOUT 42H,ALMOV CX,0FFFFHMOV BX,400HDELAY1:LOOP DELAY1DEC BXJNZ DELAY1ADD SI,2MOV AH,0BH;检查键盘状态INT 21H;DOS调

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论