基于8088八路智能抢答器

2025-04-29

基于8088的智能抢答器

目录

((

21))课

课程

程设

设任

计务

题与

要目求

; ;

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

4

)技硬

术系

等框

)说

; ;

(5)软件主要模块流程图与说明; (6)工作总结(包括自己的收获与体会;遇到的问题和解决的方法;技术实现技巧和创新点;作品存在的问题和改进设想等); (

7

1、源程序及程序注释 2

3、参考文献

八路抢答器

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

1、利用8255A,8088,8259等的硬件下,利用程序实现一个抢答器的功能; 2、设计具有倒计时功能的计数器;

3、设计具有在外界控制下可加分,并显示的功能; 4、设计具有可以用来抢答的功能;

二、设计过程

1、倒计时子程序:

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

开始

显示1秒

十位输出到state[2]

将个位输出到state[3],显示个位 和十位1秒 否 个位循环10?

是 否 十位循环2? 结束

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]。

具体流程图:

将十位数的LED字母输出到state[2] 分数减十,ax=ax-10; 10的个数加一,cx=cx+1 ax < 10? 将百位数的LED字母输出到state[1],10的个数cx=0 分数减一百,ax=ax-100; 100个数加一,cx=cx+1 开始 得到该选手分数,存入ax; 100的个数cx=0 ax < 100

结束 ax已为个位数的个数,将个位数的LED字母输出到state[3]

三、硬件系统框图与说明

8088 8259 译码器定时器 时钟电路

将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 MOV CX,0E0H

B1: CALL DISPLAY1 LOOP B1

MOV BX,OFFSET TABLE2

MOV SI,OFFSET TABLE1

MOV CX,2 SHIWEI: PUSH CX

MOV SI,OFFSET STATE ADD SI,2

MOV AL,[BX] MOV [SI],AL MOV CX,10 MOV SI,OFFSET TABLE1 PUSH BX

MOV BX,OFFSET STATE

ADD BX,3

GEWEI: MOV AL,[SI] MOV [BX],AL 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

;将0的LED字母输出到state[3] ;显示20秒 ;十位的循环显示(1,0) ;得到十位的LED代码 ;将其输出到state[2]

;个位的循环显示(9,8,…1,0) ;得到个位的LED字母 ;将其输出到state[3] ;显示该数字一秒钟

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 NUM1: CMP AX,100 JL OUT1

SUB AX,100 INC CL JMP NUM1

OUT1: PUSH AX MOV BX,OFFSET TAB AND CX,00FFH ADD BX,CX

MOV AL,[BX] MOV BX,OFFSET STATE

ADD BX,1

MOV [BX],AL MOV CL,0 POP AX

NUM2: CMP AX,10 JL OUT2 SUB AX,10 INC CL JMP NUM2

OUT2: PUSH AX AND CX,00FFH

MOV BX,OFFSET TAB

ADD BX,CX

MOV AL,[BX] MOV BX,OFFSET STATE ADD BX,2

MOV [BX],AL ;得到该选手编号 ;得到该选手分数

;用于记录100的个数 ;判断该分数是否小于100 ;该分数大于100,则减100 ;将100的个数加1 ;将100个数输出 ;得到其LED字母 ;将之输出到state[1] ;记录10的个数 ;判断是否小于10

;大于10,则将之减10 10的个数加1 ;输出10的个数 ;得到其LED字母 ;将其输出到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:DATA

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

DOWN: TEST AL,00000001B JNZ DOWNKEY JMP GETNUM

DOWNKEY: CALL DOWNSCORE JMP BEGIN

GETNUM: MOV BL,CURRNUM CMP BL,0 JNZ BEGIN

MOV CX,4 MOV BL,00010000B TEST1: TEST AL,BL JNZ GETCKEY

ROL BL,1 LOOP BEGIN

GETCKEY: CALL GETKNUM JMP BEGIN

KAISHI PROC MOV BZ,0FFH RET KAISHI ENDP

;有键按下时,测试是否是开始键 ;测试是否是复位键 ;测试是否是加分键 ;测试是否是减分键 ;测试是否是抢答键 ;用于循环及测试抢答键编号

;开始键子程序

;将bz置0ffh,测试开始键是否按下 ;调用开始键程序 FUWEI PROC ;复位键子程序 ,用于将清空除score之外所有内容 MOV AX,0

MOV CURRNUM,AL ;将当前选手编号内容清为零 MOV BZ,AL ;将开始键状态设为未按下 MOV AL,3FH

MOV BIAOZHI,AL ;将扬声器不叫,红绿灯状态为不亮 MOV CX,4

MOV AL,0

MOV BX,OFFSET STATE

LOP1: MOV [BX],AL INC BX LOOP LOP1 RET FUWEI ENDP

DISPLAY PROC PUSH AX PUSH BX PUSH CX PUSH DX

