單片機(jī)課設(shè):六路智能搶答器
設(shè)計(jì)目的
利用所學(xué)單片機(jī)的理論知識(shí)進(jìn)行軟硬件整體設(shè)計(jì),鍛煉學(xué)生理論聯(lián)系實(shí)際、綜合應(yīng)用的能力。
設(shè)計(jì)內(nèi)容:
設(shè)計(jì)基于單片機(jī)的6人搶答器,并編程實(shí)現(xiàn)其功能.
設(shè)備和器材:
單片機(jī)最小開發(fā)系統(tǒng),中斷控制器8259A一片(自選),并行接口8255A一片或8155(用單片機(jī)開發(fā)板),發(fā)光二極管12只(紅,黃各6只),LED數(shù)碼管若干只,按鈕或按鍵10個(gè),其他器件任選。
設(shè)計(jì)要求:
1、設(shè)計(jì)硬件接口電路,將這些外設(shè)構(gòu)成一個(gè)簡(jiǎn)單的單片機(jī)應(yīng)用系統(tǒng),畫出接口的連接圖。
2、 編寫下列控制程序
① 1—6號(hào)手中先按下按鈕者,LED數(shù)碼管顯示其選手號(hào)碼(后按下無效)。
② 由裁判掌握,若回答正確,該選手對(duì)應(yīng)黃燈亮,否則紅燈亮。
③ 回答正確時(shí),記分牌加10分,不正確減10分(初始分100分)
Code:
ORG 0000H
LJMP PREPAREORG 0030H
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共陰極數(shù)碼管顯示代碼表 0~9
/*------------------------------初始化模塊-------------------------*/
PREPARE: MOV SP,#70hLEDSEL0 BIT P2.0;LED選擇位
LEDSEL1 BIT P2.1
LEDSEL2 BIT P2.2
LEDSEL3 BIT P2.3
JUDGMENT0 BIT P2.4;裁判裁決錯(cuò)誤
JUDGMENT1 BIT P2.5;裁判裁決正確
SELECT0 BIT P2.6;位選信號(hào)0
SELECT1 BIT P2.7;位選信號(hào)1
RST BIT P3.6;記錄各選手成績(jī)
MOV 31H,#01H ;一號(hào)選手百位分?jǐn)?shù)
MOV 32H,#00H;一號(hào)選手十位分?jǐn)?shù)
MOV 33H,#00H;一號(hào)選手個(gè)位分?jǐn)?shù)
MOV 34H,#01H;二號(hào)選手分?jǐn)?shù)
MOV 35H,#00H
MOV 36H,#00H
;三號(hào)選手分?jǐn)?shù)
MOV 37H,#01H
MOV 38H,#00H
MOV 39H,#00H
;四號(hào)選手分?jǐn)?shù)
MOV 3AH,#01H
MOV 3BH,#00H
MOV 3CH,#00H
;五號(hào)選手分?jǐn)?shù)
MOV 3DH,#01H
MOV 3EH,#00H
MOV 3FH,#00H
;六號(hào)選手分?jǐn)?shù)
MOV 40H,#01H
MOV 41H,#00H
MOV 42H,#00HMOV 60H,#00H;記分牌搶答選手編號(hào)
MOV 61H,#00H;記分牌百位數(shù)據(jù)
MOV 62H,#00H;記分牌十位數(shù)據(jù)
MOV 63H,#00H;記分牌個(gè)位數(shù)據(jù)
BEGIN: MOV P2,#0FFH;P2,P3 口置高電平,準(zhǔn)備接受裁判信號(hào)、搶答信號(hào)
MOV P3,#0FFH
MOV P1,#3FH
MOV R4,#00H
MOV R0,#00H
MOV R1,#00HCLR C
SETB SELECT0
SETB SELECT1
/*-----------------------------檢測(cè)搶答模塊-------------------------*/
CHECK:JNB RST,BEGIN
MOV A,P3;接收P3口的搶答信號(hào),按下時(shí)為0
CPL A
JZ CHECKFIND:RRC A;有搶答信號(hào)時(shí)逐次移位判斷是哪一為搶答者
INC R4
JNCFIND
MOV 60H,R4
MOV A,R4;獲取搶答選手的計(jì)分地址
LCALL DECODE
DEC A
MOV B,#03H
MUL AB
ADD A,#31H
MOV R0,A;搶答選手百位分?jǐn)?shù)地址,存R0
ADD A,#01H
MOV R1,A ;搶答選手十位分?jǐn)?shù)地址,存R1/*------------------------------裁判裁決和計(jì)分模塊-------------------------*/
JUDGE:JNB JUDGMENT1,RIGHT;裁判裁定回答正確,送低電平回答正確
JNB JUDGMENT0,FALSE
JNB RST,BEGIN;復(fù)位鍵按下,重新初始化
SJMP JUDGEFALSE:MOV A,#06H;裁定錯(cuò)誤則亮對(duì)應(yīng)選手紅燈,送低電平亮
ADD A,R4
DECA
ORL A,#0F0H
MOVP2,AMOV A,@R1
JZ BORROW
DECA
MOV @R1,A
MOV 61H,@R0
MOV 62H,@R1
SJMP SHOW
;十位向百位借位處理
BORROW:
MOV A,@R0
JZ ZERO
MOV @R1,#09H
MOV A,@R0
DEC A
MOV @R0,A
MOV 61H,@R0
MOV 62H,@R1
SJMP SHOWZERO: MOV @R0,#00H;分?jǐn)?shù)扣為0,不再扣分
MOV @R1,#00H
MOV 61H,@R0
MOV 62H,@R1
SJMP SHOWRIGHT:MOV A,#00H;裁定正確則亮對(duì)應(yīng)選手黃燈,送低電平亮
ADD A,R4
DECA
ORL A,#0F0H
MOVP2,AMOV A,@R1
CJNE A,#09H,NOTEQUAL
;十位向百位進(jìn)位處理
CARRY:MOV @R1,#00H
MOV A,@R0
INC A
MOV @R0,A
MOV 61H,@R0
MOV 62H,@R1
SJMP SHOWNOTEQUAL: INC A
MOV @R1,A
MOV 61H,@R0
MOV 62H,@R1
SJMP SHOW
/*------------------------------動(dòng)態(tài)顯示和延時(shí)模塊-------------------------*/SHOW: JNB RST,TOBEGIN;復(fù)位鍵按下,重新初始化
MOV A,60H;顯示處理選手編號(hào)
SETB SELECT0;共陰極數(shù)碼管送低電平有效
SETB SELECT1LCALL DECODE
MOV A,63H;顯示處理選手得分的個(gè)位值
CLR SELECT0
SETB SELECT1LCALL DECODE
MOV A,62H;顯示處理選手得分的十位值
SETB SELECT0
CLR SELECT1LCALL DECODE
MOV A,61H;顯示處理選手得分的百位值
CLR SELECT0
CLR SELECT1
LCALL DECODE
SJMP SHOWDECODE:MOV R5,A;保護(hù)A中值
MOV DPTR,#TABLE ;查表譯碼送段碼給P1口顯示
MOVC A,@A+DPTR
MOV P1,A
MOV A,R5
;掃描延時(shí)
D1:MOV R6,#2
D2:MOV R7,#250
DJNZ R7,$
DJNZ R6,D2
RET
TOBEGIN: LJMP BEGIN
END
Proteus 仿真:
代碼下載 :六路智能搶答器(代碼+proteus仿真+課設(shè)報(bào)告)下載





