找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机竞赛抢答器部分功能程序

[复制链接]
跳转到指定楼层
楼主
ID:349969 发表于 2018-6-12 07:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
====查询程序=====
START:   MOV R5,#0BH
         MOV R4,#0BH
         MOV R3,#0BH
ACALL DISPLAY;未开始抢答时候显示FFF
         JB P3.0,NEXT;ddddddd
         ACALL DELAY
         JB P3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
         ACALL BARK;按键发声
         MOV A,R1
  MOV R6,A;送R1->R6,因为R1中保存了抢答时间
     SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答
         MOV R7,#01H  ;读抢答键数据信号标志,这里表示只读一次有用信号
          MOV R3,#0AH;抢答只显示计时,灭号数
        AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT:   JNB P1.0,FALSE1
    JNB P1.1,FALSE2
    JNB P1.2,FALSE3
    JNB P1.3,FALSE4
    JNB P1.4,FALSE5
    JNB P1.5,FALSE6
    JNB P1.6,FALSE7
    JNB P1.7,FALSE8
    AJMP START
;=====INT0(抢答时间R1调整程序)=====
INT0SUB:MOV A,R1
        MOV B,#0AH
         DIV AB
         MOV R5,A
         MOV R4,B
         MOV R3,#0AH
         ACALL DISPLAY;先在两个时间LED上显示R1
         JNB P3.4,INC0;P3.4为+1s键,如按下跳到INCO
         JNB P3.5,DEC0;P3.5为-1s键,如按下跳到DECO
         JNB P3.1,BACK0;P3.1为确定键,如按下跳到BACKO
    AJMP INT0SUB
INC0:   MOV A,R1
CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
        MOV R1,#00H
        ACALL DELAY1
AJMP INT0SUB
ADD0:   INC R1
        ACALL DELAY1
        AJMP INT0SUB
DEC0:   MOV A,R1
    JZ SETR1;如果R1为0, R1就置99,
    DEC R1
    ACALL DELAY1
    AJMP INT0SUB
SETR1:  MOV R1,#63H
        ACALL DELAY1
        AJMP INT0SUB
BACK0:  RETI
;=====读抢答按键数据口程序=====
;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.
;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性
AAAA1:   MOV A,P1
         CJNE A,#0FFH,AA1           ;当不全为1时的数据为有效数据
AA0:     MOV 36H,A          ;将有效数据送到36H暂存
           AJMP LOOP2
          AA1:    DEC R7         
          AJMP AA0
   ;=====发声程序=====
BARK:   SETB RING
        ACALL DELAY1
        ACALL DELAY1
        CLR RING;按键发声
    RET
;=====TO溢出中断(响铃程序)=====
T0INT:  MOV TH0,#0ECH
        MOV TL0,#0FFH
        JNB RING,OUT;
     CPL P3.6;RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音
OUT:    RETI
;=====T1溢出中断(计时程序)=====
T1INT:  MOV TH1,#3CH
        MOV TL1,#0B0H
    INC R0
    RETI
END




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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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