功能:
0.本项目采用STC89C52作为单片机系统的控制MCU
1.'开始’按键按下后,进入抢答倒计时,倒计时结束前,按下抢答键,完成抢答,并进入作答时间,作答时间结束返回初始状态,若无人抢答,返回初始状态
2.作答时间内,按下‘开始’,增加作答时间,按下‘停止’,提前结束
3.'抢答设置’按键按下后,可进入抢答时间调整
4.'回答设置’按键按下后,可进入作答时间调整
5.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB :

主程序:

OK EQU 20H                       ;抢答开始标志位RING EQU 22H                     ;响铃标志位 DATA0 EQU 36H                    ;抢答按键口数据存放地址 ORG 0000HAJMP MAINORG 0003H  AJMP INTT0ORG 000BHAJMP T0INTORG 001BHAJMP T1INTORG 0040H
MAIN:   MOV R1,#14H                       ;初设抢答时间为20sMOV R2,#1EH                     ;初设答题时间为30sMOV 38H,#3CH                      ;启用锦囊时间从60s倒计时MOV TMOD,#11H                    ;设置未定时器/模式1MOV TH0,#0F0HMOV TL0,#0FFH                    ;越高发声频率越高,越尖MOV TH1,#3CHMOV TL1,#0B0H                    ;50ms为一次溢出中断SETB EASETB ET0SETB ET1                         ;允许二个中断,T0/T1CLR OKCLR RINGSETB P3.7SETB TR1SETB TR0                        ;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
START:   MOV DATA0,#0FFH                 ;初始化 MOV R5,#0BHMOV R4,#0BHMOV R3,#0BHACALL DISPLAY                   ;未开始抢答时候显示FFF JNB P3.3,SELSUB0JNB P3.4,TZ3                    ;倒计时调整 JB P3.0,NEXTACALL DELAYJB P3.0,NEXT                    ;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询SETB EX0                        ;开放INT0 ACALL BARK                      ;按键发声MOV A,R1MOV R6,A                    ;送R1->R6,因为R1中保存了抢答时间SETB OK                         ;抢答标志位,在使用锦囊时用作判断是抢答倒计时还是回答倒计时MOV R3,#0AH                     ;抢答只显示计时,灭号数AJMP COUNT                      ;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT:    JNB P1.0,FALSE1JNB P1.1,FALSE2JNB P1.2,FALSE3JNB P1.3,FALSE4JNB P1.4,FALSE5JNB P1.5,FALSE6JNB P1.6,TZ1JNB P1.7,TZ2AJMP START
TZ1:     AJMP FALSE7
TZ2:     AJMP FALSE8
TZ3:     AJMP SELSUB1
FALSE1: MOV R3,#01HAJMP ERROR
FALSE2: MOV R3,#02H     AJMP ERROR
FALSE3: MOV R3,#03HAJMP ERROR
FALSE4: MOV R3,#04HAJMP ERROR
FALSE5: MOV R3,#05HAJMP ERROR
FALSE6: MOV R3,#06HAJMP ERROR
FALSE7: MOV R3,#07HAJMP ERROR
FALSE8: MOV R3,#08HAJMP ERROR
SELSUB0: MOV A,R1MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAY                   ;先在两个时间LED上显示R1JNB P3.5,INC0                   ;P3.5为+1s键,如按下跳到INCOJNB P3.6,DEC0                   ;P3.6为-1s键,如按下跳到DECOJNB P3.1,BACK0                  ;P3.1为确定键,如按下跳到BACKOAJMP SELSUB0
INC0:   MOV A,R1CJNE A,#63H,ADD0                 ;如果不是99,R2加1,如果加到99,R1就置0,重新加起。MOV R1,#00HACALL DELAY1AJMP SELSUB0
ADD0:   INC R1ACALL DELAY1AJMP SELSUB0
DEC0:   MOV A,R1JZ SETR1                         ;如果R1为0, R1就置99, DEC R1ACALL DELAY1 AJMP SELSUB0
SETR1:  MOV R1,#63HACALL DELAY1AJMP SELSUB0
BACK0:  AJMP START
SELSUB1: MOV A,R2MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAYJNB P3.5,INC1JNB P3.6,DEC1JNB P3.1,BACK1AJMP SELSUB1
INC1:   MOV A,R2CJNE A,#63H,ADD1MOV R2,#00HACALL DELAY1
AJMP SELSUB1
ADD1:   INC R2ACALL DELAY1AJMP SELSUB1
DEC1:   MOV A,R2JZ SETR2DEC R2ACALL DELAY1AJMP SELSUB1
SETR2:  MOV R2,#63HACALL DELAY1AJMP SELSUB1
BACK1: AJMP START
REPEAT:MOV A,38h                        ;使用锦囊时重新计时MOV R6,ACLR RING         ;当倒计时进入最后5秒的时候,启用锦囊能消除蜂鸣SETB P3.7
COUNT:MOV R0,#00H                    ;重置定时器中断次数MOV TH1,#3CHMOV TL1,#0B0H                  ;重置定时器
RECOUNT:MOV A,R6                       ;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6MOV B,#0AHDIV AB                             ;除十分出个位/十位MOV 30H,A                          ;十位存于(30H) MOV 31H,B                          ;个位存于(31H) MOV R5,30H                         ;取十位MOV R4,31H                         ;取个位MOV A,R6SUBB A,#07HJNC LARGER                   ;大于5s跳到LARGER,小于等于5s会提醒MOV A,R0CJNE A,#0AH,FULL               ;1s中0.5s向下运行CLR RING SETB P3.7AJMP CHECK
FULL: CJNE A,#14H,CHECK              ;下面是1s的情况,响并显示号数并清R0,重新计SETB RINGMOV A,R6SETB P3.7JZ QUIT                            ;计时完毕MOV R0,#00HDEC R6                            ;一秒标志减1AJMP CHECK
LARGER: MOV A,R0CJNE A,#14H,CHECK          ;如果1s向下运行,否者跳到"停/显示"DEC R6                           ;计时一秒R6自动减1MOV R0,#00H
CHECK: JNB P3.1,QUIT         ;如按下停止键退出JNB OK,CHECKK      ;只在回答倒计时才有效 AJMP NEXTT
CHECKK:JNB P3.0,REPEAT    ;判断是否使用锦囊
NEXTT: ACALL DISPLAYJB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用) AJMP RECOUNT
ACCOUT:MOV A,DATA0 JNB ACC.0,TRUE1JNB ACC.1,TRUE2JNB ACC.2,TRUE3JNB ACC.3,TRUE4JNB ACC.4,TRUE5JNB ACC.5,TRUE6JNB ACC.6,TZ7JNB ACC.7,TZ8AJMP RECOUNTTZ7: AJMP TRUE7TZ8: AJMP TRUE8   QUIT:  CLR OK                         ;如果按下了"停止键"执行的程序CLR RINGSETB P3.7AJMP START
TRUE1: ACALL BARKMOV A,R2MOV R6,A              ;抢答时间R2送R6MOV R3,#01HCLR OK                ;因为答题的计时不再查询抢答,所以就锁了抢答AJMP COUNT
TRUE2:ACALL BARKMOV A,R2MOV R6,AMOV R3,#02HCLR OKAJMP COUNT
TRUE3:ACALL BARKMOV A,R2MOV R6,AMOV R3,#03HCLR OKAJMP COUNT
TRUE4:ACALL BARKMOV A,R2MOV R6,AMOV R3,#04HCLR OK AJMP COUNT
TRUE5: ACALL BARK MOV A,R2MOV R6,AMOV R3,#05HCLR OKAJMP COUNT
TRUE6:  ACALL BARK MOV A,R2MOV R6,AMOV R3,#06HCLR OKAJMP COUNT
TRUE7:  ACALL BARK MOV A,R2MOV R6,AMOV R3,#07HCLR OKAJMP COUNT
TRUE8:  ACALL BARK MOV A,R2MOV R6,AMOV R3,#08HCLR OKAJMP COUNT
ERROR:  MOV R0,#00HMOV TH1,#3CHMOV TL1,#0B0HMOV 34H,R3                ;犯规号数暂存与(34H)
HERE:   MOV A,R0CJNE A,#06H,FLASH         ;0.3s向下运行->灭并停响CLR RINGSETB P3.7       MOV R3,#0AHMOV R4,#0AHMOV R5,#0AH               ;三灯全灭AJMP CHECK1
FLASH:  CJNE A,#0CH,CHECK1        ;下面是0.8s的情况,响并显示号数并清R0,重新计SETB RINGMOV R0,#00HMOV R3,34H                ;取回号数MOV R5,#0BHMOV R4,#0BH               ;显示FF和号数AJMP CHECK1
CHECK1: JNB P3.1,QUIT1ACALL DISPLAYAJMP HERE
QUIT1:  CLR RINGSETB P3.7CLR OKAJMP START
DISPLAY:MOV DPTR,#DAT1           ;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出 MOV A,R3MOVC A,@A+DPTRMOV P2,#0efHMOV P0,AACALL DELAYMOV DPTR,#DAT2MOV A,R5MOVC A,@A+DPTRMOV P2,#0bfHMOV P0,AACALL DELAYMOV A,R4MOVC A,@A+DPTRMOV P2,#07fHMOV P0,AACALL DELAYRET

