代码输入器课程设计说明书.docx

上传人:b****5 文档编号:11776165 上传时间:2023-04-01 格式:DOCX 页数:23 大小:32.45KB
下载 相关 举报
代码输入器课程设计说明书.docx_第1页
第1页 / 共23页
代码输入器课程设计说明书.docx_第2页
第2页 / 共23页
代码输入器课程设计说明书.docx_第3页
第3页 / 共23页
代码输入器课程设计说明书.docx_第4页
第4页 / 共23页
代码输入器课程设计说明书.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

代码输入器课程设计说明书.docx

《代码输入器课程设计说明书.docx》由会员分享,可在线阅读,更多相关《代码输入器课程设计说明书.docx(23页珍藏版)》请在冰豆网上搜索。

代码输入器课程设计说明书.docx

代码输入器课程设计说明书

微机原理与接口技术

课程设计说明书

代码输入器设计

起止日期:

2012年12月22日至2012年12月28日

 

学生姓名

班级

学号

成绩

指导教师(签字)

 

运算机与通信学院

2012年12月28日

课题名称

微机原理与接口技术课程设计

人数

5

组长

同组人员

一、设计目的

通过该设计,掌握8255并行接口芯片的使用,普通键盘的设计和数码管的使用,并掌握相应的程序设计和电路设计的技能。

是对8255并行接口芯片章节理论学习的总结和补充,为后续的硬件课程的学习打下基础。

二、设计内容

利用开发板KB-C中的18个按钮中的前16个作为代码键,即代表:

0、1、2、…9、A、B、C、D、E、F,最后2个键,1个为删除键(S24),一个为回车键(S25),实现以下功能:

每按1个键,则在屏幕上显示相应该键代表的字符,按S25键结束输入,每个代码为4个16进制代码组成。

再利用KB-C上的6个数码管中最后面的4个,在输入代码时不在屏幕上显示,而在数码管上显示,即输第1个时,在最后1位显示,输第2个时,前的那个在倒数第2个显示,而刚才输入的那个在最后1位显示,如此等等,4个代码输完后,按S25结束输入,并在屏幕上显示出来。

具体任务

分析课题,汇总,调试,修正程序错误等

时间安排与完成情况

一、时间安排:

1、12月22日:

分组、任务分配、课题理解。

2、6月23日-6月24日:

功能分析、程序设计。

3、6月25日-6月27日:

实验验证和测试。

4、6月28日:

总结、书写实验报告。

二、完成情况:

在大家的共同努力下我们在安排的时间里顺利完成了相应的任务,同时我们也在课程设计过程中学到了很多。

一、基本原理

1、按钮的原理:

在KB-C板上,端口A负责发按键扫描信息,端口C的低3位,即PC0、PC1、PC2,负责接收扫描结果,如下图所示,先定时通过端口A(PA0,PA1,PA2,PA3,PA4,PA5)扫描各按钮,即先PA0=0,其它为1发信号,然后PA1=0,其它为1…,端口发出1个信号后,即读端口C,如果PC0,PC1,PC2全为高电平,说明无按钮按下,如果PC0为低电平(PC1,PC2肯定为高电平),且此时,端口扫描的情况是:

PA0=1,PA1=0,PA2=1,…则说明SW1被按下。

2、数码管显示原理

数码管由8255端口B和端口C联合控制,端口负责控制某个数码管中的那些段码的显示和小数点的显示(PB7)。

端口C的PC4,PC5,PC6发送的信号通过译码后,负责选择6个数码管中的1个显示,即某时刻只有1个数码显示,如果要让几个同时显示,则采用来回扫描显示的方法,且当某个数码管显示时,必须要有一定的延时,约在100ms左右,太短显示不明显(发光不够),太长会产生闪烁。

数码管的控制如下图所示:

 

键盘对应的ASCII码表

键盘

0

1

2

3

4

5

6

7

8

9

10

ASCII

30H

31H

32H

33H

34H

35H

36H

37H

38H

39H

41H

键盘

11

12

13

14

15

ASCII

42H

43H

44H

45H

46H

 

键盘对应发光二极管表

键盘

0

1

2

3

4

5

6

7

8

发光二极管

3FH

06H

5BH

4FH

66H

6DH

7DH

07H

7FH

键盘

9

10

11

12

13

14

15

发光二极管

67H

77H

7CH

39H

5EH

