图形变换 1.docx

上传人:b****6 文档编号:6271306 上传时间:2023-01-05 格式:DOCX 页数:23 大小:113.21KB
下载 相关 举报
图形变换 1.docx_第1页
第1页 / 共23页
图形变换 1.docx_第2页
第2页 / 共23页
图形变换 1.docx_第3页
第3页 / 共23页
图形变换 1.docx_第4页
第4页 / 共23页
图形变换 1.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

图形变换 1.docx

《图形变换 1.docx》由会员分享,可在线阅读,更多相关《图形变换 1.docx(23页珍藏版)》请在冰豆网上搜索。

图形变换 1.docx

图形变换1

 

学号:

课程设计

 

题目

钢琴模拟程序

学院

自动化学院

专业

电气工程及其自动化

班级

姓名

指导教师

 

2013

6

26

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

题目:

钢琴模拟程序设计

 

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.使用汇编语言设计一个弹奏程序,程序运行时使PC机成为一架可弹奏的“钢琴”。

2.屏幕显示钢琴图像;

3.当按下数字1-8时,依次发出1,2,3,4,5,6,7,i八个音调;按下CTRL-C则退出“钢琴”状态。

4.变调:

按下键“U”后,再弹奏和演奏时琴键相应的音符频率变高;按下键“D”后,再弹奏和演奏时琴键相应的音符频率变低;

5.撰写课程设计说明书。

内容包括:

摘要、目录、正文、参考文献、附录(程序清单)。

正文部分包括:

设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。

时间安排:

12月26日-----12月28日查阅资料及方案设计

12月29日-----1月2日编程

1月3日-----月7日调试程序

1月8日-----1月9日撰写课程设计报告

 

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

目录

摘要1

1.设计意义2

2.设计内容及其设计要求2

3.总体方案论证2

3.1按键与音调频率值的对应2

3.2扬声器的驱动分析3

3.3发声时间4

4.程序设计5

4.1主程序设计及其流程图5

4.2发声子程序SOUND6

5结果分析7

5.1程序调试7

5.2结果记录及分析8

结束语9

参考文献10

附录:

程序代码11

本科生课程设计成绩评定表

摘要

汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。

汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。

高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。

在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。

而此次的《微机原理与接口技术(基于16位机)》的课程设计正是利用这个学期所学的汇编语言来设计一个键盘钢琴的应用程序,要求该汇编语言程序能实现键盘钢琴的功能,就是在键盘上按下自定义的按键之后,可以从主板的蜂鸣器上发出一定频率的音调,而这些音调的频率都是相应音阶的特征频率,故发出的声正好就是音乐的各个音阶声调。

通过这个应用程序,按照音乐的谱子连续地按下相应按键,就可以像钢琴那样发出音乐来,但是局限于扬声器的原因,所发出的音乐没有真正的钢琴那样美妙。

但是现在的一些键盘钢琴的软件已经能驱动声卡,来获得更好更逼真的钢琴音乐效果了。

关键词:

汇编接口钢琴模拟

 

1.设计意义

键盘钢琴,电脑键盘代替钢琴键演奏钢琴乐曲。

最原始、也是最流行的版本,音符以ABCDEGF为编排。

让不懂音乐的网友可以快速上手,其体积小,简单方便、易传播,因此在网上普及率最高。

键盘钢琴让人可以在闲暇时刻,可以小小地娱乐一下,增加生活的乐趣。

由于一架钢琴过于昂贵,对于一般的普通工薪阶层的人来说,还是很难接触到钢琴的,而键盘钢琴的出现正好让那些业余爱好者,既满足的对钢琴音乐艺术的追求,也更廉价和便捷。

对于初学音乐的人来说,这样的键盘钢琴软件更是训练的好助手,可以帮助你迅速熟悉各音阶音调和旋律节奏。

因此,这样的软件也很多版本,有专业版,也有简单的Flash版,当然也有此次课设要求设计的简陋版。

专业版能提供多种乐器音色、录放功能、音符显示。

不太好的地方是键盘要按下去才发音,没有延时,弹起来不太就手。

Flash版音色也比较好,提供了多键位,也可以自定义键位。

2.设计内容及其设计要求

1.使用汇编语言设计一个弹奏程序,程序运行时使PC机成为一架可弹奏的“钢琴”;

2.屏幕显示钢琴图像;

3.当按下数字1-8时,依次发出1,2,3,4,5,6,7,i八个音调;按下CTRL-C则退出“钢琴”状态;

4.变调:

按下键“U”后,再弹奏和奏时琴键相应的音符频率变高;按下键“D”后,再弹奏和演奏时琴键相应的音符频率变低。

3.总体方案论证

3.1按键与音调频率值的对应

