ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:196.92KB ,
资源ID:4312294      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4312294.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理课程设计显示图形变换.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理课程设计显示图形变换.docx

1、微机原理课程设计显示图形变换显示图型变换程序一.设计任务及要求初始条件:按S用四种颜色各显示一个矩形的程序,按T用三种颜色各显示一个三角形的程序,按C用一种颜色显示一个圆。按Q退出程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,所采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图二原理分析

2、本课程设计大体可分为三个子程序,即显示矩形,显示三角形和显示圆的程序。设计之前要查询资料,熟悉DOS调用和BIOS调用,以便在DOS界面上能输出图形和颜色,BIOS调用功能如表1所示。表1 常用的BIOS中断类型中断号功能中断号功能0H除法出错0EH软盘中断1H单步中断0FH并行打印机中断2H不可屏蔽中断10H显示中断3H断点中断11H取设备信息4H溢出中断12H取内存容量5H打印屏幕中断13H磁盘8H8254系统定时中断14H异步通信9H键盘中断15H磁带0AH彩色图形接口中断16H键盘0BH异步通信串行口1中断17H打印机0CH异步通信串行口0中断18H驻留BIOS0DH硬盘中断19H引导

3、装入程序不仅如此,在了解了常用BIOS中断类型后,还必须学习如何用BIOS功能调用编写显示程序。INT 10H提供了两种图形方式下读写像素的功能:AH=0CH,写像素。 输入参数:DX=像素行。 CX=像素列。 BX=显示页号。 AL=像素颜色值。 返回结果:无。AH=ODH,读像素。 输入参数:DX=像素行。 CX=像素列。 返回结果:AL=像素颜色值。使用读写像素功能时注意,像素的行列坐标的值应取决于当前显示模式。三设计方案1方案一(1).设计分析程序主流程图如图1所示:图1 程序主流程图显示变色矩形程序流程图如图2所示:图2 变色矩形流程图显示变色三角形程序流程图如图3所示:图3 变色三

4、角形流程图画圆程序流程图如图4所示:图4 画圆流程图画圆程序是最难的一个,只能用离散的点来组成。算法如下:电脑屏幕是由X、Y坐标组成的二维平面,在屏幕中央位置取一点为圆心,这就是坐标轴的交点(O点),取半径适中,然后交X轴于A、C两点,如图5所示。DE直线垂直于X轴,则有|AB|*|BC|=|BD|*|BE|。编程序时,取A点为起点,逐步沿X轴正向移动,每次移动一个像素点,计算A点的位置坐标,然后让D、E点的纵坐标从零递增,直到刚符合上述等式,即取纵坐标的平方值大于等式左边的第一个值,所以要用两个循环嵌套才能实现此功能。第一次运行后的结果截屏如图6所示。图5 算法实现原理图图6 第一次运行结果

5、由此产生一个严重的问题,就是D、E点取点时的第一个、第二个点离起点太远,最后两个点离终点太远。所以必须做修改。修改算法如下:在第一段程序的基础上,再画一个圆,第二个圆与第一个圆唯一的不同之处就是起点不同,改为F点,依据同样的算法,沿Y移动,相应变换的就是另外两个点,当程序运行结束后,其实画的是两个圆,重叠后就是一个完整的圆。最终运行结果如图9所示。最后的程序代码在附录中。(2).运行结果变色三角形程序演示结果如图7所示图7 变色三角形演示结果变色矩形演示结果如图8所示图8 变色矩形演示结果画圆演示结果如图9所示图9 画圆演示结果命令输入窗口如图10所示图10 命令输入窗口2.方案二方案二与方案

6、一的不同在于画圆的程序,其程序如附录中所示。方案一算法简单而创新,实现简洁而明了,且修改方便;而方案二中程序冗长,且需调用许多子程序,算法复杂,不易修改。所以相比较而言,方案一具有明显优势,最终选择方案一。四心得体会此次课程设计可以说是受益匪浅,通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:仔细谨慎,精益求精。在编写此程序时,最头疼的是编写画圆程序,因为汇编语言没有开方算法,所以只能用点来组成圆,秉着学术至上的态度,我尽量使组成圆的点连续,这可是一个浩大的工程:先是在网上下载了一个高手编的画圆程序,但程序很长

7、,而且比较深,迫使我和组员共商简便方法,功夫不负有心人,经过漫长的摸索与不懈的努力,我们得出了新算法,并编写出了更加简便的程序,经过一次次的调试,最终修成正果。在此过程中,我不仅学到了书本中不具备的汇编语言的知识,更懂得了如何高效的与人合作,融入到团队之中,真的受益匪浅!而且在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性,把学过的计算机编译原理的知识强化,能够把课堂上学到的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对于计算机操作系统的认识是模糊的,概念上的,现在通过自己亲自动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件的运行,对计算