79H

71H

 

二、设计步骤

1、程序流程图

1)、程序一流程图:

8255A的初始化

开始始

判断是否有键按下

回车

结束

在屏幕上显示

Y

Y

N

N

 

流程图说明:

8255初始化后,程序一直扫描键盘,如果没有按键按下则直接继续扫描键盘,如果有按键按下,则判断按键是否是回车键,如果是回车则结束程序,否则显示出按键所对应的十六进制字符到电脑屏幕上。

 

2)、程序二流程图

回车

在四个发光二极管上显示相应的按键值(按第一个在最右端显示,按第二个第一个左移,第二个在最右端显示)

在屏幕上显示发光二极管上的信息

开始

8255的初始化

扫描键盘

结束

Y

N

程序二流程图说明:

8255初始化后程序开始扫描键盘,如果没有按键按下则继续扫描键盘,如果有按键按下则判断是不是回车键,如果是回车键则把输入的最后四个字符输出到电脑屏幕上显示,如果不是则把数码管和屏幕显示对应的第三位左移到第四位,第二位左移到第三位,第一位左移到第二位,再把新输入进来的存到第一位。

的初始化

1)、程序一:

MOVAL,81H

MOVDX,CON_8255;CON_8255即303H

OUTDX,AL

2)、程序2:

moval,b

movdx,303h

outdx,al

程序一和程序二初始化相同,但是程序一只需要端口A和端口C低三位输入。

而程序二需要端口A和端口C低三位输入和端口B和端口C的第五六七位输出才可以。

 

根据课程设计要求和上面整个程序的流程图以及我们对程序的分析有下列程序段:

1)、数据段

程序1:

DATASEGMENT

PC_0DB'012345';在屏幕上显示的数据

PC_1DB'6789AB'

PC_2DB'CDEF'

DATAENDS

程序2:

datasegment

pc_0db3fh,06h,5bh,4fh,66h,6dh;发光二极管

pc_1db7dh,07h,7fh,67h,77h,7ch

pc_2db39h,5eh,79h,71h

pcA_0db30h,31h,32h,33h,34h,35h;DOS字符ASCII值

pcA_1db36h,37h,38h,39h,41h,42h

pcA_2db43h,44h,45h,46h

tempdb00h,00h,00h,00h;四个灯的变量

temp1db30h,30h,30h,30h;DOS字符的值

dataends

2)、键盘扫描

两个程序的键盘扫描基本上是一样的:

WAIT1:

MOVAL,0FEH

MOVBH,0D

WAIT2:

MOVDX,300H

OUTDX,AL

MOVBL,AL

MOVDX,302H

INAL,DX

TESTAL,00000001B;测试D0位是否为1

JZPC0

TESTAL,00000010B;测试D1位是否为1

JZPC1

TESTAL,00000100B;测试D2位是否为1

JZPC2

MOVAL,BL

ROLAL,1

INCBH

INCBH

CMPBH,12

JZWAIT1

JMPWAIT2

PC0:

MOVSI,OFFSETPC_0;响应第一排键盘的某个按钮

CALLKEYB_HANDLING

CALLDELAY

JMPWAIT1

PC1:

MOVSI,OFFSETPC_1;响应第二排键盘的某个按钮

CALLKEYB_HANDLING

CALLDELAY

JMPWAIT1

PC2:

MOVSI,OFFSETPC_2;响应第三排键盘的某个按钮

CMPBH,8

JLNEXT1

JNZNEXT

CALLBACKSPACE

JMPWR

3)、屏幕显示

程序1:

KEYB_HANDLINGPROC;键盘响应

MOVBL,BH

MOVBH,00H

MOVAL,[SI+BX]

movdl,al

movah,02h

int21h

CALLDELAY

RET

KEYB_HANDLINGENDP

程序2:

inputproc;输入到显示在屏幕上的值

callshift_e

moval,[si+bx]

movsi,offsettemp1

mov[si],al

ret

inputendp

4)、数码管显示

showproc;显示在发光二极管

pushax

pushbx

movsi,offsettemp

movcx,4

movbx,0

movah,00h

bbb:

moval,ah

movdx,302h

outdx,al

moval,[si+bx]

incbx

movdx,301h

outdx,al

addah,10h

calldelay1

loopbbb

popbx

popax

ret

showendp

5)、数码管数字和电脑屏幕字符的移动

