微机课程设计八路抢答器
- 格式: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