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

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.硬件电路图

原文地址:https://www.cnblogs.com/wlei5206/p/11992018.html

时间: 2024-08-04 19:54:47

微处理器原理与接口课程设计-八路抢答器的相关文章

Java课程设计------音乐播放器

技术:基于Java8.JavaFx知识 适用: 大部分MP3文件 功能: 1.实现基本播放器的功能,如上下曲.播放暂停.循环播放和顺序播放等: 2.实现播放条和音量条的进度: 3.实现已经播放.未播放和正在播放歌曲的歌曲名颜色不同: 4.实现播放歌曲时列表自动跟踪: 5.实现关闭播放器时列表自动保存 界面: 源代码: 链接:https://pan.baidu.com/s/1tpJNGV4PA5kc7xuUdIdLtw提取码:926i Bug: 由于时间紧迫,赶出来的课设存在一些不足之处: 1.有

编译原理课程设计——语法分析器

实验目的 了解掌握算符优先分析的基本方法.内容:学会科学思考并解决问题,提高程序设计能力. 实验内容与要求 用算符优先分析方法设计一个分析解释程序,对输入的赋值语句.输出语句.清除语句进行词法分析.语法分析.表达式求值并存储于指定变量中:若存在错误,提示错误相关信息. 文法表示 S -> v=E | E? | clear E -> E+T | E–T | T T -> T*F | T/F | F F -> (E) | v | c 问题分析 由于要求用算符优先分析方法来进行程序的语法

控件的开发接口的设计原理

for (var i = 0; i < _uiList.length; i++) { groot.vms[_uiList[i]].uivalue = value; groot.vms[_uiList[i]].uivalueRender(); } 当改变父vm的属性值的时候的值的时候 程序是通过 控件的uivalue 来更新控件的值的 所有每个控件必须有uivalue属性 控件的开发接口的设计原理

计算机组成原理 课程设计报告

        计算机组成原理 课程设计报告      成员:许恺   2014011329          胡强勇  2014011315     时间:2016.12.20                 一.简要总结计算机组成原理实验 计算机组成原理实验总共五个实验,首先我们熟悉了教学机的使用方法,后面的实验我们分为运算器.存储器.控制器,控制器分为两次实验.紧接的第二次实验我们就进行了运算器的实验,对运算器的内部构造极其原理进行了验证理解,在这里我们学习了运算器ALU的8种运算功能,以

单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》

引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准.具有走时精确,功耗低,显示直观,调整简单方便等优点. 功能描述 基本显示: 第一行为日期,依次为:年-月-日-星期 第二行为时间,依次为:时:分:秒 说明: 每月的天数,闰年的天数可自动调整 蓝牙校准日期: 命令d+年月日星期+#,如设置2016年12月8日星期四,手机发送命令:d16120804

51单片机课程设计:基于MQ-3的酒精浓度报警器

51单片机课程设计:基于MQ-3的酒精浓度报警器 本程序用于将MQ-3上读取到的模拟信号转换为对应的数字信号,经51单片机处理后,在数码管显示,同时具有报警功能,当检测值高于预警值,蜂鸣器报警.除了可以检测MQ-3酒精浓度模块的AD值,也适用于MQ系列的其他模块,原理基本都相同,都是将读取到的AD值转换为数字信号,程序修改后,如果接线方法正确,可以在吉林农业大学51开发板上完美运行,相关工程文件见最下方附件. /*************************************说明***

对编译原理这门课程的看法

对我来说,我市首次听到和接触到"编译原理"这个词,但是经过一晚上的探索,已经有了一定的了解. 首先是编译原理就是什么? 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成. 编译原理是计算机专业设置的一门重要的专业课程.虽然只有少数人从事编译方面的工作,但是这门课在理论.技术.方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力. 编译原理及

数据库课程设计

数 据库课程设计是在学生系统的学习了数据库原理课程后,依照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的管理信息系统 (MIS).通过对一个实际问题的分析.设计与实现,将原理与应用相结合,使学生学会怎样把书本上学到的知识用于解决实际问题,培养学生的动手能力:还有一 方面,使学生能深入理解和灵活掌握教学内容. 整体设计要求: 四到五人为一个小组,小组成员既要有相互合作的精神,又要分工明白.每一个学生都必须充分了解整个设计的全过程. 通讯录 1.功能需求: 1)网络版,

随便说下课程设计

引子 很快就是学期末尾,一个学年来了,然后又过去.我们的课本呼啦呼啦的又翻了一圈,这也是目前大学的常态了.这几天师弟们也在忙碌着他们的课程设计,帮他们修改了一下.自己也回味起当年事,借此反思,同时也确定当下需要做好的事情. 对于课程设计的态度 以前上学时候,学点知识,看书本总觉得这样应付考试就够了,所谓及格万岁.那个时候根本不知道这门课程到底意味着什么.也是,时下教育总是有着各种怪品味:‘考上大学就轻松了’,‘上学时候不要谈恋爱’不外如是,捎带着学习都成了贬义词.可是事实呢,离开了校园才是真正学