8、机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,耐心,循序渐进,不要急于求成。这样才能提高效率,保质保量地完成课程设计。通过此次的微机原理课程设计,加深了我对课本知识的理解,使原本看似深奥的知识一下子变得简单而实用,提高了我发现问题,解决问题的能力,提高了我的动手能力与团队合作意识,收获颇丰!参考文献1微机原理与接口技术(基于16位机),2005.周佩玲等,电子工业出版社.2微型计算机原理与接口技术,2004.姚燕南,高等教育出版社.3计算机硬件技术及应用基础下册:接口与应用,2001.邹逢兴,国防科技大学出版社.4微型计算机接口技术及应用,2000.刘乐善,华中科技大学出

9、版社.5IBM PC汇编语言程序设计,2001.沈美明、温冬婵,清华大学出版社.附录1方案一程序:data segmentinfo1 db 0dh,0ah, please choose the letter s,t,c:db 0dh,0ah, input q to quit,$info2 db 0dh,0ah, choose error!,$info3 db 0dh,0ah, press any key to continue, q to quit$d3 dw 0r=50;圆的半径x=300y=240;圆心坐标num dw 0;数据暂存yy dw ?;数据暂存data endsstack se

10、gment stackdb 200 dup(0)stack endscode segmentassume cs:code,ds:data,ss:stackmain proc farmov ax,datamov ds,axmov ah,0mov al,4int 10hinput: lea dx,info1mov ah,9int 21hmov ah,08int 21hcmp al,tjz sacmp al,sjz zhencmp al,cjz yuacmp al,qjz exitmov dx,offset info2mov ah,09int 21hjmp inputsa:call sancall

11、continusejmp inputzhen:call zhengcall continusejmp inputyua:call yuancall continusejmp inputexit:mov ah,4chint 21hretmain endpsan proc nearpush axpush bxpush cxpush dxmov ah,0mov al,12hint 10hmov al,1a0: mov dx,1mov d3,1mov cx,320a1: push cxpush d3a2: mov ah,12push axint 10hpop axinc cxsub d3,1jnz a

12、2pop d3add d3,2pop cxinc dxdec cx cmp cx,20jne a1inc alcmp al,4jne a0pop dxpop cxpop bxpop axretsan endpzheng proc nearpush axpush bxpush cxpush dxmov ah,0fhint 10hmov ah,0mov al,3int 10hmov cx,1 ;字符数量mov ah,2mov dh,5 ;5行开始mov dl,25 ;25列开始int 10hcall dly_qrtr ;调用延时子程序;*光标向下动*line: mov ah,2int 10hmov

13、 al,1mov ah,9mov bl,0e0h ;字符黄色int 10hinc dh ;行增加cmp dh,20 ;20行jne linejmp line1;*光标向右动*line1: mov ah,2int 10hmov al,1mov ah,9mov bl,0e0h ;字符为黄色int 10hinc dl ;列增加cmp dl,55 ;55列jne line1jmp line2;*光标向上动*line2: mov ah,2int 10hmov al,1mov ah,9mov bl,0e0h ;字符为黄色int 10hdec dhcmp dh,5jne line2jmp line3;*光标

14、向左动*line3: mov ah,2int 10hmov al,1mov ah,9mov bl,0e0h ;字符为黄色int 10hdec dlcmp dl,25jne line3 l00: mov ah,7mov al,14mov bh,20h ;绿色mov ch,6mov cl,26mov dh,19mov dl,54int 10h call dly_qrtr ;调用延时子程序l1: mov ah,6mov al,14mov bh,0f0h ;白色mov ch,6mov cl,26mov dh,19mov dl,54int 10hcall dly_qrtr ;调用延时子程序l3: mov

15、 ah,7mov al,14mov bh,40h ;红色mov ch,6mov cl,26mov dh,19mov dl,54int 10h call dly_qrtr ;调用延时子程序l005: mov ah,7mov al,14mov bh,30h ;青mov ch,6mov cl,26mov dh,19mov dl,54int 10h call dly_qrtr ;调用延时子程序pop dxpop cxpop bxpop axretzheng endpyuan proc nearpush axpush bxpush cxpush dxmov bx,505fhmov ax,4f02hint

16、 10h ;显示模式mov ax,datamov ds,axmov si,0mov cx,x-r;行mov dx,y;竖起点坐标mov al,02mov ah,0chint 10hmov ax,0mov dx,0loop1:inc ax; inc cx;x坐标增一 push ax;保护ax mov bx,100;2r sub bx,ax;2r-ax mul bx;(2r-ax)*ax mov bx,ax;由bx保存 push 0 mov num,0loop2: pop ax inc ax;ax+ push ax inc num;num+ mul ax;ax*ax cmp ax,bx;比较大小

17、jb loop2;小于跳转 pop ax push num add dx,y add dx,num mov al,02 mov ah,0ch int 10h pop num sub dx,num sub dx,num mov al,02 mov ah,0ch int 10h cmp cx,350 jb p jmp next p:pop ax jmp loop1next:mov dx,y-r;列 mov cx,x;竖起点坐标mov al,02mov ah,0chint 10hmov ax,0loop11: inc ax; inc dx;y坐标增一 mov yy ,dx push ax;保护ax

