《微机原理与接口技术》课程设计显示图型变换程序.doc

上传人:laozhun 文档编号:2881855 上传时间:2023-03-01 格式:DOC 页数:27 大小:6.93MB
返回 下载 相关 举报
《微机原理与接口技术》课程设计显示图型变换程序.doc_第1页
第1页 / 共27页
《微机原理与接口技术》课程设计显示图型变换程序.doc_第2页
第2页 / 共27页
《微机原理与接口技术》课程设计显示图型变换程序.doc_第3页
第3页 / 共27页
《微机原理与接口技术》课程设计显示图型变换程序.doc_第4页
第4页 / 共27页
《微机原理与接口技术》课程设计显示图型变换程序.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《《微机原理与接口技术》课程设计显示图型变换程序.doc》由会员分享,可在线阅读,更多相关《《微机原理与接口技术》课程设计显示图型变换程序.doc(27页珍藏版)》请在三一办公上搜索。

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.刘乐善,华中科技大学出版社.5IBM PC汇编语言

9、程序设计,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 segment stackdb

10、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 continusejmp i

11、nputzhen: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 a2pop d3add d3,

12、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 al,1mov ah,9m

13、ov 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;*光标向左动*line3: mov

14、 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 ah,7mov al,14

15、mov 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 10h ;显示模式mov

16、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;比较大小 jb loop2;小于跳转

17、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 mov bx,100;2r s

18、ub 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,0ch int 10h cmp

19、 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,50000 d11:mov cx,

20、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 mov ds,ax mov ax,

21、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;key c or c jnz s

22、kip 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/8),ah | | mov c

23、l,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 al,es:bx mov ax,

24、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 mov word ptrbp-2,

25、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,jmp c00 | radius

26、 |-bp+4 jl c00 ; | yc |-bp+6 jmp c3 ; | xc | | | sub ax,word ptrbp+4 ; | yc-y |-bp-16 mov word ptrbp-8,ax ;xc-y | yc+y |-bp-14 mov ax,word ptrbp+8 ; | yc-x |-bp-12 add ax,word ptrbp+6 ; | yc+x |-bp-10 mov word ptrbp-10,ax ;yc+x | xc-y |-bp-8 mov ax,word ptrbp+8 ; | xc+y |-bp-6 sub ax,word ptrbp+6 ;

27、| xc-x |-bp-4 mov word ptrbp-12,ax ;yc-x | xc+x |-bp-2 mov ax,word ptrbp+8 ; | bp |-bp add ax,word ptrbp+4 ; |返回地址|-bp+2 mov word ptrbp-14,ax ;yc+y | y |-bp+4 mov ax,word ptrbp+8 ; | x |-bp+6 sub ax,word ptrbp+4 ; | yc |-bp+8 mov word ptrbp-16,ax ;yc-y | xc |-bp+10 push word ptrbp-2 ; | | push word

28、ptrbp-14 ; circle_point堆栈结构 push color call pixel push word ptrbp-4 push word ptrbp-14 push color call pixel push word ptrbp-2 push word ptrbp-16 push color call pixel push word ptrbp-4 push word ptrbp-16 push color call pixel push word ptrbp-6 push word ptrbp-10 push color call pixel push word ptrb

29、p-8 push word ptrbp-10 push color call pixel push word ptrbp-6 push word ptrbp-12 push color call pixel push word ptrbp-8 push word ptrbp-12 push color call pixel mov sp,bp pop bp ret 8 circle_point endp ;* ;设置写模式的函数 ;* set_write_mode proc near push ax mov dx,3ceh mov al,5 out dx,al mov dx,3cfh pop ax out dx,al mov dx,3ceh mov al,8 out dx,al mov dx,3cfh mov al,0ffh out dx,al ret set_write_mode endp codes ends end start

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号