数码管数字移动:

shift_lproc;二极管的灯左移动

pushsi

pushax

pushcx

pushbx

movsi,offsettemp

movcx,3

movbx,2

moval,2

bsss:

movbl,al

movah,[si+bx]

incbx

mov[si+bx],ah

decal

loopbsss

popbx

popcx

popax

popsi

ret

shift_lendp

电脑屏幕字符移动:

shift_eproc;显示在屏幕上的值的移动

pushsi

pushax

pushcx

pushbx

movsi,offsettemp1

movcx,3

movbx,2

moval,2

bsss1:

movbl,al

movah,[si+bx]

incbx

mov[si+bx],ah

decal

loopbsss1

popbx

popcx

popax

popsi

ret

shift_eendp

 

程序一比较简单,没有花费太多时间就做好了。

程序二其实也不难,只是由于我们不是一个人在设计而是五个组员都在共同工作,开始的时候我们的程序在我们看来没有错,但是运行起来没有看到想要的结果。

经过我们不懈的努力我们终于获得了成功。

最后,程序一和程序二都运行正确,需要提出来的是,程序二有一点点不影响实验结果的问题:

数码显示管某些不应该亮的地方运行时有微弱的灯光,正也是我们到最后也没有解决的问题,需要请教老师。

 

心得体会:

经过本次微机课题的设计与研究,我们深入的学习了除课本以外的很多微机附件的内容,掌握了很多实验室操作技能。

我们在实际设计中遇到很多问题,但结合所学知识以及参考资料的帮助,不断地尝试,设计了一种能够解决实际问题的系统。

同时也加深了我们对于现实生活中,实际的嵌入式操作系统的原理的理解。

此次微机课程设计让我懂得了实践的重要性。

即使课本知识掌握的很好,如果不会综合运用,也是一些支离破碎的无用的知识,而如果能够运用而实际动手能力很差,理论与实践结合不起来,学得再好也没用。

这次课程设计恰好是将课本知识与的巩固与综合运用结合起来,再加上实际动手能力的培养三者结合起来的。

一方面,它加深与巩固了所学的各章节的理论,并将其综合运用,提高了我们综合运用知识的能力;另一方面,培养了我们对专业知识学习的趣。

总之,在这一过程中,我们充分发挥我们的主观能动性,想象创造性,攻克了很多之前都没有想过的难关,真的受益匪浅。

这次设计不仅仅耗时耗力,而且还要整天对着电脑进行仿真且不停的调试、修改,这次课程设计对我们理论和实验都有很大的提升,我想这些对于我们今后的学习生活都有很重要的意义,这将是我们在程序设计以及大学学习过程中的宝贵经验和财富。

附件

程序源代码:

1)程序一:

只在屏幕上显示

DATASEGMENT

A_8255EQU300H

B_8255EQU301H

C_8255EQU302H

CON_8255EQU303H

PC_0DB'012345'

PC_1DB'6789AB'

PC_2DB'CDEF'

 

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,81H

MOVDX,CON_8255

OUTDX,AL

MOVAL,00H

MOVDX,C_8255

OUTDX,AL

WAIT1:

MOVAL,0FEH

MOVBH,0d

WAIT2:

MOVDX,A_8255

OUTDX,AL

MOVBL,AL

MOVDX,C_8255

INAL,DX

TESTAL,00000001B

JZPC0

TESTAL,00000010B

JZPC1

TESTAL,00000100B

JZPC2

MOVAL,BL

ROLAL,1

INCBH

incbh

CMPBH,12

JZWAIT1

JMPWAIT2

PC0:

MOVSI,OFFSETPC_0

CALLKEYB_HANDLING

CALLDELAY

JMPWAIT1

PC1:

MOVSI,OFFSETPC_1

CALLKEYB_HANDLING

CALLDELAY

JMPWAIT1

PC2:

MOVSI,OFFSETPC_2

CMPBH,8

JLNEXT1

JNZNEXT

CALLBACKSPACE

JMPWR

NEXT:

CMPBH,10

JNZWR

CALLENTER

JMPWR

NEXT1:

CALLKEYB_HANDLING

WR:

CALLDELAY

JMPWAIT1

KEYB_HANDLINGPROC

MOVBL,BH

MOVBH,00H

MOVAL,[SI+BX]

MOVDL,AL

MOVAH,02H

INT21H

CALLDELAY

RET