18、mov bx,100;2r sub bx,ax;2r-ax mul bx;(2r-ax)*ax mov bx,ax;由bx保存 push 0 mov num,0loop21:pop ax inc ax;ax+ push ax inc num;num+ mul ax;ax*ax cmp ax,bx;比较大小 jb loop21;小于跳转 pop ax push num mov cx,0 add cx,x add cx,num mov dx,yy mov al,02 mov ah,0ch int 10h pop num sub cx,num sub cx,num mov al,02 mov ah,

19、0ch int 10h cmp dx,290 jb q call continuse pop dx pop cx pop bx pop ax ret jmp $;mov ah, 4ch ;int 21h q:pop ax jmp loop11yuan endpcontinuse proc nearlea dx,info3mov ah,9int 21hmov ah,08int 21hcmp al,qje exit1retexit1:mov ah,4chint 21h continuse endpdly_qrtr proc near ;延时子程序 push cx push dx mov dx,50

20、000 d11:mov cx,8000 d12:loop d12 dec dx jnz d11 pop dx pop cx retdly_qrtr endpcode endsend main2方案二画圆程序datas segment color dw 02 bkcolor dw 15 x dw 280, y dw 240, radius dw 150 datas ends stacks segment dw 100 dup(0) stacks ends codes segment assume cs:codes,ds:datas,ss:stacks start: mov ax,datas mo

21、v ds,ax mov ax,0a000h mov es,ax mov ax,0012h int 10h ;设置640*480*16图形模式 mov al,2 call set_write_mode ;将写模式设为写模式2 again:mov ax,bkcolor call clear ;将背景清成白色 mov ax,word ptr x push ax mov ax,word ptr y push ax mov ax,word ptr radius push ax call circle mov ah,0 int 16hcmp al,0dh ;回车退出jz exit cmp ah,2eh;k

22、ey c or c jnz skip inc colorskip: jmp againquit: mov ah,4ch int 21hexit: mov ax,4c00h int 21h ;* ;640*480*16模式下的画点函数 ;* pixel proc push bp push bx push cx push ds mov bp,sp mov ax,80 mov bx,word ptrbp+12 ;bx=y mul bx ;(dx:ax)=80*y mov bx,ax ; mov ax,word ptrbp+14 ;ax-x mov cl,8 ; | | div cl ;al=商(x/

23、8),ah | | mov cl,ah ;cl=ah | ds |-bp mov ah,0 ; | cx |-bp+2 add bx,ax ;bx(offset)=80*y+x/8 | bx |-bp+4 mov al,80h ; | bp |-bp+6 shr al,cl ;al(mask)cl) |返回地址|-bp+8 push ax ; | color |-bp+10 mov dx,3ceh ; | y |-bp+12 mov al,8 ; | x |-bp+14 out dx,al ; | | mov dx,3cfh ; pixel堆栈结构 pop ax out dx,al mov a

24、l,es:bx mov ax,word ptrbp+10 ;ax=color mov byte ptr es:bx,al pop ds pop cx pop bx pop bp ret 6 pixel endp ;* ;清屏函数 ;* clear proc near mov bx,0 clr1: mov es:bx,al inc bx cmp bx,9600h;80*480 jnb clr2 jmp clr1 clr2: ret clear endp ;* ;bresenham算法实现的画圆函数 ;* circle proc near push bp mov bp,sp sub sp,6 mo

25、v word ptrbp-2,0 ;x=0 | | mov ax,word ptrbp+4 ; | | mov word ptrbp-4,ax ;y | | mov ax,0fffeh ; | p |-bp-6 imul word ptrbp+4 ;ax=radius*(-2) | y |-bp-4 add ax,3 ;ax=3-2*radius | x |-bp-2 mov word ptrbp-6,ax ;p=3-2*radius | bp |-bp c0: mov ax,word ptrbp-2 ;ax=x |返回地址|-bp+2 cmp ax,word ptrbp-4 ;if xy,j

26、mp c00 | radius |-bp+4 jl c00 ; | yc |-bp+6 jmp c3 ; | xc |-bp+8 c00: push word ptrbp+8 ; circle堆栈结构 push word ptrbp+6 ; push word ptrbp-2 push word ptrbp-4 call circle_point cmp word ptrbp-6,0 jge c1 mov ax,4 mul word ptrbp-2 add ax,6 add ax,word ptrbp-6 mov word ptrbp-6,ax jmp c2 c1: mov ax,word p

27、trbp-2 sub ax,word ptrbp-4 mov bx,4 imul bx add ax,10 add ax,word ptrbp-6 mov word ptrbp-6,ax dec word ptrbp-4 c2: inc word ptrbp-2 jmp c0 c3: mov ax,word ptrbp-2 cmp ax,word ptrbp-4 jne c4 push word ptrbp+8 push word ptrbp+6 push word ptrbp-2 push word ptrbp-4 call circle_point c4: mov sp,bp pop bp ret 6 circle endp circle_point proc near push bp mov bp,sp sub sp,16 mov ax,word ptrbp+10 ; add ax,word ptrbp+6 ; mov word ptrbp-2,ax ;xc+x mov ax,word ptrbp+10 ; sub

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

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