MOV AL,BIAOZHI OUT 62H,AL

MOV BX,OFFSET STATE MOV AL,00111110B OUT 62H,AL MOV AL,[BX]

OUT 61H,AL CALL DELAY INC BX

MOV AL,00111101B OUT 62H,AL

MOV AL,[BX]

OUT 61H,AL CALL DELAY INC BX

MOV AL,00111011B OUT 62H,AL MOV AL,[BX]

OUT 61H,AL CALL DELAY INC BX

MOV AL,00110111B

OUT 62H,AL MOV AL,[BX]

OUT 61H,AL 4个LED无显示内容 ;在4个LED中显示state中的内容 ;显示扬声器,红绿灯状态 ;显示state[0]中内容 ;延时 ;显示state[1]中内容 ;显示state[2]中内容 ;显示state[3]中内容

;使 CALL DELAY POP DX POP CX POP BX POP AX RET DISPLAY ENDP

DISPLAY1 PROC ;显示state内容,检测开关、复位、加分、减分键是否按下,倒计时用 PUSH AX PUSH BX PUSH CX PUSH DX

MOV AL,BIAOZHI OUT 62H,AL

MOV BX,OFFSET STATE MOV AL,00101110B

OUT 62H,AL MOV AL,[BX]

OUT 61H,AL CALL DELAY INC BX

MOV AL,00101101B OUT 62H,AL MOV AL,[BX]

OUT 61H,AL CALL DELAY INC BX

MOV AL,00101011B OUT 62H,AL MOV AL,[BX]

OUT 61H,AL CALL DELAY INC BX

MOV AL,00100111B OUT 62H,AL MOV AL,[BX]

OUT 61H,AL CALL DELAY

IN AL,60H TEST AL,00001111B JNZ B7

JMP B8

B7: JMP BEGIN B8: POP DS

;显示扬声器,红绿灯状态 ;显示state[0]中内容 ;显示state[1]中内容 ;显示state[2]中内容 ;显示state[3]中内容 ;得到端口A内容

;检测是否有开关、复位、加分、减分键按下 begin检测该键 ;跳回

POP CX POP BX POP AX RET DISPLAY1 ENDP

DELAY PROC ;延时,用于LED显示延时用 PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,OFFH IOP2: LOOP LOP2 POP DX POP CX POP BX POP AX

RET DELAY ENDP

GETKNUM PROC ;检测到抢答键后,得到该键编号,并存入currnum中 PUSH AX PUSH BX

PUSH DX

MOV AX,CX ;由cx得到抢答者编号

MOV CURRNUM,AL ;将该抢答者编号存入currnum MOV BX,OFFSET TAB

ADD BX,AX

MOV AL,[BX] ;得到该编号的LED代码 MOV BX,OFFSET STATE ;将该LED代码存入state[0] MOV [BX],AL

TESTBZ: MOV AL,BZ ;得到该选手编号后,测试开始键是否按下 CMP AL,0FFH JNZ A

CALL GETPASS ;开始键已按下时,绿灯通 A: CALL WARN ;开始键未按下,警告 POP DX POP BX POP AX

GETKNUM END

WARN PROC ;警告子程序,使扬声器响,红灯亮 PUSH AX PUSH BX

PUSH CX PUSH DX

MOV AL,11011111B

MOV BIAOZHI,AL POP DX POP CX POP BX POP AX RET WARN ENDP

UPSCORE PROC ;当前选手加分 PUSH AX PUSH BX PUSH CX PUSH DX

MOV AL,CURRNUM ADD AL,AL MOV BX,OFFSET SCORE AND AX,00FFH

ADD BX,AX PUSH AX MOV AX,10

ADD [BX],AX CALL SHOWSCORE POP DX POP CX POP BX POP AX RET UPSCORE ENDP

DOWNSCORE PROC PUSH AX PUSH BX PUSH CX PUSH DX

MOV AL,CURRNUM ADD AL,AL MOV BX,OFFSET SCORE AND AX,OOFFH ADD BX,AX

MOV AX,10

SUB [BX],AX CALL SHOWSCORE POP DX POP CX POP BX POP AX

;得到当前选手编号 ;将当前选手编号乘二 ;使bx指向当前选手分数地址 ;将该分数加10 ;显示该选手分数 ;当前选手减分 ;得到当前选手编号 将该分数减10 ; RET DOWNSCORE ENDP

显示分数源代码 时间倒数源代码

CODE ENDS END START

2、原理图

8259 8086

注:原理图中还没有画出译码器那一个模块

3、器件

8086、8255、8258、74LS04(驱动)、排阻、发光二极管、数码管、译码器、74LS138

4、参考文献

1、阎石?《数字电子技术基础》[M]?北京:清华大学出版社

2、谢维成,牛勇《微机原理与接口技术》[M] :华中科技大学出版社


基于8088八路智能抢答器.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:汇编语言程序设计

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219