微处理器原理与接口课程设计-八路抢答器

Posted wlei5206

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微处理器原理与接口课程设计-八路抢答器相关的知识,希望对你有一定的参考价值。

1.设计内容

①抢答开关电路分别设定选手抢答键8个、主持人开始抢答键和复位键。 

②系统工作后,首先由主持人按下开始键,同时单片机进入10秒倒计时并显示。 

③选手们开始抢答,如果在10秒内无人抢答,则红灯全部亮起,等待主持人按复位键,进入下一题。 

④若有人抢答,选手对应的抢答指示灯点亮,LED显示器上同步显示抢答选手的编号,表示抢答成功。同时封锁输入电路,禁止其他选手抢答 

⑤抢答成功后,单片机自动进入60秒回答问题倒计时 

⑥若选手在60秒内回答完问题并回答正确,抢答成功,且显示有效。

⑦主持人按下复位键,系统返回到抢答状态,进行下一轮抢答。

 

2.实验程序

CON8279        EQU    0CFE9H
        DATA8279    EQU    0CFE8H        
        ORG        0000H
        LJMP        START
        ORG        4100H

START:      MOV        DPTR,#DATA8279;8279命令口地址
        CLR        A             ;清零
        MOV        PSW,#00H
        MOV        SP,#60H
        MOVX        @DPTR,A
        MOV        DPTR,#CON8279    ;8279命令字
        MOV        A,#0D1H           ;清显示命令字
        MOVX        @DPTR,A

LOOP1:      ;MOV        P1,#0FFH    ;清零红绿LED灯
        MOVX        A,@DPTR        ;读状态字
        ANL        A,#0FH
        JZ        LOOP1        ;是否有键按下?没有则循环等待,有则继续运行
        MOV        DPTR,#DATA8279    ;进入数据口
        MOVX        A,@DPTR        ;读键值
        MOV        R0,A
        ANL        A,#0FH        ;取低四位
        JZ        DAOSHU10           ;按键为开始键,跳转DAOSHU10,进入10S
        JNZ        FSQD        ;按键为其他键,跳转到非法抢答
FSQD:    MOV        P1,#0AAH ;亮红灯
        MOV        DPTR,#CON8279    ;写显示RAM命令,命令口地址
        MOV        A,#81H        ;选中LED2
        MOVX        @DPTR,A 
             MOV        A,R0    ;显示非法抢答序号
        ANL        A,#0FH
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口
        MOVX        @DPTR,A
        AJMP            NDELAY
            
DAOSHU10:    MOV        P1,#0FFH
        MOV        R2,#10H        ;走10S倒数        
                    ;LED6
        MOV        DPTR,#CON8279    ;写显示RAM命令,命令口地址
        MOV        A,#85H        ;选中LED6
        MOVX        @DPTR,A      
            MOV        A,R2        
            ANL        A,#0FH        ;取后半字节
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口
        MOVX        @DPTR,A

                    ;LED5
        MOV        DPTR,#CON8279    ;写显示RAM命令
               MOV        A,#84H        ;选中LED5
        MOVX        @DPTR,A
               MOV        A,R2
            ANL        A,#0F0H     
            SWAP        A        ;取后半字节,高低字交换
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口将A写入
        MOVX        @DPTR,A
        MOV        DPTR,#CON8279    ;回到命令口
        MOV        R2,#09H
        LJMP        T10S

T10S:        MOV        R5,#03        ;1S延迟
        LJMP        DE1
DE1:        MOV        R6,#200
DE2:        MOV        R7,#126
DE3:        MOVX        A,@DPTR        ;读状态字
        ANL        A,#0FH
        JNZ        LOOP2I        ;有键按下?,有则跳入LOOP2I,判断按键,没有则继续
        DJNZ        R7,DE3
        DJNZ        R6,DE2
        DJNZ        R5,DE1
        LJMP        DAOSHU9

LOOP2I:        MOV        DPTR,#DATA8279    ;进入数据口
        MOVX        A,@DPTR        ;读键值
        ANL        A,#0FH        ;取低四位
        MOV        R1,A        ;保存队员序号到R1
        JZ        DE3          ;按键为开始键,跳转DE3,返回
        XRL        A,#09H
        JZ        DE3        ;按键为复位键,跳转DE3,返回
        LJMP        LOOP2

