汇编课设(电子钢琴:源代码)

这篇博客分享了一次汇编课设,实现了类似小霸王游戏机的电子钢琴。作者提供了编译器下载链接,并提醒输入时注意区分大小写,启动需输入大写以运行复杂版。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现结果


程序的启动有点像小霸王游戏机的游戏,喜欢汇编的朋友可以发信与我一起讨论,发声程序参考的是一本汇编教材,程序写作和上传相隔有点久远,记不太清,千行代码,算是学生时代一个比较得意的课设

编译器下载

编译器可在我的上传资源中查找,已注明:汇编编译器
https://download.csdn.net/download/m0_37772174/10837741

注意事项

输入严格区分大小写,启动时应输入大写来C启动复杂版钢琴

汇编代码

;作者:cclplus
;仅供学习交流使用
DATA   SEGMENT
MEM1	DW 200 DUP(0)
MEM2 DW 200 DUP(0);用于记录输入
Gao1   DB  0AH,  0DH,  'Hello User.THIS  IS  GMusic!'
	DB  0AH,  0DH,	'Enjoy music!$'
Gao2   DB  0AH,  0DH,  'INPUT  ERROR!$'
Gao3   DB  0AH,  0DH,  'PLEASE  INPUT AGAIN!$'
Cue_list    DB  0AH,  0DH,  '*****************************'            
             DB  0AH,  0DH,  'PressB   Begin your music lite'
                 DB  0AH,0DH,'PressC Begin your music Gao'
              DB  0AH,  0DH,  'PressP  Play back'
             DB  0AH,  0DH,  '*****************************'
	     DB  0AH,  0DH,  '$'
soundcolor dw 0     ;音色缓存,用于改变播放或弹奏时琴上音响和琴面上点阵的颜色 
key_tune dw 0      ;按键状态缓存,用于判断是否有手动按键,1为有,0为无
keynum dw 1       ;按键编号缓存,用于提取对应的按键位置
 delay_time dw 7000  ;延时缓存,用于播放时存入bx中来计数
  count dw 0;
	     ;------------------------------进度条字符-----------------------
st_load db 10                                               ;起始行
     db 4                                                 ;起始列
     db 0bh                                               ;字体颜色
     db 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII'
     db 00
;------------------------------字符定义-----------------------
start_col db ?                                              ;存储起始行
text db 14                                                 ;起始行
     db 2                                                ;起始列
     db 0fh                                              ;字体颜色
     db 'MUSIC    ^_^',0ffh,0ffh         ;显示字
     db '                HAVE A GOOD TIME!',0ffh         ;以0ffh来判断是否换行
     db ' [-1-2-3-4-5-6-7-8-]',0ffh
     db 'Press   p: replay',0ffh
     db 'Press   Esc: exit',0ffh
     db 00
d_text db 14                                                 ;起始行
     db 2                                                ;起始列
     db 0fh                                              ;字体颜色
     db 'MUSIC    ^_^',0ffh,0ffh         ;显示字
     db '                HAVE A GOOD TIME!',0ffh         ;以0ffh来判断是否换行
      db '  [-1-2-3-4-5-6-7-]',0ffh
     db 'g [ q w e r t y u ]  p:replay  ',0ffh
     db 'z [ a s d f g h j ]   enter: stop',0ffh
     db 'd [ z x c v b n m ]    Esc: exit',0ffh
     db 00
;------------------------------高级版白色琴键坐标-------------------
d_st_lx dw  50,61,72,83,94,105,116                            ;起点横坐标
      dw  127,138,149,160,171,182,193                       
      dw  204,215,226,237,248,259,270
d_st_y  dw  50                                            ;起点纵坐标
d_ed_lx dw  60,71,82,93,104,115,126                           ;终点横坐标
      dw  137,148,159,170,181,192,203            
      dw  214,225,236,247,258,269,280
d_ed_y  dw  90                                            ;终点纵坐标
;------------------------------高级版黑色琴键坐标--------------------------
d_bt_x  dw 57,68,90,101,112                                  ;起点横坐标
      dw 134,145,167,178,189 
      dw 211,222,244,254,265
d_bt_y  dw  50                                            ;起点纵坐标
d_bd_x  dw  64,75,97,108,119                                ;终点横坐标
      dw  141,152,174,185,196
      dw  218,229,251,262,273
d_bd_y  dw  70                                        
;----------------------------简版乐器白色琴键坐标-------------------
st_lx dw  50,80,110,140,170,200,230,260                          ;起点横坐标
st_y  dw  50                                            ;起点纵坐标
ed_lx dw 70,100,130,160,190,220,250,280   ;终点横坐标
ed_y  dw  90                                            ;终点纵坐标
;----------------------------简版乐器黑色琴键坐标--------------------------
bt_x  dw 71,101,131,161,191,221,251                                 ;起点横坐标
bt_y  dw  50                                            ;起点纵坐标
bd_x  dw  79,109,139,169,199,229 ,259                               ;终点横坐标
bd_y  dw  70                                            ;终点纵坐标
;频率列表
;---------------------------高级版音乐频率值----------------------------
d_tune  dw 220,247,278,294,330,371,416                        ;低音
      dw 441,495,556,589,661,742,833                       ;中音
      dw 882,990,1112,1178,1322,1484,1655                  ;高音
;---------简版
TUNE      DW  262,  294,  330,  347,  392,  440,  494,  523  
DATA   ENDS
STACK   SEGMENT   PARA  STACK  'STACK'                   
STA      DB  300 DUP('STACK')                          
STACK   ENDS
CODE    SEGMENT
ASSUME DS: DATA,  SS:  STACK,  CS: CODE,  ES: DATA
START: MOV DI ,0H
		MOV  AX, DATA                   
		MOV  DS, AX
          MOV  ES, AX
          MOV  AX, STACK                        
          MOV  SS, AX
SHOW    MACRO  B             
          MOV  DX, OFFSET  B                               
          MOV  AH, 09H                            
          INT  21H;显示字符串
ENDM
          SHOW  Gao1   ;显示Gao1中的内容                             
LOP:      SHOW  Cue_list;显示操作提示清单                            
          MOV  AH, 01H                                
          INT   21H;从键盘上输入一个字符,将其对应字符的ASCII码送入AL中
          			;并在屏幕上显示该字符                              
          CMP  AL, 42H ;判断键盘上的值是否为B(区分大小写)                                                                        
          JNZ   sc;如果键盘上的内容不是B,检查是否是C
          JMP LITE_v;如果输入了B,那么我们进入简版的音乐演奏器
SC:		cmp al,43h;判断键盘上的值是否是C,如果是C,进入高级音乐演奏器
		JNE LEXIT;
;高级音乐演奏器启动 
GAO_V:
;---依次调用:开场效果--初始化--键盘扫描--按键处理程序-------------
  call show_load      
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员AlbertTu

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值