单片机课程设计《八路抢答器》.docx
《单片机课程设计《八路抢答器》.docx》由会员分享,可在线阅读,更多相关《单片机课程设计《八路抢答器》.docx(75页珍藏版)》请在冰豆网上搜索。
![单片机课程设计《八路抢答器》.docx](https://file1.bdocx.com/fileroot1/2022-11/16/916e9384-6ee2-41b4-ba0a-86b316543404/916e9384-6ee2-41b4-ba0a-86b3165434041.gif)
单片机课程设计《八路抢答器》
1任务要求
(1)实现多路抢答器功能。
(2)用LED显示屏显示抢答提示、哪组抢答、哪组犯规、加减分情况以及每组的得分。
(3)数码显示抢答和答题时间,时间到调用LED模块显示“时间到!
”。
(4)主持人通过按钮控制抢答功能:
抢答、复位、加分和减分。
2硬件设计
2.1硬件分析
(1)LED显示屏模块设计
LED显示屏是用了16块8×8点阵模块,把每一行的行线连起来,每一列的列线连起来级联成64×16点阵显示屏。
通过8个74HC273锁存器把每一行的64列数据锁存起来,通过4线-16线译码器74159控制每一行打开。
4块8×8点阵模块级联成16×16点阵模块示意图如图3.1所示:
8条行线连在一起组成16行
8条列线连在一起组成16列
图3.14块8×8点阵级联示意图
64×16点阵模块由16块8×8点阵模块以及8块74HC273锁存器组成,锁存器负责把每一行的数据锁存起来,电路图如图3.2所示:
图3.264×16点阵电路图
(2)按键模块设计
八路抢答器顾名思义有8个抢答按钮,故八路抢答器应由8个抢答键及4个功能键组成。
每一组的按键判断有相应的LED指示灯,用来指示抢答与犯规操作。
按键模块电路如图3.3及图3.4所示:
图3.3抢答按钮
图3.4主持人控制按钮
(3)数码显示模块设计
数码显示模块由两位数码管组成,可以显示00~99,通过位扫描显示两位数字。
数码管用来显示抢答时间以及答题时间。
数码显示模块电路如图3.5所示:
图3.5数码显示模块
2.2硬件电路原理图
八路抢答器由LED显示模块、数码显示模块、按键模块以及译码电路,锁存电路组成。
电路原理图如图3.6所示:
图3.6硬件电路原理图
3软件设计
3.1主要模块流程图
(1)开始程序流程图如图4.1所示
图4.1开始程序流程图
(2)开始抢答程序流程图如图4.2所示
图4.2开始抢答程序流程图
(3)判断犯规程序流程图如图4.3所示
图4.3判断犯规程序流程图
(4)答题程序流程图如图4.4所示
图4.4答题程序流程图
(5)加减分流程图如图4.5所示
图4.5加减分流程图
3.2主要模块的程序分析
本程序主要分为四部分:
(1)主程序模块、
(2)显示模块、(3)计时模块、(4)按键中断模块。
(1)主程序分析
主程序负责整个程序的调用和转跳,实现由准备抢答——正在抢答——哪组抢答——哪组加减分的过程,以及犯规的判断和复位。
START:
MOVR6,#100
START2:
MOVDPTR,#TABST;显示开机画面
LCALLDISPLAY
DJNZR6,START2
LCALLDELAY2
MAIN:
MOVIE,#00H;主程序
MOVP2,#00H
MOVP3,#1CH
MOVP3,#0FCH
MOVP2,#00H
MOVP3,#2CH
MOVP3,#0FCH
MOVP3,#0FCH
LCALLZHUNBEI
MOVR0,#0
MOVR1,#0
MOVR2,#0
MOVR3,#0
MOVR5,#0
MOVR4,#00H
MOVR7,#00H
MOVTH0,#9EH
MOVTL0,#58H
MOVA,#00H
MOVB,#00H
MOV31H,#00H;红灯标志
MOV32H,#00H;时间到标志
MOV2EH,#00H;组按键标志
MOV2FH,#00H;有键按下去标志
MOV30H,#00H;有组抢答标志
MOV33H,#00H;加减分标志
MOV34H,#00H;加/减分标志,00H为加分
MOV35H,#00H;已经加减分标志
MOV0A1H,#00H
MOVTMOD,#01H
MOVR6,#10
SETBET0
SETBEA
SETBEX0
SETBIT0
CLRTR0
;程序开始时先给DPTR一个值,再调用静态显示子程序(LCALLDISPLAY),显示开机画面,一会之后,进行系统初始化,标志所需要的信息,再给DPTR一个值,调用静态显示子程序,显示“准备抢答”。
CHEAK:
MOVA,2FH
CJNEA,#00H,CH
MOV2FH,#00H
LCALLFENSHU
LJMPCHEAK
CH:
MOV2FH,#00H
CJNER7,#08H,IFFANGUI2
MOVR7,#00H
MOV0A1H,#00H
MOV2EH,#00H
CLREX0
LJMPKAIQIANG
IFFANGUI2:
LJMPIFFANGUI
;之后,程序循环地调用显示分数子程序,并不断查询是否有键按下去,如果有键按下去,即查询是否是主持人按了“开始”,是则转跳到开始抢答,否则转跳到犯规判断。
FENSHU:
MOV9EH,#8;显示分数
MOV9FH,#0
MM3:
MOV9CH,#16
MOVR2,#00H
MOV9AH,R2
MAIN2:
MOV9BH,#5
MM:
MOVA,2FH
CJNEA,#0FFH,FS1
CJNER7,#0AH,FSIF0BH
SJMPFS1
FSIF0BH:
CJNER7,#0BH,FSIF09H
SJMPFS1
FSIF09H:
CJNER7,#09H,BAC2
FS1:
MOVP1,#0FH
LCALLDISPLAY4
MOVR2,9AH
DJNZ9BH,MM
INC9AH
MOVR2,9AH
DJNZ9CH,MAIN2
MOV9DH,#60
LPP:
MOVR2,#0FH
MOVA,2FH
CJNEA,#0FFH,FS2
CJNER7,#0AH,FSIF0BH2
SJMPFS2
FSIF0BH2:
CJNER7,#0BH,FSIF09H2
SJMPFS2
FSIF09H2:
CJNER7,#09H,BAC2
FS2:
MOVP1,#0FH
LCALLDISPLAY4
DJNZ9DH,LPP
MOV9CH,#16
MOVR2,9AH
MAIN3:
MOV9BH,#6
MM2:
MOVA,2FH
CJNEA,#0FFH,FS3
CJNER7,#0AH,FSIF0BH3
SJMPFS3
FSIF0BH3:
CJNER7,#0BH,FSIF09H3
SJMPFS3
FSIF09H3:
CJNER7,#09H,BAC2
FS3:
MOVP1,#0FH
LCALLDISPLAY4
MOVR2,9AH
DJNZ9BH,MM2
INC9AH
MOVR2,9AH
DJNZ9CH,MAIN3
INC9FH
DJNZ9EH,MM3
BAC2:
RET
;在显分数时,9AH表示显示哪组的分数,调用滚动显示子程序(LCALLDISPLAY4)滚动显示每组的得分,直到按了“开始”键或者抢答键就跳出显示分数子程序。
KAIQIANG:
MOVA,2EH;显示开始抢答
CJNEA,#0FFH,KAISHI
LJMPQIANGDA
KAISHI:
CJNER7,#09H,KS
CLREA
LJMPMAIN
KS:
MOVA,32H
CJNEA,#0FFH,KS2
MOVP2,#00H
MOVP3,#1CH
MOVP3,#0FCH
MOVP2,#0FFH
MOVP3,#2CH
MOVP3,#0FCH
LJMPTO
KS2:
MOVP1,#0FH
MOVDPTR,#TAB2
LCALLDISPLAY
SETBTR0
LCALLDIGITAL
MOVP1,#0FH
SETBEX0
LJMPKAIQIANG
;进入开始抢答之后,判断是否有抢答键按下去,有则转跳到抢答程序,否则判断时候按了复位键,是则转跳到主程序开头,否则给DPTR一个值,调用静态显示子程序,显示“开始抢答”并开启计时器,计时10秒,调用数码显示子程序(LCALLDIGITAL),之后就转跳到开始抢答继续判断。
如果在“开始抢答”状态下,时间到了,就转跳到时间到程序。
QIANGDA:
MOV30H,#0FFH;显示哪组抢答
MOVR6,#60
MOVR5,#00H
MOVA,#80H
MOVR2,0A1H
INCR2
DD:
RLA
DJNZR2,DD
MOVP2,A
MOVP3,#1CH
MOVP3,#0FCH
MOVP2,#00H
MOVP3,#2CH
MOVP3,#0FCH
QD2:
CJNER7,#09H,IFAS
LJMPMAIN
IFAS:
MOVA,33H
CJNEA,#00H,ADDSUBB
MOVA,32H
CJNEA,#00H,TO
MOVP1,#0FH
LCALLDISPLAY2
LCALLDIGITAL
LJMPQD2
;进入抢答程序后,计时60秒,通过键值的判断,判断出是哪组抢答之后,把抢答的那一组的指示灯点亮绿色,并调用显示子程序(LCALLDISPLAY2)显示哪组抢答和数码显示子程序(LCALLDIGITAL)显示倒计时。
在显示哪组抢答这段时间内,如果有按“复位”键,就转跳到主程序开头。
如果时间到了,就调用静态显示子程序,显示“时间到!
”。
ADDSUBB:
CJNER7,#0AH,IFSUB;显示加减分
LCALLJIAFEN
MOV35H,#0FFH
LJMPADSB
IFSUB:
LCALLJIANFEN
MOV35H,#0FFH
LJMPADSB
ADSB:
CJNER7,#09H,AS
LJMPMAIN
AS:
LCALLDISPLAY3
MOVP1,#0FH
LJMPADSB
JIAFEN:
MOVA,#40H
ADDA,0A1H
MOVR0,A
MOVA,@R0
ADDA,#10
MOV@R0,A
RET
JIANFEN:
MOVA,#40H
ADDA,0A1H
MOVR0,A
MOVA,@R0
CLRC
SUBBA,#10
MOV@R0,A
RET
;加减分程序用8个连续单元存储8组的分数,之后判断是按了加分还是减分,如果是加分,就调用加分子程序(LCALLJIAFEN),如果是减分,就调用减分子程序(LCALLJIANFEN),然后调用显示加分子程序显示哪组加了分,直到按了“复位”键返回主程序开头。
IFFANGUI:
MOVA,2EH;判断哪组犯规
CJNEA,#00H,IFG
LJMPCHEAK
IFG:
MOV2EH,#00H
FG:
CJNER7,#09H,FG2
LJMPMAIN
FG2:
MOVDPTR,#TAB3
LCALLDISPLAY
MOVP1,#0FH
CJNER7,#00H,IF01H
MOVP2,31H
SETBP2.0
MOV31H,P2
MOVP3,#2CH
MOVP3