DAOSHU9:                ;走9秒倒数            
                    ;LED2
        MOV        DPTR,#CON8279    ;写显示RAM命令,命令口地址
        MOV        A,#85H        ;选中LED2
        MOVX        @DPTR,A      
            MOV        A,R2        ;将高键位读出
            ANL        A,#0FH        ;取后半字节
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口
        MOVX        @DPTR,A

                    ;LED1
        MOV        DPTR,#CON8279    ;写显示RAM命令
            MOV        A,#84H        ;选中LED1
        MOVX        @DPTR,A
            MOV        A,R2
            ANL        A,#0F0H     
            SWAP        A        ;取后半字节,高低字交换
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口将A写入
        MOVX        @DPTR,A
        MOV        DPTR,#CON8279    ;回到命令口
        DEC        R2
        CJNE        R2,#0FFH,T10S    ;R2减1,不为零回到T10S延迟1S确认,然后继续扫描&显示倒数
        LJMP        DAOSHU60NN        ;进入10S超时程序

LOOP2:        MOV        DPTR,#CON8279    ;8279命令字
        MOV        A,#0A0H        ;显示消隐命令
        MOVX        @DPTR,A
        MOV        A,#40H        ;读FIFO命令
        MOVX        @DPTR,A;显示队号低位
        MOV        DPTR,#CON8279    ;写显示RAM命令,命令口地址
        MOV        A,#81H        ;选中LED6
        MOVX        @DPTR,A      
              MOV        A,R1        ;将高键位读出
            ANL        A,#0FH        ;取后半字节
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口
        MOVX        @DPTR,A;高位                    
        MOV        DPTR,#CON8279    ;写显示RAM命令
            MOV        A,#80H        ;选中LED5
        MOVX        @DPTR,A
            MOV        A,R1
            ANL        A,#0F0H     
            SWAP        A        ;取后半字节,高低字交换
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口将A写入
        MOVX        @DPTR,A
        MOV        DPTR,#CON8279    ;回到命令口
        LCALL        DE2S        ;显示2秒
        LJMP        DAOSHU60S

DAOSHU60S:                ;准备60秒倒数
        MOV        DPTR,#DATA8279    ;数据口
        MOV        R2,#06H        ;R2存入十位变量
        MOV        R3,#00H        ;R3存入个位变量
        MOV        A,R2
        SWAP        A        ;A变为60H,十位已经放入A
        ADD        A,R3        ;个位R3加入
        MOV        R4,A        ;得来的当前秒数放入R4
        LJMP        DAOSHU60

DAOSHU60:                ;60秒倒数
                    ;LED6
        MOV        DPTR,#CON8279    ;写显示RAM命令,命令口地址
        MOV        A,#85H        ;选中LED6
        MOVX        @DPTR,A      
            MOV        A,R4        ;将高键位读出
            ANL        A,#0FH        ;取后半字节
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口
        MOVX        @DPTR,A
                    ;LED5
        MOV        DPTR,#CON8279    ;写显示RAM命令
            MOV        A,#84H        ;选中LED5
        MOVX        @DPTR,A
            MOV        A,R4
            ANL        A,#0F0H     
            SWAP        A        ;取后半字节,高低字交换
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口将A写入
        MOVX        @DPTR,A
        MOV        DPTR,#CON8279    ;回到命令口
        MOV        R3,#09H        ;个位变为9
        DEC        R2        ;十位变为5
        LJMP        T10SA

T10SA:        MOV        R5,#03H        ;1S延迟
        LJMP        DE1B
DE1B:        MOV        R6,#200
DE2B:        MOV        R7,#126
DE3B:        MOV        DPTR,#CON8279    ;回到命令口
        MOVX        A,@DPTR        ;读状态字
        ANL        A,#0FH
        JNZ        DAOSHU60YN        ;有键按下?,有则跳入DAOSHU60YN,判断是否是抢答按键
        DJNZ        R7,DE3B
        DJNZ        R6,DE2B
        DJNZ        R5,DE1B
        LJMP        DAOSHU601

DAOSHU60YN:        MOV        DPTR,#DATA8279    ;进入数据口
        MOVX        A,@DPTR        ;读键值
        ANL        A,#0FH        ;取低四位
        XRL        A,R1        ;判断是否为抢答按键,若是则清零A,不是则A非零
        JZ        DAOSHU602       ;按键为抢答按键,显示抢答成功,跳转DAOSHU602
        JNZ        DE3B        ;按键为其他键,跳转回DE3B,继续倒计时