仿真演示视频:
https://www.bilibili.com/video/BV1we411K7Vr/

实物演示视频:
https://www.bilibili.com/video/BV1wM411r7Jj/

基于51单片机的八路抢答器汇编语言Proteus仿真原理图程序相关推荐

  1. 【Proteus仿真】基于51单片机的八路抢答器

    [Proteus仿真]基于51单片机的八路抢答器 Proteus仿真 主要功能和使用介绍 采用4位数码管设计. 下排按键一一对应八位选手. 上排三个按键,从走到右依次为:开始.暂停.复位. 操作流程: ...

  2. 基于51单片机的八路抢答器附仿真代码开源

    基于51单片机的八路抢答器代码开源 单片机采用51单片机 一个共阳数码管 需要该源码的可以关注公众号:智慧小巷 回复:八路抢答器 即可!

  3. 基于51单片机的八路抢答器

    写一下寒假做的51小项目,本次是基于AT89C51的八路抢答器,课设水平难度. 具体说明:硬件分为两部分,主持人主控部分和选手使用部分.可以实现:按动开始可以开启程序或者开启答题倒计时,按动复位可以实 ...

  4. 基于51单片机的八路抢答器设计

    随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也越来越重要.本文设计出以STC89C52RC单片机为核心的八路抢答器. 所需元器件如下: STC89C52RC芯片 *1 10K电阻 ...

  5. 单片机6路抢答器c语言程序设计,基于51单片机六路抢答器DIY电子设计(原理图、源程序、PCB等)...

    主要功能: 1.采用4位数码管设计. 2.下排按键一一对应六位选手. 3.上排三个按键,从左到右依次为:开始.暂停.复位. 4.操作流程:上电后数码管显示"----"当主持人按下& ...

  6. T045基于51单片机温湿度检测系统无线蓝牙传输Proteus仿真原理图PCB

    功能: 0.本项目采用STC89C52作为单片机系统的控制MCU 1.系统内采用DHT11作为湿度传感器,支持温湿度检测上传 2.系统具备无线蓝牙模块,支持定时循环发送手机端当前的温湿度状态 3.采用 ...

  7. 基于51单片机超声波的停车场车位管理系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前车位状态 2.当超声波探头检测到距离小于500mm时,判断为当前车位有车,否则无车 3.超声波传感器型号采用HC ...

  8. 基于51单片机的数字音乐彩灯电子琴proteus仿真原理图PCB

    0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前工作模式或曲目编号 2.支持电子琴模式和歌曲模式(内置8首歌曲) 3.按'切换'键可切换工作模式 4.电子琴模式下,按矩阵键 ...

  9. 基于51单片机的水箱水位监测控制系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.通过传感器监测水位,当水位低于水位下限时,接通加水水泵,直到水位达到水位上限,停止加水 2.水位低于水位下限时,声光报警 3.可按键手动加水, ...

