微机课程设计八路抢答器

  • 格式:docx
  • 大小:265.50 KB
  • 文档页数:19

微机课程设计八路抢答器

目录

(1)课程设计题目;

(2)课程设计任务与要求;

(3)设计过程(包括方案论证、设计原理、创新点以及采用的新技术等);

(4)硬件系统框图与说明;

(5)软件主要模块流程图与说明;

(6)工作总结(包括自己的收获与体会;遇到的问题和解决的方法;技术实现技巧和创新点;作品存在的问题和改进设想等);(7)附录

1、源程序及程序注释

2、原理图

3、参考文献

八路抢答器

一、课程设计任务与要求:

1、利用8255A,8086,8259等的硬件下,利用程序实现一个抢答器的功能;

2、设计具有倒计时功能的计数器;

3、设计具有在外界控制下可加分,并显示的功能;

4、设计具有可以用来抢答的功能;

二、设计过程

1、倒计时子程序:

选手在主持人按了开始键后抢答成功后,系统将调用子程序倒计时。倒计时时先显示20秒,然后利用十位的1~0的循环,和个位的9~0的循环,使之依次显示19,18…01,00秒,便完成了抢答器的倒计时。具体流程图如下: 2、显示分数子程序:

程序先得到当前选手的编号,根据编号得到该选手的分数。用cx记录该分数100的个数,首先赋值为0,然后将该分数与100比较,如大于100,则将该分数减100,100的个数cx加一,如小于100,则得到该分数100的个数cx,并得到该cx的LED字母,并输出到state[1];然后用cx记录该分数10的个数,先赋值为0,然后将该分数与10比较,如大于10,则将该分数减10,10的个数cx 加一,如小于10,则得到该分数10的个数cx,并得到其LED字母,输出到state[2];此时分数已为个位数,根据该个位数得到该分数个位的LED字母,输出到state[3]。

具体流程图:

三、硬件系统框图与说明

将8个抢答按钮信号通过一个8位并行输入口接至微机中。当主持人启动抢答过程后,微机通过该并行输入口循环对8路抢答信号进行采样。当采样到那一组的抢答信号已经发出,则立即停止采样,并记录下该组的组号

当8组均未按下抢答按钮时,送入到并行接口的8位抢答状态都是0,而当微机采样到这8位数据不为0时,则表示有一组获得了抢答机会,然后通过逐位查询个位状态,即可判断出哪一组抢答成功,最后利用并行输出接口将抢答成功的组号现实出来.在实验中,可以仅用一位7段数码管来显示抢答选手的组号.

为了对抢答后的回答时间进行计时控制,可以利用一个可编程定时计时器,先置计数初值,再计时,当计时时间到后,由并行接口输出一个响铃信号提示抢答选手的回答时间已到。

四、软件主要模块流程图与说明

1、倒计时源代码:

COUNTDOWN PROC ;倒计时子程序,倒计时20秒 PUSH AX PUSH BX PUSH CX

PUSH DX

PUSH SI

MOV AL,5BH ;首先输出20

MOV BX,OFFSET STATE

ADD BX,2

MOV [BX],AL ;将2LED字母输出到state[2]

MOV AL,3FH

INC BX

MOV [BX],AL ;将0的LED字母输出到state[3]

MOV CX,0E0H

B1: CALL DISPLAY1 ;显示20秒

LOOP B1

MOV BX,OFFSET TABLE2

MOV SI,OFFSET TABLE1

MOV CX,2 ;十位的循环显示(1,0)SHIWEI: PUSH CX

MOV SI,OFFSET STATE

ADD SI,2

MOV AL,[BX] ;得到十位的LED代码

MOV [SI],AL ;将其输出到state[2]

MOV CX,10 ;个位的循环显示(9,8,…1,0)

MOV SI,OFFSET TABLE1

PUSH BX

MOV BX,OFFSET STATE

ADD BX,3

GEWEI: MOV AL,[SI] ;得到个位的LED字母

MOV [BX],AL ;将其输出到state[3]

PUSH CX

MOV CX,0E0H

B2: CALL DISPLAY1 ;显示该数字一秒钟 LOOP B2

INC SI