设计汇编语言程序,要实现键盘钢琴,首先是按键的自定义设计,因为题中要求设计的按键音调有8个,并且按u和d可以设置升降调,经上网查找资料,设定钢琴频率如表1-1所示,其中设置了7个倍频,可用u和d来调整倍频数。

表1-1音调频率与倍频的对应关系

倍频数

1

2

3

4

5

6

7

i

1

65

73

82

87

98

110

123

130

2

130

146

164

174

196

220

246

260

3

260

292

328

348

392

440

492

520

4

520

584

656

696

784

880

984

1040

5

1040

1168

1312

1392

1568

1760

1968

2080

5

2080

2336

2624

2784

3136

3520

3936

4160

7

4160

4672

5248

5568

6272

7040

7872

8320

相邻倍频数音调频率之间有着两倍的关系,这样就很方便数据的储存了,只需要将其中一个倍频的频率值存储下了,再进行二倍关系的换算可得到所需要的频率,实际调试过程中最高设置到7倍频比较合适。

程序数据区可存储一倍频的数据:

FREQDB65,73,82,87,98,110,123,130

这样,不仅节省了存储空间,而且降低了存储数据的复杂程度。

倍频数的设置

在数据区设置一个倍频数并且使其初始倍率为1

DIAODB1

在程序中通过u或d的输入可以来修改DIAO中的数据,从而改变并且保持倍频数。

设定好倍频数之后,键盘输入1到8的数字,将输入的ascii码转换成一倍频数据区的所对应的偏移地址,就可以用查表的方法取出所需的一倍频频率,然后在乘上已经设置好的倍频数,即可得到所需要输出的音频。

3.2扬声器的驱动分析

所用该程序主要是驱动电脑主板上的扬声器,根据音阶音调不同的频率值,来是扬声器发出不同的声音,从而产生想弹钢琴一样的感觉,当然音质是不能相提并论的。

(在这里需要说明的是,现在大多数笔记本主板上已没有这个扬声器,但是台式机大多还是有的,在台式机上的效果更好点。

在电路上如下图3-1所示:

 

8255(PB1)

 

图3.18253的电路连接图

在PC/XT/AT家族中,计时器芯片的3个通道都用其专门的功能,通道2是用来控制计算机的扬声器的声音频率的。

通道2用于产生频率信号,故工作方式在方式3,计数值为6A4H=1190,方波输出频率为1.19MHz/1190=1KHz,此信号决定了扬声器的声调,而通道2的控制字则为0B6H,1.19M约等于十六进制12348CH。

由图1-1可知8253的通道2计数由8255A的PB0控制,当PB0输出为高电平的时候,是门GATE2为高电平。

此时,8253的通道2允许计数,故通道2的输出方波受PB0控制,从而控制扬声器的音调高低。

通道2的输出能否对扬声器产生持续控制还取决于8255A的PB1。

当PB1为“0”时,OUT2不能通过“与门”;反之则可通过“与门”控制扬声器。

所以,扬声器发音时间的长短取决于8255A的PB1信号。

另外,CPU通过8255A的C口,得知5283通道2的状态和扬声器驱动器的状态。

由上可知,需要扬声器正常发声,需要8253和8255A的协同工作,而8253的控制字在网上查的为43H,则同过下面的程序来初始化8253。

MOVAL,0B6H

OUT43H,AL

而通道2的端口地址为42H,由于N值一般计算得出都大于255,故需要一个字的写入,而又因为8253只有八位数据线,故字的写入需要两次,一般将N值直接给AX然后通过下面的程序即可完成。

OUT42H,AL

MOVAL,AH

OUT42H,AL

而8255A能控制8253和扬声器,但是只要PB0和PB1同时为高调平,扬声器就为开,则对8255A的控制就是在对扬声器的控制,在网上得知8255A的B口地址为61H,则可以通过下面的程序实现扬声器的开与关。

INAL,61H

ORAL,3;可以保证PB0和PB1同时为高调平

OUT61H,AL;打开扬声器

MOVAL,AH

ANDAL,0FCH;可以保证PB0和PB1同时为低调平

OUT61H,AL;关闭扬声器

3.3发声时间

因为只要通过8255A将扬声器打开而不关闭,那么只要8253正常工作,扬声器就会一直发声,需要发声时间多长,只需要写一个延时子程序即可,利用LOOP和跳转指令就可以得到一个双循环程序,在根据指令时间依次乘以LOOP循环的次和跳转指令的跳转次数就可以得到想要的延时时间。

子程序循环完毕在将扬声器关闭即可。

延时子程序时间的长短就是发声时间的长短。

 

4.程序设计

4.1主程序设计及其流程图

 

 

图4.1主程序的流程图

如图4-1,主程序的主要任务:

1)如果输入的KEY为“ESC”时,直接跳转至退出EXIT处;

2)如果出输入按键为u或d时,改变倍频并且返回输入;

3)如果输入为1到8时,发出相对应的频率的声音并返回输入;