最新文章

  1. 赠书 | 算力时代,用 Python 来快速解决复杂问题
  2. Qt调用word 例子
  3. 函数式编程语言python-函数式编程
  4. PHP 执行系统外部命令 system() exec() passthru()
  5. mybatis插入图片处理--mysql
  6. AD域安装及必要设置
  7. cmd 下通过NTML代理访问Maven 库
  8. 解码.NET 2.0配置之谜(一)
  9. 如何免费下载百度文库的文档!!!!!!!
  10. 电力系统分析计算机辅助试题,电力系统计算机辅助分析.docx
  11. 设计一个最优算法来查找一n个元素数组中的最大值和最小值
  12. 计算机视觉 - 图像编码
  13. 视频音轨音量是否为0检测过程
  14. 计算机派位录取,北京小升初派位入学随机录取志愿优先,与成绩无关
  15. JavaScript-常见数组内置方法
  16. 计算机毕业设计SSM大学生志愿者管理系统【附源码数据库】
  17. Ubuntu安装sogo输入法
  18. Unix操作系统历史
  19. JAVA毕设项目网上书店管理系统(java+VUE+Mybatis+Maven+Mysql)
  20. 微软的奥尔良项目简介

热门文章

  1. 程序员趣图,据说这是你写代码的样子……
  2. CSS Tailwind
  3. 三分钟带你了解mybatis关联映射(案例分析一对一,多对多)
  4. 初级考试可以使用计算机吗,计算机初级考试的内容都有哪些
  5. 【目标跟踪】|综述 Deep Learning for Visual Tracking: A Comprehensive Survey
  6. HDU4262 Juggler
  7. 神经网络中的BN操作(常见正则化处理)
  8. 2021哈工大网安837考研初试经验贴
  9. lenet5跑cifar_基于PaddlePaddle2.0-构建卷积网络模型LeNet-5
  10. python实现:命令行翻译.string 和 .xml 文件 -- mkTranslate:支持多种语言的互译