找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16412|回复: 14
打印 上一主题 下一主题
收起左侧

单片机八路抢答器proteus仿真带汇编语言源程序 原理图

  [复制链接]
跳转到指定楼层
楼主
一个非常不错的汇编语言写的单片机八路抢答器proteus仿真.下面是原理图


所有资料下载: 八位抢答器.zip (201.99 KB, 下载次数: 309)

下面是部分源码预览:
  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.         SETB RING
  243.         MOV R0,#00H
  244.         MOV R3,34H                ;取回号数
  245.         MOV R5,#0BH
  246.         MOV R4,#0BH               ;显示FF和号数
  247.         AJMP CHECK1
  248. CHECK1: JNB P3.1,QUIT1
  249.         ACALL DISPLAY
  250.         AJMP HERE
  251. QUIT1:  CLR RING
  252.         CLR OK
  253.         AJMP START
  254. DISPLAY:MOV DPTR,#DAT1           ;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出
  255.         MOV A,R3
  256.         MOVC A,@A+DPTR
  257.         MOV P2,#0feH
  258.         MOV P0,A
  259.         ACALL DELAY
  260.         MOV DPTR,#DAT2
  261.         MOV A,R5
  262.         MOVC A,@A+DPTR
  263.         MOV P2,#0fdH
  264.         MOV P0,A
  265.         ACALL DELAY
  266.         MOV A,R4
  267.         MOVC A,@A+DPTR
  268.         MOV P2,#0fbH
  269.         MOV P0,A
  270.         ACALL DELAY
  271.         RET
  272. DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H  
  273. ;"灭","1","2","3","4","5","6","7","8","9","灭","F"
  274. DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
  275. ;第一个为零,其他与上相同,因为十位如果为零显示熄灭

  276. DELAY1: MOV 35H,#08H
  277. LOOP0:  ACALL DISPLAY
  278.          DJNZ 35H,LOOP0
  279.          RET

  280. DELAY:  MOV 32H,#12H
  281. LOOP:   MOV 33H,#0AFH
  282. LOOP1:  DJNZ 33H,LOOP1
  283.         DJNZ 32H,LOOP
  284.     RET
  285. BARK:   SETB RING
  286.         ACALL DELAY1
  287.         ACALL DELAY1
  288.         CLR RING                  ;按键发声
  289.     RET

  290. T0INT:  MOV TH0,#0ECH
  291.         MOV TL0,#0FFH
  292.         JNB RING,OUT;
  293. CPL P3.7                ;RING标志位为1时候P3.7口不断取反使喇叭发出一定频率的声音
  294. OUT:    RETI

  295. T1INT: MOV TH1,#3CH
  296.       MOV TL1,#0B0H
  297.       INC R0
  298.     RETI

  299. INTT0: MOV DATA0,P1   
  300.        CLR EX0
  301.      RETI
  302.      END
复制代码

评分

参与人数 2黑币 +10 收起 理由
AAAKK + 5 共享资料的黑币奖励!
qq964404188 + 5 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:174844 发表于 2017-3-20 19:58 | 只看该作者
在不,能把安装包单独发给我吗
回复

使用道具 举报

板凳
ID:190056 发表于 2017-4-16 14:20 | 只看该作者
楼主,有没有pcb图啊
回复

使用道具 举报

地板
ID:260468 发表于 2017-12-12 14:57 | 只看该作者
楼主,有没有原c程序啊!
回复

使用道具 举报

5#
ID:265620 发表于 2017-12-23 21:03 | 只看该作者
请问里面的锦囊时间是什么
回复

使用道具 举报

6#
ID:265620 发表于 2017-12-23 21:04 | 只看该作者
请问里面的锦囊时间是什么
回复

使用道具 举报

7#
ID:274989 发表于 2018-1-11 21:02 | 只看该作者
感谢感谢
回复

使用道具 举报

8#
ID:325677 发表于 2018-5-9 09:35 | 只看该作者
请问原理图是源工程图片吗?
回复

使用道具 举报

9#
ID:325677 发表于 2018-5-9 09:45 | 只看该作者
你好。请问基于AT89c51的八路抢答器电路图是工程源图,这是我QQ,1163993046,可以有偿使用。谢谢
回复

使用道具 举报

10#
ID:368704 发表于 2018-7-10 16:15 | 只看该作者
不能用proteus打开吗?
回复

使用道具 举报

11#
ID:453321 发表于 2018-12-24 15:22 | 只看该作者
亲爱的博主,能否给我压缩包,让我好好学习学习
回复

使用道具 举报

12#
ID:461924 发表于 2019-1-4 16:32 来自手机 | 只看该作者
博主,这个怎样可以买到呢
回复

使用道具 举报

13#
ID:645244 发表于 2019-11-19 18:40 | 只看该作者
牛逼啊
回复

使用道具 举报

14#
ID:662237 发表于 2019-12-12 10:54 来自手机 | 只看该作者
有人有这个压缩包吗  可以单独发我下吗
回复

使用道具 举报

15#
ID:662237 发表于 2019-12-12 10:58 来自手机 | 只看该作者
123456h 发表于 2017-3-20 19:58
在不,能把安装包单独发给我吗

请问你有这个压缩包了吗  可以发我下吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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