太原理工大学微机原理与接口技术课程设计_微机接口技术课程设计

2020-02-27 其他范文 下载本文

太原理工大学微机原理与接口技术课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“微机接口技术课程设计”。

微机原理课程设计

学校:

学院:

设计题目:

专业班级:

姓名:

学号:

太原理工大学

信息工程学院

国际象棋棋盘绘制程序

一.课程设计的题目:国际象棋棋盘绘制程序 二.程序功能简述

本程序在屏幕上左侧绘制一个红黑相间的国际象棋棋盘,右侧绘制一个汉字‘棋’,棋字的四个角有角框。显示完后,按q退出。

运行本程序后,从屏幕左上角开始,棋盘的奇数行位置逐行出现彼此相间15个像素宽的红色块(虚的),共出现五行,每行五个红色块,然后从第一行的第一个色块的右下角开始,在棋盘的偶数行位置逐行出现彼此相间15个像素宽的红色块(虚的),每行四块,共四行。其中红色块由8X8个彼此相间一个像素的红点组成,前一个色块和后一个色块之间有一定的显示时间间隔。

然后,屏幕的右侧会按‘棋’的笔画顺序,一笔一画的显示汉字‘棋’,其中前一笔和后一笔之间有一定的显示时间间隔。然后按先横后竖的顺序,在棋字的四个角的斜上方显示四个角框。笔画同样有时间间隔。显示完后,若在键盘上输入q,则程序退出。

三.主要设计思想简述

本程序主要通过调用 10H号BIOS中断的0CH号功能点调用来显示图像。将要显示点的坐标(line,cow)分别传送到dx,cx,然后将点的颜色代码传送al,接着调用10H号BIOS中断的0CH号功能,一个点就显示出来。

显示矩形块以及笔画(横,竖,撇,捺)是先确定第一个点的坐标后,然后让点的行坐标line,列坐标cow按某种方式循环,每次循环后调用10H号BIOS中断的0CH号功能来完成点的显示。全部循环完后,这些点的排列就是要显示的矩形块或笔画。

所以,点的行坐标line,列坐标cow的循环方式就决定了要显示的图像。显示矩形块(虚的)的循环方式是:line,cow都循环,line在外层,循环一次加2,cow在内层,循环一次加2,line循环的次数决定了方块的高,cow循环的次数决定了方块的宽。笔画横的循环方式是: 只cow循环,循环一次加1,循环的次数决定了笔画横的长度。笔画竖的循环方式是:只line循环,循环一次加1,循环的次数决定了笔画竖的长度。笔画撇的循环方式是: line,cow都循环,在同一层。循环一次line加1,cow减1。循环的次数决定了笔画撇的长度 笔画捺的循环方式是:line,cow都循环,在同一层。循环一次line加1,cow加1。循环的次数决定了笔画捺的长度。

第一个点的坐标,循环方式,循环的次数决定了要显示的图形的位置,形状,尺寸。

将位置不同的矩形块(虚的)按照棋盘的几何结构显示出来,就构成了棋盘。将位置,长度不同的笔画(横,竖,撇,捺)按照棋字的几何结构显示出来,就构成了棋字。边框同理。

三.程序流程图

。四.源程序代码

DATA

SEGMENT LINE

DW

0

;矩形块左上角的行 ROW

DW

0

;矩形块左上角的列 PIX

DB

;矩形块的颜色 N

DW

?

;文字笔画的长度 PIX_A DB

;文字笔画的颜色 DATA

ENDS

CODE

SEGMENT

ASSUME CS:CODE,DS:DATA START:

;主程序

MOV AX , DATA

MOV DS , AX

MOV AH , 0

MOV AL , 4

INT 10H

;设置320×200彩色图形方式

mov ah,0bh

mov bh,01

mov bl,0

int 10h

KUAI

MACRO

R,L,N

;定义显示矩形块阵列宏

LOCAL LA,LB

MOV ROW,R

MOV LINE,L

mov di,N

LA:

MOV CX, N

LB:

CALL DISP_RECT

call delay

ADD row, 30

LOOP LB

MOV ROW, R

add line,30

DEC DI

JNZ LA

ENDM

HONG1 MACRO L,R,NUM,CHEN

;定义显示笔画宏

MOV LINE,L

MOV ROW,R

MOV N,NUM

CALL CHEN

CALL delay1

ENDM

KUAI

0,0,5

;显示棋盘奇数行

KUAI

15,15,4

;显示棋盘偶数行

HONG1 30,165,21,HENG

;显示‘棋’字

HONG1 15,176,60,SHU

HONG1 31,175,10,PIAN

HONG1 32,178,5,NA

HONG1 30,191,30,HENG

HONG1 15,196,45,SHU

HONG1 15,214,45,SHU

HONG1 40,196,19,HENG

HONG1 50,196,19,HENG

HONG1 60,191,30,HENG

HONG1 63,200,10,PIAN

HONG1 63,210,12,NA

HONG1 10,160,5,HENG

;显示角框

L5:

DISP_RECT

HONG1 10,160,5,SHU HONG1 10,223,5,HENG HONG1 10,228,5,SHU HONG1 80,160,5,HENG HONG1 75,160,5,SHU HONG1 80,223,5,HENG HONG1 75,228,6,SHU

mov

ah,8

;按q返回DOS int

21h cmp

al,'q' JNE

L5 MOV AH , 4CH INT 21H

PROC near PUSH AX PUSH CX PUSH DX PUSH SI PUSH DI MOV AH , 0CH

;指明写点调用 MOV AL , PIX

;取点的颜色

MOV DI , 8

;用于控制行显示循环

MOV DX , LINE

;取点的行坐标 DISP_2:

MOV SI , 8

;控制列显示循环

MOV CX , ROW

;取显示点的列坐标 DISP_1:

INT 10H

;完成点的显示

INC CX

DISP_RECT

DELAY

D11:

D12:

inc cx

DEC SI JNZ DISP_1

INC DX inc dx

DEC DI JNZ DISP_2

POP DI POP SI POP DX POP CX POP AX RET ENDP PROC NEAR

PUSH CX PUSH DX MOV DX,2500 MOV CX,25000

LOOP D12 DEC

DX JNZ

D11 POP

DX

;列坐标加2;循环显示完一行;行坐标加2;循环显示完8行

;延时子程序

POP

CX

RET DELAY

ENDP

DELAY1

PROC NEAR

;延时子程序1

PUSH CX

D11A:

D12A:

DELAY1

HENG

DISP_3:

PUSH DX MOV DX,10000 MOV CX,25000

LOOP D12A DEC

DX JNZ

D11A POP

DX POP

CX RET ENDP PROC near

PUSH AX PUSH CX PUSH DX PUSH SI PUSH DI MOV AH , 0CH

MOV AL , PIX_A MOV DX , LINE

MOV SI , N

MOV CX , ROW

INT 10H

inc cx

DEC SI

;笔画横的子程序

;指明写点调用

;取点的颜色

;取点的行坐标

;控制列显示循环

;取显示点的列坐标;完成点的显示;列坐标加1(行不变)12

JNZ DISP_3

;循环显示完一行

POP DI

POP SI

POP DX

POP CX

POP AX

HENG

SHU

DISP_4:

RET ENDP PROC near

PUSH AX PUSH CX PUSH DX PUSH SI PUSH DI MOV AH , 0CH

MOV AL , PIX_A

MOV DI , N

MOV DX , LINE

MOV CX , ROW

INT 10H

inc DX

DEC DI JNZ DISP_4

POP DI POP SI POP DX POP CX POP AX RET

;笔画竖的子程序

;指明写点调用;取点的颜色;用于控制行显示循环

;取点的行坐标

;取显示点的列坐标;完成点的显示;行坐标加1(列不变);循环显示完一列 13

SHU

ENDP

PIAN

PROC near

;笔画撇的子程序

