求大神做一个51单片机的四路抢答器,要汇编程序,电路图,和分析过程,还有4天答辩,

如题所述

有一个八路的发给你吧,供参考

     ORG   0000H

     JMP   BEGIN

     ORG 0030H

TABLE:      ; å…±é˜´æžæ•°ç ç®¡æ˜¾ç¤ºä»£ç è¡¨

          DB    3FH,06H,5BH,4FH,66H ;12345

          DB    6DH,7DH,07H,7FH     ;6789

DELAY:  MOV   R5,#20

LOOP4:  MOV   R6,#50H        ;延时20X20ms

LOOP5:  MOV   R7,#100

        DJNZ  R7,$

        DJNZ  R6,LOOP5

        DJNZ  R5,LOOP4

        RET

;---------------------------------------

BEGIN:  MOV   P2,#0FFH      ;P2口置高电平,准备接收信号

        MOV   R4,#0

        MOV   A,R4          ;R4位标志值送A寄存器

AGAIN:  MOV   DPTR,#TABLE

        MOVC  A,@A+DPTR

        MOV   P1,A

LOOP1:  MOV   A,P3          ; æŽ¥æ”¶p3口的抢答信号

        CPL   A

        JZ    LOOP1

LOOP2:  RRC   A        ;有人抢答信号则逐次移动判断哪一位抢答

        INC   R4

        JNC   LOOP2

;********************

        MOV   A,R4

        MOVC  A,@A+DPTR  ;找到相应位显示代码

        MOV   P1,A

LEDDIS:

         MOV A,#0FFH

         CLR C

LEDDIS1:

         RLC A

         DJNZ R4,LEDDIS1

         MOV P0,A

LOOP3:  JNB P2.2,BEGIN ;若主持人按下复位信号键,则转向主程序

        CPL   P2.0       ;若没按复位信号键,则通过p2.2口给出高低信号驱动蜂鸣器

        LCALL DELAY      ;调用延时子程序

        SJMP  LOOP3      ;p2.2口反复间隔0.4s变化,驱动蜂鸣器

        END 


追问

改为四路你能帮忙改一下吗?我们单片机学了一个月就考试,我真心的不是太懂,拜托了。如果,你不想改,我仍然很谢谢你的帮助,我在问问其他大神看看。谢谢

追答

去掉后四个开关和相应的连线,去掉P1.4~P1.7相关连线就可以了,软件修改如下:
ORG 0000H
JMP BEGIN
ORG 0030H
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;12345
DB 6DH,7DH,07H,7FH ;6789
DELAY: MOV R5,#20
LOOP4: MOV R6,#50H ;延时20X20ms
LOOP5: MOV R7,#100
DJNZ R7,$
DJNZ R6,LOOP5
DJNZ R5,LOOP4
RET
;---------------------------------------
BEGIN: MOV P2,#0FFH ;P2口置高电平,准备接收信号
MOV R4,#0
MOV A,R4 ;R4位标志值送A寄存器
AGAIN: MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
LOOP1: MOV A,P3 ; 接收p3口的抢答信号
CPL A
ANL A,#0FH ;增加这一句,保留低四位
JZ LOOP1
LOOP2: RRC A ;有人抢答信号则逐次移动判断哪一位抢答
INC R4
JNC LOOP2
;********************
MOV A,R4
MOVC A,@A+DPTR ;找到相应位显示代码
MOV P1,A
LEDDIS:
MOV A,#0FFH
CLR C
LEDDIS1:
RLC A
DJNZ R4,LEDDIS1
MOV P0,A
LOOP3: JNB P2.2,BEGIN ;若主持人按下复位信号键,则转向主程序
CPL P2.0 ;若没按复位信号键,则通过p2.2口给出高低信号驱动蜂鸣器
LCALL DELAY ;调用延时子程序
SJMP LOOP3 ;p2.2口反复间隔0.4s变化,驱动蜂鸣器
END

温馨提示:答案为网友推荐,仅供参考