4)如果输入为其他则直接返回输入。

 

4.2发声子程序SOUND

图4.2子程序SOUND流程图

子程序SOUND流程图如图3-3所示,其主要任务是完成发声,在该子程序中,分两次向通道2端口42H写入计数初值N的程序语句为:

OUT42H,AL

MOVAL,AH

OUT42H,AL

打开和关闭扬声器的程序为:

INAL,61H

ORAL,3;可以保证PB0和PB1同时为高调平

OUT61H,AL;打开扬声器

MOVAL,AH

ANDAL,0FCH;可以保证PB0和PB1同时为低调平

OUT61H,AL;关闭扬声器

 

5.结果分析

5.1程序调试

按上面的思路和流程图写好程序后,对程序进行调试:

在选择基频的时候,最初选择的是网上给的数据:

131,147,165,175,196,220,247,262,而在写好程序之后运行发现,输入1到7或u/d是,程序正常运行,但是一旦输入为8的时候,程序就会出现如图5-1所示错误,经过debug过程分析后,发现262超过了db类型的范围。

解决这个问题,最初的方案是把类型从db换成dw,但是认为还要修改后面的程序,所以选择了将基频存储区的数据降到原来的一半运行之后成功解决。

图5.1调试图

 

5.2结果记录及分析

调试之后,运行结果和课题的设计要求完全相符合。

开始运行程序,能看到如下图5-2所示的“Welcometo"PianoofKeyboard"”程序运行开始提示语和以及如下所示操作提示语,

图5-2操作界面图

进入操作界面之后,按下1到8键,pc机会发出一倍频的所对应的音调;每按下一次u键,倍频自动加1,直到倍频为7时,按下u键,倍频保持为7不变,此时按下1到8键,便会发出对应倍频对应按键的音调;每按下一次d键,倍频减1直到倍频等于1,此时按下1到8键,将发出对应倍频对应音调;当按下出esc、u、d、1到8以外的按键是,界面保持不变。

按esc键结束程序时,出现如图5-3所示的结束语。

图5-3结束界面图

 

结束语

通过这两周的硬件课程设计,我对微机原理及接口技术这门课有了更深的认识,系统的掌握了微机原理及接口的应用知识。

这次课程设计我做的是用开关模拟电子琴发声。

在老师确定题目后,我便去图书馆查阅了大量的关于开关输入和发声程序设计的书籍,然后确定好自己的方案,对自己的设计有了一个大概的思路。

通过编程,我学会了如何独立的写出程序,提高了自己的分析解决问题的能力,并且使自己所学的知识与实践相结合,应用到实践当中。

课程设计中涉及到许多接口芯片,使我对这些芯片有了更深的认识,对芯片的各种工作方式有了更深的理解,虽然没有进行硬件的调试,但通过设计,我也学到了很多书本上没有的知识。

在设计当中遇到了很多的问题,但通过查找资料,克服了这些问题,提高了自己在实际当中解决问题的能力。

虽然此次课程设计的过程是艰辛的,但结果还是令我比较欣慰的。

在此特别感谢老师对我的指导。

 

参考文献

[1]周佩玲,彭虎,傅忠谦.微机原理与接口技术(基于16位机),电子工业出版社,2005.

[2]周佩玲,吴耿峰,万炳奎编.十六位微型计算机原理接口及其应用,中国科学技术大学出版社,1995.

[3]周明德.微型计算机系统原理及应用(第四版)习题集与实验指导书,清华大学出版社,2002.

[4]戴梅萼.微型计算机技术及应用(第三版).清华大学出版社,2003.

[5]孙德文.微型计算机技术.高等教育出版社,2001.

[6]王爽.汇编语言.清华大学出版社(第二版),2008

 

附录:

程序代码

DRAWLINE0MACROSTART_X,START_Y,END_X,COLOR;画横线

LOCALPAINT

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVAH,0CH

MOVAL,COLOR

MOVBX,0

MOVCX,START_X

MOVDX,START_Y

PAINT:

INT10H

INCCX

CMPCX,END_X

JCPAINT

POPDX

POPCX

POPBX

POPAX

ENDM

DRAWLINE1MACROSTART_X,START_Y,END_Y,COLOR;画竖线

LOCALPAINT

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVAH,0CH

MOVAL,COLOR

MOVBX,0

MOVCX,START_X

MOVDX,START_Y

PAINT:

INT10H

INCDX

CMPDX,END_Y

JCPAINT

POPDX

POPCX

POPBX

POPAX

ENDM

DRAWOBILQUEMACROSTART_X,START_Y,END_X,COLOR;画斜线向右倾斜

LOCALPAINT2

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVAH,0CH

MOVAL,COLOR

MOVBX,0

MOVDX,START_Y

MOVCX,START_X

PAINT2:

INT10H