KEYB_HANDLINGENDP

 

ENTERPROC

JMPEXIT

ENTERENDP

 

BACKSPACEPROC

MOVAL,00H

MOVDX,B_8255

OUTDX,AL

RET

BACKSPACEENDP

DELAYPROC

MOVCX,0D

AA1:

MOVBX,8000D

AA2:

DECBX

JNZAA2

LOOPAA1

RET

DELAYENDP

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

2)程序二:

在数码管上显示

datasegment

pc_0db3fh,06h,5bh,4fh,66h,6dh;发光二极管

pc_1db7dh,07h,7fh,67h,77h,7ch

pc_2db39h,5eh,79h,71h

pcA_0db30h,31h,32h,33h,34h,35h;DOS字符ASCII值

pcA_1db36h,37h,38h,39h,41h,42h

pcA_2db43h,44h,45h,46h

tempdb00h,00h,00h,00h;四个灯的变量

temp1db30h,30h,30h,30h;DOS字符的值

dataends

codesegment

assumecs:

code,ds:

data

beg:

movax,data

movds,ax

moval,b

movdx,303h

outdx,al

moval,00h

movdx,302h

outdx,al

f1:

moval,0feh;键盘扫描开始

movbh,00h

f2:

movdx,300h

outdx,al

movbl,al

callshow

movdx,302h

inal,dx

testal,00000001b

jzpc0

testal,00000010b

jzpc1

testal,00000100b

jzpc2

moval,bl

rolal,1

incbh

cmpbh,6h

jzf1

jmpf2

pc0:

movsi,offsetpc_0;第一排键盘

callkey_press

movsi,offsetpcA_0

callinput

calldelay

jmpf1

pc1:

movsi,offsetpc_1;第二排键盘

callkey_press

movsi,offsetpcA_1

callinput

calldelay

jmpf1

pc2:

movsi,offsetpc_2;第三排键盘

cmpbh,04h

jlnext1

jnznext

jmpwr

next:

cmpbh,05h;第17键盘

jnzwr

callenter

jmpwr

next1:

callkey_press

movsi,offsetpcA_2

callinput

wr:

calldelay

jmpf1

key_pressproc;键盘按下

movbl,bh

movbh,00h

callshift_l

moval,00h

movdx,302h

outdx,al

moval,[si+bx]

movdx,301h

outdx,al

movsi,offsettemp

mov[si],al

ret

key_pressendp

enterproc;回车盘

movsi,offsettemp1

movcx,4

movbx,3

bb1:

movdl,[si+bx]

decbx

movah,02h

int21h

loopbb1

jmpexit

enterendp

inputproc;输入到显示在屏幕上的值

callshift_e

moval,[si+bx]

movsi,offsettemp1

mov[si],al

ret

inputendp

showproc;显示在发光二极管

pushax

pushbx

movsi,offsettemp

movcx,4

movbx,0

movah,00h

bbb:

moval,ah

movdx,302h

outdx,al

moval,[si+bx]

incbx

movdx,301h

outdx,al

addah,10h

calldelay1

loopbbb

popbx

popax

ret

showendp

shift_lproc;二极管的灯左移动

pushsi

pushax

pushcx

pushbx

movsi,offsettemp

movcx,3

movbx,2

moval,2

bsss:

movbl,al

movah,[si+bx]

incbx

mov[si+bx],ah

decal

loopbsss

popbx

popcx

popax

popsi

ret

shift_lendp

delayproc;按键延时

pushax

pushbx

pushcx

movcx,0

dela:

movbx,2000

dela1:

decbx

jnzdela1

loopdela

popcx

popbx

popax

ret

delayendp

delay1proc;灯光延时

pushax

pushbx

pushcx

movcx,10000

dela0:

movbx,500

dela10:

decbx

jnzdela10

loopdela0

popcx

popbx

popax

ret

delay1endp

shift_eproc;显示在屏幕上的值的移动

pushsi

pushax

pushcx

pushbx

movsi,offsettemp1

movcx,3

movbx,2

moval,2

bsss1:

movbl,al

movah,[si+bx]

incbx

mov[si+bx],ah

decal

loopbsss1

popbx

popcx

popax

popsi

ret

shift_eendp

exit:

movah,4ch;退出返回到dos界面

int21h

codeends

endbeg

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

当前位置:首页 > 人文社科 > 文学研究

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

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