PUSH AX

PUSH CX

PUSH DX

DISP_5:

PIAN

NA

PUSH SI PUSH DI MOV AH , 0CH

MOV AL , PIX_A

MOV DI , N

MOV DX , LINE

MOV CX , ROW

INT 10H

DEC cx

inc DX

DEC DI JNZ DISP_5

POP DI POP SI POP DX POP CX POP AX RET ENDP PROC near

PUSH AX PUSH CX PUSH DX

;指明写点调用;取点的颜色;用于控制撇的长度

;取点的行坐标

;取显示点的列坐标;完成点的显示;列坐标减1;行坐标加1;笔画捺的子程序 14

PUSH SI

PUSH DI

MOV AH , 0CH

;指明写点调用

MOV AL , PIX_A

;取点的颜色

MOV DI , N

;用于控制显示循环

MOV DX , LINE

;取点的行坐标

MOV CX , ROW

;取显示点的列坐标 DISP_6:

INT 10H

;完成点的显示

INC cx

;列坐标加1

inc DX

;行坐标加1

DEC DI

JNZ DISP_6

POP DI

POP SI

POP DX

POP CX

POP AX

RET NA

ENDP

CODE

ENDS

END START

五.总结报告

①课程设计中所遇到的主要问题和解决方法。

首先遇到的问题是程序的调试,我把程序写好并检查后没发现错误,然后上机汇 15 编却发现5个警告错误,看错误类型号,都是英语,看不懂,幸好课本后部附录里有翻译,这个问题解决了,但我还是不知道错误的那几行哪里错,看起来很正确。最后。经过思考和耐心检查,终于解决了,原来其中一行把宏实参0写成了O(读欧),这一行的错误导致了其他行的错误。调试程序确实需要耐心,这个错误很简单,但太隐蔽了,检查了20分钟,差点没抓狂。

然后遇到的问题是画流程图,由于以前没画过,也不知道用什么软件,就去网上搜索,于是发现了windows office套件中的 Visio。Visio确实很好用,操作很简单,容易上手,画出的图很漂亮,流程图终于完成了。

②创新和得意之处。

这个程序是仿写的,但基本上只是借鉴了它的方法,95%的内容是重写的,增加了许多东西和功能。我觉的自己的这个程序比较起来还是简洁的,设计了两个宏和五个子程序来实现各种功能,然后在主程序中调用。代码看起来比较整齐,条理,如果要显示别的图像,只要在主程序中改一下宏的参数就可以了。

③课程设计中存在的不足,需要进一步改进的设想。

这个程序还是不够精练,五个图形子程序有许多相似的地方,功能区别不大,加上些判断,应该可以合并成一个子程序,两个延时子程序除了参数,其实是一个子程序,也可以合并成一个子程序,这样用内存会少很多。

④课程设计的感想和心得体会。

课程设计做完了,之前觉的很难,但做完以后,又感觉很简单,最起码对我的这个程序来说。曾经的困惑现在已经成了知识,有一种成就感。可以说,我享受了一次微机原理课程设计。对此而言,前几天的辛苦和思考都是值得的。真希望这样的课程设计能多些。在课程设计中,感觉真正的学到了东西。以前书本上的知识得到融会贯通,更加透彻的理解了知识间的联系。指令系统也更熟悉了,看来学编程只有两种方法,看程序,写程序,先看后写。

在课程设计中,第一次领会到汇编语言的美妙。简洁,精确,效率,这就是汇编。汇编的简洁和对硬件的精确控制给我留下很深的映象。实现同样的功能,用c的 16 话编译出来也许得30条指令,但用汇编5,6条就解决了。写汇编程序时似乎可以看到cpu在如何工作。终于理解了学微机原理为什么要学汇编了。

《太原理工大学微机原理与接口技术课程设计.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
太原理工大学微机原理与接口技术课程设计
点击下载文档
相关专题 微机接口技术课程设计 大学 微机 课程设计 微机接口技术课程设计 大学 微机 课程设计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文