汇编梦幻钢琴程序设计报告DOCWord格式文档下载.docx
- 文档编号:8143934
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:38
- 大小:96.54KB
汇编梦幻钢琴程序设计报告DOCWord格式文档下载.docx
《汇编梦幻钢琴程序设计报告DOCWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编梦幻钢琴程序设计报告DOCWord格式文档下载.docx(38页珍藏版)》请在冰点文库上搜索。
终点纵坐标
ED_MXDW137,148,159,170,181,192,203
ED_HXDW214,225,236,247,258,269,280
ED_YDW90;
黑色琴键坐标
BT_XDW57,68,90,101,112;
DW134,145,167,178,189
DW211,222,244,254,265
BT_YDW50;
BD_XDW64,75,97,108,119;
终点横坐标
DW141,152,174,185,196
DW218,229,251,262,273
BD_YDW70;
宏定义绘制填充矩形:
DRAWMACROSTART_X,START_Y,END_X,END_Y,COLOR
宏定义绘制不填充矩形:
DRAWSQREMACROSTART_X,START_Y,END_X,END_Y,COLOR
最后在主程序INITPROCNEAR调用以上定义的宏来绘制琴键。
(3)、琴键绘制PIANO_DRAWPROCNEAR
(4)、屏幕显示字符SHOW_CHARPROCNEAR、SHOW_TEXTPROCNEAR
2、功能调试-刘铸辉
通过调用子程序来实现各个功能:
(1)、手动演奏GEN_HANDPROCNEAR
(2)、自动播放发声程序GEN_AUTOPROCNEAR
(3)、延时程序WAITFPROCNEAR
(4)、自动播放歌曲SCAN_SONGPROCNEAR、PLAY_SONGPROCNEAR
(5)、C/D调及对应的低、中、高频率分别载入LOAD_AUDIOPROCNEAR
(6)、C/D调判断及其状态在屏幕上的显示SCAN_TUNEPROCNEAR;
三、需求分析与设计
1、钢琴绘制。
这部分主要实现画钢琴键盘键身的功能。
它是由二十一个白色的长方块和十五个黑色的长方块构成的,要在屏幕上画出有立体效果的长方形白色和黑色键盘,我们需要用BIOS调用编织线使程序。
显示适配器都自带显示服务的BIOS,利用它所提供的BIOS调用来编写程序,对于我们编程应用者来说是透明的,我们只需要调用显示驱动程序INT
10H。
钢琴主要是由矩形、直线等规则几何形状构成,通过画点、画线等基本程序完成钢琴的绘制。
对于绘制钢琴键盘,为使其有立体感,还需要先在excel表中绘制一个简单的钢琴键盘,准确对应其各个边界的坐标。
钢琴键盘的动态显示则是同步于键盘的按键有按下和弹起的动画。
这部分功能需要也可以用绘制钢琴的方法来实现这个效果。
绘制琴键:
PIANO_DRAWPROCNEAR
白色琴键:
LEASI,ST_LX;
取白色琴键起始点有效地址
LEADI,ED_LX;
取白色琴键结束点有效地址
MOVCX,21;
白色琴键数目21
NEXT_DRAW:
DRAW[SI],ST_Y,[DI],ED_Y,0FH;
调用宏定义画白键
DRAW[SI],90,[DI],93,07H;
阴影
ADDSI,2;
下一个键
ADDDI,2
LOOPNEXT_DRAW;
CX-1不为0继续画
黑色琴键:
LEASI,BT_X;
取黑色琴键起始点的有效地址
LEADI,BD_X;
取黑色琴键结束点的有效地址
MOVCX,15;
黑色琴键15个
NEXT_BLOCK:
DRAW[SI],BT_Y,[DI],BD_Y,00H;
调用宏定义画黑色琴键
LOOPNEXT_BLOCK;
CX-1不为0继续画黑键
2、发声程序。
该发生程序是在修改BEEP发声程序的基础上,以实现为8088/86编写一个任意频率和任意持续时间的通用发声程序。
该程序包括以下三个步骤:
(1)在8253/54中的43端口送一个控制字0B6H(10110110B),该控制字对定时器2进行初始化,使得定时器2准备接受计数初值。
(2)在8253/54中的42H端口装入一个16位计数值,已建立将要产生的声音频率。
(3)把输出端口61H的0、1两位置1,发出声音。
具体实现如下:
GEN_HANDPROCNEAR;
手动演奏发声程序
;
IN:
DI
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
;
定时器初始化程序
MOVAL,0B6H;
定时器初始化,
选择计数器2,工作在方式3OUT43H,AL
OUT43H,AL;
向定时器送初值
MOVDX,12H;
1.1931Mhz/给定的频率=12348h/给定频率=计数初值
MOVAX,348CH;
12348h存入DX:
AX中,商存AX,余数存DX
DIVDI;
DI为给定的频率
OUT42H,AL;
定时器送处值
INAL,61H;
开扬声器
MOVAL,AH;
给定时器2写入AX中存放的计数初值
OUT42H,AL
INAL,61H
MOVAH,AL;
把8255输出端的61H的0、1位置1,并把端口状态写入AH
ORAL,3
OUT61H,AL
WAIT1:
CALLWAITF;
调用延时程序
INAL,60H;
读取键盘扫描码,按下和放开都有相应的扫描码,放开码=按下码+80h>
80h
TESTAL,80H;
查询键是否放开
JZWAIT1;
未放开继续查询,AL不等于80H则继续延时
恢复8255端口61H的状态(即按键放开),关扬声器
OUT61H,AL;
通过监控端口61H的PB4固定不变的触发时间来产生延迟时间
POPDI;
恢复寄存器状态
POPDX
POPCX
POPBX
POPAX
RET
GEN_HANDENDP
3、延时程序。
80x86的各种处理器采取了6~66MHz的工作频率,loop指令的执行时间在这些处理器上也不相同。
为了建立一个与处理器无关的延时,IBM采用了一种利用硬件产生时间延时的方法,即通过监控端口61H和PB4,使PB4每15.08微秒触发一次,一产生一个固定不变的时间基准。
在IBMPCATBIOS的WAITF子程序,就是一个产生Nx15.08微秒时间演示的程序。
调用WAITF子程序时,CX寄存器必须装入15.08微秒的倍数N。
利用WAITF子程序能获得任意的时间延时,而不必在考虑CPU的型号和工作频率。
WAITFPROCNEAR
延时程序
PUSHAX
MOVCX,DELAY_TIME
WAITF1:
INAL,61H
ANDAL,10H;
检查PB4口
CMPAL,AH;
判断AL变化否
JEWAITF1;
没有变化则等待AL变化
MOVAH,AL;
保存PB4的新状态(AL中)
LOOPWAITF1;
CX-1不为0就回到WAITF1
POPAX;
AX出栈
WAITFENDP
4、音符的演奏。
在PC系列机上,8254的三个计数器各有其作用,计数器0用于维护系统时钟;
计数器1用于周期性的向DMA发送数据请求信号,供存储器刷新使用;
计数器2接到扬声器用来产生声音。
各计数器的输入时钟脉冲频率均为1.19318MHz。
通过设置计数值可以产生各种频率的声音。
与此同时,许多输入输出操作都是由8255A可编程外设接口来控制的。
利用CPU支持的外围电路8254与8255,通过汇编程序改变8255的PB0,PB1口,接通扬声器,使得计算机能够发出一定频率的声音,同时通过8254的与8255连接的2号计数器控制指定频率,从而达到控制扬声器的音调的效果。
具体实现如下:
5、自动播放歌曲。
(1)、为所要播放的乐曲的定义一个频率表和节拍表。
以所播放的第二首歌曲两只老虎为例:
频率表:
MUS_FREQ2DW262,294,330,262,262,294,330,262;
两只老虎
DW330,349,392,330,349,392,392,440
DW392,349,330,262,392,440,392,349
DW330,262,294,196,262,294,196,262
DW262,294,330,262,262,294,330,262
DW0
节拍表:
MUS_TIME2DW25,25,25,25,25,25,25,25,25,25
DW50,25,25,50,12,12,12,12,25,25
DW12,12,12,12,25,25,25,25,50,25,25,50
DW25,25,25,25,25,25,25,25,25,25
(2)、分表将两个表的偏移地址放入SI和BP中
LEABP,MUS_TIME2
LEASI,MUS_FREQ2
(3)、从表中读出的音符频率放入DI中,取出音符的持续时间(10s的倍数)放入BX中。
MOVDI,[SI]
MOVBX,[BP]
(4)、最后调用GEN_AUTO子程序发出声音。
6、C、D调的转换。
从C调向D调进行转换,先判断当前音符为哪种调,若为C调,则进行跳转,跳转的过程中开D灯,关C灯;
反之同原理。
调用的是SCAN_TUNE子程序。
SCAN_TUNEPROCNEAR;
C/D调判断及其状态在屏幕上的显示
IN:
DL键盘扫描码
OUT:
TUNE
CMPDL,2EH;
判断是C否
JNZNEXT_D;
不是则判断是D否
MOVTUNE,'
C'
DRAW55,38,60,41,0EH;
关D灯
DRAW65,38,70,41,0AH;
开C灯
JMPTUNE_END;
结束
NEXT_D:
CMPDL,20H;
判断D否
JNZTUNE_END
D'
DRAW55,38,60,41,0AH;
开D灯
DRAW65,38,70,41,0EH;
关C灯
TUNE_END:
SCAN_TUNEENDP
4、代码及分析
宏定义
LOCALDRAW_NEXT
local:
避免宏重复调用时,标号的重复
功能:
画填充的矩形
使用条件:
START_X<
END_X,START_Y<
END_Y
PUSHDX
MOVAH,0CH;
写像素点,12号功能,写图形像素
MOVAL,COLOR;
设置颜色,像素值
MOVBH,0;
选用页号0
MOVCX,START_X;
列起始点
MOVDX,START_Y;
行起始点
DRAW_NEXT:
INT10H;
画点
INCCX;
开始画横线
CMPCX,END_X;
比较行是否画完
JNEDRAW_NEXT;
画另一行
MOVCX,START_X;
另一行的起始点
INCDX;
下一行
CMPDX,END_Y;
比较列是否画完
未完继续画
POPDX;
出栈
ENDM
LOCALROW_UP,ROW_DOWN,RANK_LEFT,RANK_RIGHT
画不填充的矩形
PUSHSI
写像素点
设置颜色
ROW_UP:
画上边
画横线
JNEROW_UP;
画另一边
RANK_RIGHT:
画右边
INT10H;
INCDX;
CMPDX,END_Y;
JNERANK_RIGHT;
画另一边
下边起始点
MOVSI,END_X
INCSI
ROW_DOWN:
画下边
INCCX;
CMPCX,SI;
JNEROW_DOWN;
右边起始点
MOVCX,START_X
RANK_LEFT:
CMPDX,END_Y;
JNERANK_LEFT;
POPSI
数据段
DATASEGMENT
定义在屏幕绘制字
START_COLDB?
存储起始行
TEXTDB13;
起始行
DB4;
起始列
DB0AH
DB'
*********ThisisPiano**********'
0FFH,'
***Welcome!
Haveagoodtime!
***'
0FFH;
字体颜色,设置颜色
DreamPiano'
LiuZhuHuiANDLiuJing2013-11-22'
0FFH,0FFH;
显示字
DB0FFH,'
1a.s.d.f.g.h.jTOMAKEMUSIC'
2F2~F5TOPLAYAMUISC'
3shiftand+/-TOup/downTHEMUSIC'
4L/RSHIFTTOHIGHT/LOW.'
DB10DUP(4DUP(0DBH),4DUP(20H)),0FFH;
颜色交叉矩形
DB10DUP(4DUP(20H),4DUP(0DBH)),0FFH
DB10DUP(2DUP(0DBH),2DUP(20H)),0FFH
DB10DUP(2DUP(20H),2DUP(0DBH)),0FFH
DB10DUP(2DUP(20H),2DUP(0DBH)),0FFH
DB00
白色琴键坐标
黑色琴键坐标
音乐频率值
LOWDDW131
LOWDDDW221,248,278,294,330,371,416;
低音
MIDDW262
MIDDDW441,495,556,589,661,742,833;
中音
HGHDW523
HGHDDW882,990,1112,1178,1322,1484,1665;
高音
KEYFLAGDB1;
标记低(0)、中
(1)、高
(2)音键
KEYNUMDW1;
存储1~7,按键编号缓存,提取对应的按键位置
DELAY_TIMEDW7000;
延时缓存,用于播放时存如BX计数
SONGDW100;
保存所选的自动演奏的曲目
TUNEDW1;
标记c调或d调,按键状态缓存
AUDIODW1;
标记低音{1},中音{2},高音{3}
自动演奏的歌曲频率和延时
MUS_FREQ1dw196,220
dw262,262,262,262,262,220,196
dw262,262,262,262,294,262,220,262
dw294,294,294,294,294,262,220
dw294,294,294,294,330,294,330,392
dw440,440,392,440,392,330
dw294,294,330,294,262,220,196,220
dw262,262,262,262,262,220
dw262,196,220
dw440,440,392,440,524,440
dw392,330,294,262,220,196,220
dw262,262,262,262,294,262
dw262,330,392
dw440,440,440,440,524,440
dw392,392,392,440,392,330,294
dw262,262,262,262,294
dw330,330,294
dw262,262,262,262,524,440
dw392,392,392,440,392,330,392
dw440,524,524,440,392
dw392,330,392
dw262,262,262,262,392
dw262,262,262,262,294,330
dw392,392,330,392,330,392
dw440
dw9,9,196,660,294,294,262
dw262,-1
MUS_TIME1dw40,40
dw40,20,40,40,80,40,40
dw40,20,40,20,20,80,40,40
dw40,80,40,80
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 梦幻 钢琴 程序设计 报告 DOC
![提示](https://static.bingdoc.com/images/bang_tan.gif)