DECCX

INCDX

CMPCX,END_X

JAPAINT2

POPDX

POPCX

POPBX

POPAX

ENDM

DRAWMACROSTART_X,START_Y,END_X,END_Y,COLOR;画填充矩形

LOCALDRAW_NEXT

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVAH,0CH;写像素点

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;比较列是否画完

JNEDRAW_NEXT;未完继续画

POPDX

POPCX

POPBX

POPAX

ENDM

DATASEGMENT

DIAODB1

KEYSDB'12345678'

FREQDB65,73,82,87,98,110,123,130

WELCDB'Welcometo"PianoofKeyboard"',0DH,0AH

EXPLDB'Explanation:

',0DH,0AH,

'Key:

12345678Notes1234567i',0DH,0AH,

'Key:

uNotesrisethetone',0DH,0AH,

'Key:

dNoteslowerthetone',0DH,0AH,

'PleaseNoteYourCapsLockTrunedoff',0DH,0AH

ESCQDB'Pleaseplay:

',0DH,0AH,

'(YoucanType"ESC"toexit)',0DH,0AH,'$'

LASTDB0DH,0AH,'Welcomeagain!

','$'

WHITEDB0FH

BLACKDB0

YELLOWDB0EEH

GRAYDB8

TABFCDW192,294,330,350,393,441,495

BUFFERDW0

DTIMEDW10

TONEFDW0

TABOLINEDW240,290,340,390,440,490

BLACKLDW225,275,375,425,475

BLACKRDW255,305,405,455,505

BBLDW180,230,330,380,430

BBRDW211,261,361,411,461

WLDW101,151,201,251,301,351,401

WRDW150,200,250,300,350,400,451

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX;初始化数据区

MOVAH,00H

MOVAL,12H

INT10H

 

MOVSI,190;SI=START_X

MOVDI,140;DI=START_Y

MOVBP,540;BP=END_X

DRAWW4:

DRAWLINE0SI,DI,BP,WHITE

DECSI

DECBP

INCDI

CMPDI,230

JCDRAWW4;画阴影

DRAW100,230,450,250,GRAY;侧面阴影

MOVSI,140

PAINTSIDE4:

DRAWOBILQUE540,SI,450,GRAY

INCSI

CMPSI,160

JCPAINTSIDE4;黑键阴影

MOVSI,140

PAINTSIDE04:

DRAWOBILQUE255,SI,210,BLACK

INCSI

CMPSI,150

JCPAINTSIDE04

MOVSI,140

PAINTSIDE14:

DRAWOBILQUE305,SI,260,BLACK

INCSI

CMPSI,150

JCPAINTSIDE14

MOVSI,140

PAINTSIDE24:

DRAWOBILQUE405,SI,360,BLACK

INCSI

CMPSI,150

JCPAINTSIDE24

MOVSI,140

PAINTSIDE34:

DRAWOBILQUE455,SI,410,BLACK

INCSI

CMPSI,150

JCPAINTSIDE34

MOVSI,140

PAINTSIDE44:

DRAWOBILQUE505,SI,460,BLACK

INCSI

CMPSI,150

JCPAINTSIDE44;画分割线

MOVSI,240

REDRAW04:

MOVDI,SI

SUBDI,90

DRAWOBILQUESI,140,DI,BLACK

ADDSI,50

CMPSI,540

JCREDRAW04

MOVSI,150

REDRAW14:

DRAWLINE1SI,230,250,BLACK

ADDSI,50

CMPSI,440

JCREDRAW14;画黑键盘

MOVBX,0

PAINTB4:

MOVSI,OFFSETBLACKL

MOVDI,OFFSETBLACKR

MOVSI,[SI+BX]

MOVBP,[DI+BX]

MOVDI,140

DRAWB4:

DRAWLINE0SI,DI,BP,BLACK

DECSI

DECBP

INCDI

CMPDI,185

JCDRAWB4

ADDBX,2

CMPBX,9

JCPAINTB4;黑键底下阴影

MOVBX,0

PAINTBB4:

MOVSI,OFFSETBBL

MOVDI,OFFSETBBR

MOVSI,[SI+BX]

MOVBP,[DI+BX]

DRAWSI,185,BP,195,BLACK

ADDBX,2

CMPBX,9

JCPAINTBB4;画键盘结束

LEADX,WELC

MOVAH,9

INT21H;显示提示语句

INPUT:

MOVAH,7

INT21H;不回显输入键盘的KEY

CMPAL,1BH;判断输入KEY是否为“ESC”

JZEXIT;若输入KEY为“ESC”则跳转到退出EXIT

CMPAL,75H

JNZDOWN1;输入是否为u,不是跳到down1

LEADI,[DIAO]

MOVCL,[DI]

CMPcl,64;倍频数是否大于64(7倍频),大于64跳到out11

J

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1