找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5432|回复: 1
收起左侧

八路抢答器汇编源程序+仿真图

[复制链接]
ID:238630 发表于 2017-10-11 18:00 | 显示全部楼层 |阅读模式
带原理图,汇编源程序
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. OK EQU 20H                       ;抢答开始标志位
  2.         RING EQU 22H                     ;响铃标志位
  3.         DATA0 EQU 36H                    ;抢答按键口数据存放地址
  4.         ORG 0000H
  5.         AJMP MAIN
  6.         ORG 0003H  
  7.         AJMP INTT0
  8.         ORG 000BH
  9.         AJMP T0INT
  10.         ORG 001BH
  11.         AJMP T1INT
  12.         ORG 0040H
  13. MAIN:   MOV R1,#14H                       ;初设抢答时间为20s
  14.         MOV R2,#1EH                     ;初设答题时间为30s
  15.         MOV 38H,#3CH                      ;启用锦囊时间从60s倒计时
  16.         MOV TMOD,#11H                    ;设置未定时器/模式1
  17.         MOV TH0,#0F0H
  18.         MOV TL0,#0FFH                    ;越高发声频率越高,越尖
  19.         MOV TH1,#3CH
  20.         MOV TL1,#0B0H                    ;50ms为一次溢出中断
  21.         SETB EA
  22.         SETB ET0
  23.         SETB ET1                         ;允许二个中断,T0/T1
  24.         CLR OK
  25.         CLR RING
  26.          SETB TR1
  27.          SETB TR0                        ;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
  28. START:   MOV DATA0,#0FFH                 ;初始化
  29.          MOV R5,#0BH
  30.          MOV R4,#0BH
  31.          MOV R3,#0BH
  32.          ACALL DISPLAY                   ;未开始抢答时候显示FFF
  33.          JNB P3.3,SELSUB0
  34.          JNB P3.4,TZ3                    ;倒计时调整
  35.          JB P3.0,NEXT
  36.          ACALL DELAY
  37.          JB P3.0,NEXT                    ;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
  38.          SETB EX0                        ;开放INT0
  39.          ACALL BARK                      ;按键发声
  40.          MOV A,R1
  41.          MOV R6,A                    ;送R1->R6,因为R1中保存了抢答时间
  42.          SETB OK                         ;抢答标志位,在使用锦囊时用作判断是抢答倒计时还是回答倒计时
  43.          MOV R3,#0AH                     ;抢答只显示计时,灭号数
  44.          AJMP COUNT                      ;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
  45. NEXT:    JNB P1.0,FALSE1
  46.          JNB P1.1,FALSE2
  47.          JNB P1.2,FALSE3
  48.          JNB P1.3,FALSE4
  49.          JNB P1.4,FALSE5
  50.          JNB P1.5,FALSE6
  51.          JNB P1.6,TZ1
  52.          JNB P1.7,TZ2
  53.          AJMP START
  54. TZ1:     AJMP FALSE7
  55. TZ2:     AJMP FALSE8
  56. TZ3:     AJMP SELSUB1
  57. FALSE1: MOV R3,#01H
  58.         AJMP ERROR
  59. FALSE2: MOV R3,#02H               
  60.         AJMP ERROR
  61. FALSE3: MOV R3,#03H
  62.         AJMP ERROR
  63. FALSE4: MOV R3,#04H
  64.         AJMP ERROR
  65. FALSE5: MOV R3,#05H
  66.         AJMP ERROR
  67. FALSE6: MOV R3,#06H
  68.         AJMP ERROR
  69. FALSE7: MOV R3,#07H
  70.         AJMP ERROR
  71. FALSE8: MOV R3,#08H
  72.         AJMP ERROR
  73. SELSUB0: MOV A,R1
  74.          MOV B,#0AH
  75.          DIV AB
  76.          MOV R5,A
  77.          MOV R4,B
  78.          MOV R3,#0AH
  79.          ACALL DISPLAY                   ;先在两个时间LED上显示R1
  80.          JNB P3.5,INC0                   ;P3.5为+1s键,如按下跳到INCO
  81.          JNB P3.6,DEC0                   ;P3.6为-1s键,如按下跳到DECO
  82.          JNB P3.1,BACK0                  ;P3.1为确定键,如按下跳到BACKO
  83.          AJMP SELSUB0
  84. INC0:   MOV A,R1
  85.         CJNE A,#63H,ADD0                 ;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
  86.         MOV R1,#00H
  87.         ACALL DELAY1
  88.         AJMP SELSUB0
  89. ADD0:   INC R1
  90.         ACALL DELAY1
  91.         AJMP SELSUB0
  92. DEC0:   MOV A,R1
  93.         JZ SETR1                         ;如果R1为0, R1就置99,
  94.         DEC R1
  95.         ACALL DELAY1
  96.         AJMP SELSUB0
  97. SETR1:  MOV R1,#63H
  98.         ACALL DELAY1
  99.         AJMP SELSUB0
  100. BACK0:  AJMP START
  101. SELSUB1: MOV A,R2
  102.         MOV B,#0AH
  103.         DIV AB
  104.        MOV R5,A
  105.        MOV R4,B
  106.        MOV R3,#0AH
  107.        ACALL DISPLAY
  108.     JNB P3.5,INC1
  109.     JNB P3.6,DEC1
  110.     JNB P3.1,BACK1
  111.     AJMP SELSUB1
  112. INC1:   MOV A,R2
  113.         CJNE A,#63H,ADD1
  114.         MOV R2,#00H
  115.         ACALL DELAY1
  116. AJMP SELSUB1
  117. ADD1:   INC R2
  118.          ACALL DELAY1
  119.          AJMP SELSUB1
  120. DEC1:   MOV A,R2
  121.      JZ SETR2
  122.      DEC R2
  123.     ACALL DELAY1
  124.     AJMP SELSUB1
  125. SETR2:  MOV R2,#63H
  126.         ACALL DELAY1
  127.         AJMP SELSUB1
  128. BACK1: AJMP START
  129. REPEAT:MOV A,38h                        ;使用锦囊时重新计时
  130.        MOV R6,A
  131.        CLR RING         ;当倒计时进入最后5秒的时候,启用锦囊能消除蜂鸣
  132. COUNT:MOV R0,#00H                    ;重置定时器中断次数
  133.         MOV TH1,#3CH
  134.         MOV TL1,#0B0H                  ;重置定时器
  135. RECOUNT:MOV A,R6                       ;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
  136.         MOV B,#0AH
  137.     DIV AB                             ;除十分出个位/十位
  138.     MOV 30H,A                          ;十位存于(30H)
  139.     MOV 31H,B                          ;个位存于(31H)
  140.     MOV R5,30H                         ;取十位
  141.     MOV R4,31H                         ;取个位
  142.     MOV A,R6
  143.     SUBB A,#07H
  144.     JNC LARGER                   ;大于5s跳到LARGER,小于等于5s会提醒
  145.     MOV A,R0
  146.         CJNE A,#0AH,FULL               ;1s中0.5s向下运行
  147.     CLR RING
  148.     AJMP CHECK
  149. FULL: CJNE A,#14H,CHECK              ;下面是1s的情况,响并显示号数并清R0,重新计
  150.       SETB RING
  151.       MOV A,R6
  152.     JZ QUIT                            ;计时完毕
  153.     MOV R0,#00H
  154.     DEC R6                            ;一秒标志减1
  155.       AJMP CHECK
  156. LARGER: MOV A,R0
  157.         CJNE A,#14H,CHECK          ;如果1s向下运行,否者跳到"停/显示"
  158.         DEC R6                           ;计时一秒R6自动减1
  159.         MOV R0,#00H
  160. CHECK: JNB P3.1,QUIT         ;如按下停止键退出
  161.         JNB OK,CHECKK      ;只在回答倒计时才有效
  162.         AJMP NEXTT
  163. CHECKK:JNB P3.0,REPEAT    ;判断是否使用锦囊
  164. NEXTT: ACALL DISPLAY
  165.    JB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
  166.        AJMP RECOUNT
  167. ACCOUT:MOV A,DATA0
  168.        JNB ACC.0,TRUE1
  169.        JNB ACC.1,TRUE2
  170.        JNB ACC.2,TRUE3
  171.        JNB ACC.3,TRUE4
  172.        JNB ACC.4,TRUE5
  173.        JNB ACC.5,TRUE6
  174.        JNB ACC.6,TZ7
  175.       JNB ACC.7,TZ8
  176.       AJMP RECOUNT
  177. TZ7: AJMP TRUE7
  178. TZ8: AJMP TRUE8   
  179. QUIT:  CLR OK                         ;如果按下了"停止键"执行的程序
  180.    CLR RING
  181.    AJMP START
  182. TRUE1: ACALL BARK
  183.        MOV A,R2
  184.        MOV R6,A              ;抢答时间R2送R6
  185.        MOV R3,#01H
  186.        CLR OK                ;因为答题的计时不再查询抢答,所以就锁了抢答
  187.        AJMP COUNT
  188. TRUE2:ACALL BARK
  189.       MOV A,R2
  190.       MOV R6,A
  191.       MOV R3,#02H
  192.       CLR OK
  193.       AJMP COUNT
  194. TRUE3:ACALL BARK
  195.       MOV A,R2
  196.       MOV R6,A
  197.       MOV R3,#03H
  198.       CLR OK
  199.       AJMP COUNT
  200. TRUE4:ACALL BARK
  201.       MOV A,R2
  202.       MOV R6,A
  203.       MOV R3,#04H
  204.       CLR OK
  205.       AJMP COUNT
  206. TRUE5: ACALL BARK
  207.         MOV A,R2
  208.         MOV R6,A
  209.         MOV R3,#05H
  210.         CLR OK
  211.         AJMP COUNT
  212. TRUE6:  ACALL BARK
  213.         MOV A,R2
  214.         MOV R6,A
  215.         MOV R3,#06H
  216.         CLR OK
  217.         AJMP COUNT
  218. TRUE7:  ACALL BARK
  219.         MOV A,R2
  220.         MOV R6,A
  221.         MOV R3,#07H
  222.         CLR OK
  223.         AJMP COUNT
  224. TRUE8:  ACALL BARK
  225.         MOV A,R2
  226.         MOV R6,A
  227.         MOV R3,#08H
  228.         CLR OK
  229.         AJMP COUNT
  230. ERROR:  MOV R0,#00H
  231.         MOV TH1,#3CH
  232.         MOV TL1,#0B0H
  233.         MOV 34H,R3                ;犯规号数暂存与(34H)
  234. HERE:   MOV A,R0
  235.         CJNE A,#06H,FLASH         ;0.3s向下运行->灭并停响
  236.         CLR RING
  237.         MOV R3,#0AH
  238.         MOV R4,#0AH
  239.         MOV R5,#0AH               ;三灯全灭
  240.         AJMP CHECK1
  241. FLASH:  CJNE A,#0CH,CHECK1        ;下面是0.8s的情况,响并显示号数并清R0,重新计
  242.         
  243. ……………………

  244. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
八位抢答器.zip (201.99 KB, 下载次数: 60)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:259066 发表于 2017-12-8 15:12 来自手机 | 显示全部楼层
想下载
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表