POP CX

LOOP GEWEI

POP CX

LOOPSHIWEI

POP SI

POP DX

POP CX

POP BX

POP AX

RET

COUNTDOWN ENDP

2、显示分数源代码:

SCORE PROC ;显示当前选手分数子程序

PUSH AX

PUSH BX

PUSH CX

PUSH DX

MOV AL,CURRNUM ;得到该选手编号

ADD AL,AL

AND AX,00FFH

MOV BX,OFFSET SCORE

ADD BX,AX

MOV AX,[BX] ;得到该选手分数

MOV CL,0 ;用于记录100的个数NUM1: CMP AX,100 ;判断该分数是否小于100 JL OUT1

SUB AX,100 ;该分数大于100,则减100

INC CL ;将100的个数加1

JMP NUM1 OUT1: PUSH AX ;将100个数输出

MOV BX,OFFSET TAB

AND CX,00FFH

ADD BX,CX

MOV AL,[BX] ;得到其LED字母

MOV BX,OFFSET STATE

ADD BX,1

MOV [BX],AL ;将之输出到state[1]

MOV CL,0 ;记录10的个数

POP AX

NUM2: CMP AX,10 ;判断是否小于10

JL OUT2

SUB AX,10 ;大于10,则将之减10

INC CL ;10的个数加1

JMP NUM2

OUT2: PUSH AX ;输出10的个数

AND CX,00FFH

MOV BX,OFFSET TAB

ADD BX,CX

MOV AL,[BX] ;得到其LED字母

MOV BX,OFFSET STATE

ADD BX,2

MOV [BX],AL ;将其输出到state[2]

POP AX

OUT3: MOV BX,OFFSET TAB ;输出个位

ADD BX,AX

MOV AL,[BX] ;得到其LED字母

MOV BX,OFFSET STATE

ADD BX,3

MOV [BX],AL ;将其输出到state[3] POP SI

POP DX

POP CX

POP BX

POP AX

RET

SCORE ENDP

五、总结

1、了解自己的模块功能后,首先要想出怎样实现它,并写出流程图,这样才会

顺利地写出子程序代码,才不会进入进退两难的境地。编写程序时,还要和别的成员多多交流,这样才能使程序合并起来后能顺利地运行。编写自己的程序时,能比较容易地实现出来,但合并起来后,出现的问题很多。但经过慢慢地调试、修改,终于使我们的程序运行了出来。

2、我加深了对课本知识的理解,同时熟练掌握了汇编语言的编辑、调试工具。

在以后的学习生活中还要继续保持严谨认真的科学态度,保持不断尝试和探索的耐心,保持勇于解决问题的决心。

3、在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性。把学过

的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。

六、附录

1、源程序及程序注释

DATA SEGMENT

TAB DB 3FH,06H,5BH,66H,6DH,7DH,07H,7FH,6FH

TABLE1 DB 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH

TABLE2 DB 06H,3FH

BZ DB 00H CURRNUM DB 0

SCORE DW 0,100,100,100,100

STATE DB 0,0,0,0

DATA ENDS

CODE SEGMENT

AUUSME CS:CODE,DS:DA TA

START: MOV AX,DATA

MOV DS,AX

MOV AL,10010000B ;初始化8255

OUT 63H,AL

BEGIN: CALL DISPLAY ;调用显示程序,让其显示state中内容IN AL,60H ;扫描端口A的开关键内容

TEST AL,0FFH ;检测是否有键按下

JZ BEGIN ;如无键按下,则循环扫描

CALL ONESECOND2 ;有键按下时,调用延时程序段消抖动KAISHIT: TEST AL,00001000B ;有键按下时,测试是否是开始键

JNZ KAISHIKEY

JMP FUWEIT

KAISHIKEY: CALL KAISH ;调用开始键程序

JMP BEGIN

FUWEIT: TEST AL,00000100B ;测试是否是复位键

JNZ FUWEIKEY

JMP UP

FUWEIKEY: CALL FUWEI

JMP BEGIN

UP: TEST AL,00000010B ;测试是否是加分键

JNZ UPKEY

JMP DOWN

UPKEY: CALL UPSCORE

JMP BEGIN