DAOSHU601:
        MOV        A,R2
        SWAP        A        ;A变为十位,十位已经放入A
        ADD        A,R3        ;个位R3加入
        MOV        R4,A        ;得来的当前秒数放入R4
                    ;LED2
        MOV        DPTR,#CON8279    ;写显示RAM命令,命令口地址
        MOV        A,#85H        ;选中LED2
        MOVX        @DPTR,A      
            MOV        A,R4        ;将高键位读出
            ANL        A,#0FH        ;取后半字节
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口
        MOVX        @DPTR,A
                    ;LED1
        MOV        DPTR,#CON8279    ;写显示RAM命令
            MOV        A,#84H        ;选中LED1
        MOVX        @DPTR,A
            MOV        A,R4
            ANL        A,#0F0H     
            SWAP        A        ;取后半字节,高低字交换
        MOV        DPTR,#TAB1
        MOVC        A,@A+DPTR    ;取段显码
        MOV        DPTR,#DATA8279    ;写显示RAM,数据口将A写入
        MOVX        @DPTR,A
        MOV        DPTR,#CON8279    ;回到命令口
        DEC        R3
        CJNE        R3,#0FFH,T10SA    ;个位减1,转移到1S延迟处
        MOV        R3,#09H        ;个位变9,等待十位减少
        DEC        R2
        CJNE        R2,#0FFH,T10SA    ;个位减为0,且变为9,十位减1,回到1S延迟处
        LJMP        DAOSHU60NN


        
DAOSHU60NN:    MOV        P1,#0AAH    ;红灯全部亮起
        MOV        DPTR,#CON8279    ;命令口
        MOVX        A,@DPTR        ;读状态字
        ANL        A,#0FH
        JZ        DAOSHU60NN        ;有键按下?没有则循环等待             
        MOV        DPTR,#DATA8279    ;进入数据口
        MOVX        A,@DPTR        ;读键值
        ANL        A,#0FH        ;取低四位
        XRL        A,#09H        ;判断是否为按键9,若是则清零A,不是则A非零
        JZ        JUMP           ;按键为按键9,跳转到中介,从而跳到START,回到初始位置
        JNZ        DAOSHU60NN        ;按键为其他键,跳转DAOASHU60NN,再次等待

        
DAOSHU602:        MOV        P1,#55H        ;抢答成功,显示有效,所有绿灯亮起
        MOV        DPTR,#CON8279    ;8279命令字
        MOVX        A,@DPTR        ;读状态字
        ANL        A,#0FH
        JZ        DAOSHU602        ;有键按下?没有则循环等待             
        MOV        DPTR,#DATA8279    ;进入数据口
        MOVX        A,@DPTR        ;读键值
        ANL        A,#0FH        ;取低四位
        XRL        A,#09H        ;判断是否为按键9,若是则清零A,不是则A非零
        JZ        JUMP           ;按键为按键9,跳转到中介,从而跳到START,回到初始位置
        JNZ        DAOSHU602        ;按键为其他键,跳转DAOSHU602,再次等待

DE2S:        MOV        R5,#06        ;2s Delay
        LJMP        DE1A
DE1S:        MOV        R5,#03        ;1s Delay
        LJMP        DE1A
DE1A:        MOV        R6,#200
DE2A:        MOV        R7,#126
DE3A:        DJNZ        R7,DE3A
        DJNZ        R6,DE2A
        DJNZ        R5,DE1A
        RET
NDELAY:     MOV    R2, #36H        ;非法抢答延时
DEL:   MOV    R4, #06FH
DEL1:   MOV    R6, #06FH
DEL2:   DJNZ    R6, DEL2
    DJNZ    R4, DEL1
    DJNZ    R2, DEL
    AJMP        START

JUMP:    MOV        P1,#0FFH    ;关所有LED
        LJMP        START        ;跳转到初始状态

TAB1:    DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H  ;段显码表
        DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
        END

 

3.硬件电路图

 技术图片

 

                        

以上是关于微处理器原理与接口课程设计-八路抢答器的主要内容,如果未能解决你的问题,请参考以下文章

资料转发分享基于8086八路智能抢答器系统控制设计基于8086八路PT100热敏电阻温度采集基于8086步进电机定时启动设计-仿真设计资料

资料转发分享基于8086八路智能抢答器系统控制设计基于8086八路PT100热敏电阻温度采集基于8086步进电机定时启动设计-仿真设计资料

51单片机 八路抢答器+Proteus仿真

基于单片机节日彩灯控制器系统设计基于单片机脉搏检测和体温检测设计基于单片机可燃气体检测及报警系统基于单片机可调八路抢答器仿真设计-全套设计资料

基于Protues数电抢答器电路系统设计-全套资料

汇编微机原理与接口技术课程设计