武汉绘芯科技有限公司欢迎您!
10余年经验沉淀展览展示运动控制的专家
全国咨询热线:027-87052087
联系我们
武汉绘芯科技有限公司
电话:027-87052087
手机:13329706647
邮箱:956693667@qq.com
地址:武汉市江夏区藏龙岛谭湖一路8号
联系人:黄先生
您的位置: 直播软件|直播系统 > 知识库 >
知识库

蓝球比赛专用秒表原理图

日期:2016-07-28 18:11:10 来源:未知 点击

u    原理图

 

文本框:

 

 

 

 

 

u    程序框图:

 

调用显示子程序

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


u    程序清单:

;***************

;蓝球S表计时器;

;CPU:AT89C51

;2008610

;***************

       LEDBUF              EQU      30H        ;显示码缓存区

       HOUR                 EQU      40H

       MINUTE              EQU      41H

       SECOND             EQU      42H

 

       KEY_STAR_12    EQU      P1.0

       KEY_GOON        EQU      P1.1

       KEY_STOP         EQU      P1.2

       KEY_STAR_24    EQU      P1.3

 

       LE_573         EQU      P1.4              ;74HC573使能端

       SPEKER              EQU      P1.5              ;报警器

 

      

 

       COM1           EQU      P3.5

       COM2           EQU      P3.4

       COM3           EQU      P3.3

       COM4           EQU      P3.2

 

       M_12BIT      BIT 20H.0               ;12m正计时标志位

       S_24BIT        BIT 20H.1            ;24s倒计时标志位

       STOPBIT      BIT 20H.2            ;停止标志位

       GOONBIT    BIT 20H.3            ;继续标志位

       ALLOVERBIT     BIT 20H.4            ;计时完标志位

 

       C100us          EQU      43H

       TICK            EQU      10000            ;置中断次数

       T100us          EQU      256-100         ;置定时器初始值

 

       LJMP            START                 ;跳转至主程序

       ORG             000BH                  ;定时器0中断入口

T0INT:         

       PUSH    PSW                    ;状态保护

       PUSH    ACC

       MOV     A,C100us+1

       JZ          GOON                 ;计数值是否为0

       DEC       C100us

GOON:  

       DEC       C100us+1

       MOV     A,C100us

       ORL       A,C100us+1

       JNZ EXIT

       MOV     C100us,#HIGH(TICK) ;重置计数值

       MOV     C100us+1,#LOW(TICK)

 

       JB          _24BIT,GOT0_24SDEC      ;S_24BIT1,即为显示24S倒计时

 

       INC        SECOND                    ;秒值加一

       AJMP    RECORDE_TIMECONTINUE

 

GOT0_24SDEC:

       DEC       SECOND                    ;秒值减1

       MOV     A,SECOND

       JNZ        EXIT

       CLR       S_24BIT               ;计时完毕,报警

       CLR       SPEKER

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       SETB     SPEKER                     ;报警

 

       MOV     SECOND,#0         ;计时单元清0

       MOV     MINUTE,#0

       MOV     HOUR,#0

       CLR       TR0

       CLR       EA

       SETB     ALLOVERBIT

       AJMP    EXIT                    ;24s倒计时完成

 

RECORDE_TIMECONTINUE:

       MOV     A,SECOND       

       CJNE     A,#60,EXIT          ;判断秒值是否为60

       MOV     SECOND,#0         ;秒值为60,则清0

       INC        MINUTE                     ;分值加一

       MOV     A,#12

       XRL       A,MINUTE

       JNZ        EXIT

       CLR       M_12BIT                    ;计时完毕,报警

       CLR       SPEKER

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       SETB     SPEKER                     ;报警

 

       MOV     SECOND,#0         ;计时单元清0

       MOV     MINUTE,#0

       MOV     HOUR,#0                    ;12分钟正计时完成

       SETB     ALLOVERBIT

EXIT:

       POP              ACC

       POP              PSW

       RETI

 

;****************

;延时子程序

;****************

DELAY:                           ;延时子程序

       MOV     R7,#0FFH

DELAYLOOP:

       DJNZ     R7,DELAYLOOP

       DJNZ     R6,DELAYLOOP

       RET

 

;****************

;扫键功能子程序

;****************

 

;判断是否有控制键按下,是哪一个键按下

SCAN_KEY:

       JNB       KEY_STAR_24,GOT0_STAR_24

       JNB       KEY_STAR_12,GOT0_STAR_12            ;通道切换,开机不计时,必须要按通道选择才记时

       JNB       KEY_STOP,GOTO_STOP

       JNB       KEY_GOON,GOTO_GOON

       AJMP    EXIT_SCAN_KEY

 

;24S倒计时按键

GOT0_STAR_24:

       LCALL  DELAY

       JB   KEY_STAR_24,EXIT_SCAN_KEY

GOT0_STAR_24_HERE:

;      LCALL  DISPLAY

      

       JNB       KEY_STAR_24,GOT0_STAR_24_HERE

       AJMP    EXIT_SCAN_KEY    

;12分钟正计时按键

GOT0_STAR_12:

       LCALL  DELAY

       JB   KEY_STAR_12,EXIT_SCAN_KEY

GOT0_STAR_12_HERE:

;      LCALL  DISPLAY

      

       JNB       KEY_STAR_12,GOT0_STAR_12_HERE

       AJMP    EXIT_SCAN_KEY

;暂停键

GOTO_STOP:

       LCALL  DELAY

       JB   KEY_STOP,EXIT_SCAN_KEY

GOTO_STOP_HERE:

;      LCALL  DISPLAY

       JNB       KEY_STOP,GOTO_STOP_HERE

       AJMP    EXIT_SCAN_KEY

 

;继续键

GOTO_GOON:

       LCALL  DELAY

       JB   KEY_GOON,EXIT_SCAN_KEY

GOTO_GOON_HERE:      

;      JNB       KEY_GOON,GOTO_GOON_HERE

       SETB     GOONBIT

       AJMP    EXIT_SCAN_KEY

 

EXIT_SCAN_KEY:

       RET

 

 

;****************

;显示子程序

;****************

DISPLAY:

       MOV     A,HOUR                     ;显示小时值十位

       MOV     B,#10

       DIV       AB

       CALL    T0LED

       MOV     LEDBUF,A          ;将十位值送显示码缓存区

       MOV     A,B               ;显示小时值个位

       CALL    T0LED

       ORL       A,#80H                ;显示小数点

       MOV     LEDBUF+1,A             ;送显示码缓存区

       MOV     A,MINUTE          ;显示分钟值十位

       MOV     B,#10

       DIV       AB

       CALL    T0LED

       MOV     LEDBUF+2,A      ;将十位值送显示码缓存区

       MOV     A,B                      显示分钟个位值

       CALL    T0LED               

       ORL       A,#80H                ;显示小数点

       MOV     LEDBUF+3,A      ;送显示码缓存区

       MOV     A,SECOND

       MOV     B,#10                   ;显示秒十位值

       DIV       AB

       CALL    T0LED

       MOV     LEDBUF+4,A      ;送显示码缓存区

       MOV     A,B

       CALL    T0LED

       MOV     LEDBUF+5,A

 

DISPLAYLED:

       MOV     R0,#LED

       MOV     R1,#6                   ;6个八段管

       MOV     R2,#0110011B       ;位扫描码初值

LOOP:  

       MOV     A,#0

       MOV     P0,A                     ;关所有八段管

       MOV     A,@R0

       CLR       LE_573

       MOV     P0,A

       SETB     LE_573

 

       MOV     A,R2

       MOV     P3,A                     ;显示一位八段管

       MOV     R6,#01H

       CALL    DELAY

       MOV     A,R2                    ;显示下一位

       RR  A

       MOV     R2,A

       INC R0

       DJNZ     R1,LOOP

       RET

 

 

;******************

;将字段码转换显示码

;******************

 

 

T0LED: 

MOV     P0,A                           

       MOV     A,@R0

       MOV     P0,A

       MOV     A,R2

       MOV     P3,A             

       MOV     DPTR,#LEDMAP              ;将字段码转换显示码

       MOVC   A,@A+DPTR

       RET

 

;****************

;主程序

;****************

START: 

      

       MOV     P0,#0FFH

       MOV     P1,#0FFH

       MOV     P2,#0FFH

       MOV     P3,#0FFH

       MOV     20H,#0

 

       MOV     30H,#0

       MOV     40H,#0

       MOV     41H,#0

       MOV     42H,#0

 

       MOV     TMOD,#02H               定时器工作方式2

       MOV     TH0,#T100us               定时器初始值

       MOV     TL0,#T100us          

       MOV     IE,#10000010B            ;EA=1IT0=1

       MOV     HOUR,#0                    ;显示初始值

       MOV     MINUTE,#0

       MOV     SECOND,#0

       MOV     C100us,#HIGH(TICK)

       MOV     C100us+1,#LOW(TICK)

;      SETB     TR0                      启动定时器0

             

CIRCLE:      

       LCALL  SCAN_KEY

       JB   S_24BIT,GOT0_24S

       JB   M_12BIT,CIRCLE_LOOP

       CLR       EA

       CLR       TR0

       MOV     LEDBUF,#0

 

       LCALL  DISPLAY                   ;无键按下,循环显示全0

       AJMP    CIRCLE

 

;进入24S倒计时模式

GOT0_24S:

       MOV     HOUR,#0                           ;显示初始值

       MOV     MINUTE,#0

       MOV     SECOND,#24

             

CIRCLE_LOOP:

       LCALL  DISPLAY                          ;调用显示子程序,等待中断

 

;扫暂停键和继续键

       JNB       KEY_STOP,GOTO_STOP_WORK

       JNB       KEY_GOON,GOTO_GOON_WORK

       AJMP    WORK_SCAN_KEYOVER

;暂停键

GOTO_STOP_WORK:

       LCALL  DELAY

       JB   KEY_STOP,WORK_SCAN_KEYOVER

GOTO_STOP_HERE_WORK:

       CLR       EA

       CLR       TR0

;      LCALL  DISPLAY

       JNB       KEY_STOP,GOTO_STOP_HERE_WORK    ;如果暂停,则停止计数

       SETB     STOPBIT

       CLR       EA

       CLR       TR0

       AJMP    WORK_SCAN_KEYOVER

;继续键

GOTO_GOON_WORK:

       LCALL  DELAY

       JB   KEY_GOON,WORK_SCAN_KEYOVER

GOTO_GOON_HERE_WORK:

       CLR       EA

       CLR       TR0

;      LCALL  DISPLAY

       JNB       KEY_GOON,GOTO_GOON_HERE_WORK

       SETB     GOONBIT

       SETB     EA

       SETB     TR0

 

WORK_SCAN_KEYOVER:

       JBC ALLOVERBIT,CIRCLE     ;如果一个计时流程完,则进入主循环

       LJMP     CIRCLE_LOOP          ;如果一个计时流程未完,则进入子循环

 

 

;************

;字段码

;************

 

LEDMAP:    

       DB  3FH,06H,5BH,4FH              ;八段数码管显示码

       DB  66H,6DH,7DH,07H

       DB  7FH,6FH,77H,7CH

       DB  39H,5EH,79H,71H

 

       END

 

 

 

 

 

 

 

u    程序框图:

 

调用显示子程序

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


u    程序清单:

;***************

;蓝球S表计时器;

;CPU:AT89C51

;2008610

;***************

       LEDBUF              EQU      30H        ;显示码缓存区

       HOUR                 EQU      40H

       MINUTE              EQU      41H

       SECOND             EQU      42H

 

       KEY_STAR_12    EQU      P1.0

       KEY_GOON        EQU      P1.1

       KEY_STOP         EQU      P1.2

       KEY_STAR_24    EQU      P1.3

 

       LE_573         EQU      P1.4              ;74HC573使能端

       SPEKER              EQU      P1.5              ;报警器

 

      

 

       COM1           EQU      P3.5

       COM2           EQU      P3.4

       COM3           EQU      P3.3

       COM4           EQU      P3.2

 

       M_12BIT      BIT 20H.0               ;12m正计时标志位

       S_24BIT        BIT 20H.1            ;24s倒计时标志位

       STOPBIT      BIT 20H.2            ;停止标志位

       GOONBIT    BIT 20H.3            ;继续标志位

       ALLOVERBIT     BIT 20H.4            ;计时完标志位

 

       C100us          EQU      43H

       TICK            EQU      10000            ;置中断次数

       T100us          EQU      256-100         ;置定时器初始值

 

       LJMP            START                 ;跳转至主程序

       ORG             000BH                  ;定时器0中断入口

T0INT:         

       PUSH    PSW                    ;状态保护

       PUSH    ACC

       MOV     A,C100us+1

       JZ          GOON                 ;计数值是否为0

       DEC       C100us

GOON:  

       DEC       C100us+1

       MOV     A,C100us

       ORL       A,C100us+1

       JNZ EXIT

       MOV     C100us,#HIGH(TICK) ;重置计数值

       MOV     C100us+1,#LOW(TICK)

 

       JB          _24BIT,GOT0_24SDEC      ;S_24BIT1,即为显示24S倒计时

 

       INC        SECOND                    ;秒值加一

       AJMP    RECORDE_TIMECONTINUE

 

GOT0_24SDEC:

       DEC       SECOND                    ;秒值减1

       MOV     A,SECOND

       JNZ        EXIT

       CLR       S_24BIT               ;计时完毕,报警

       CLR       SPEKER

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       SETB     SPEKER                     ;报警

 

       MOV     SECOND,#0         ;计时单元清0

       MOV     MINUTE,#0

       MOV     HOUR,#0

       CLR       TR0

       CLR       EA

       SETB     ALLOVERBIT

       AJMP    EXIT                    ;24s倒计时完成

 

RECORDE_TIMECONTINUE:

       MOV     A,SECOND       

       CJNE     A,#60,EXIT          ;判断秒值是否为60

       MOV     SECOND,#0         ;秒值为60,则清0

       INC        MINUTE                     ;分值加一

       MOV     A,#12

       XRL       A,MINUTE

       JNZ        EXIT

       CLR       M_12BIT                    ;计时完毕,报警

       CLR       SPEKER

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       LCALL  DELAY

       SETB     SPEKER                     ;报警

 

       MOV     SECOND,#0         ;计时单元清0

       MOV     MINUTE,#0

       MOV     HOUR,#0                    ;12分钟正计时完成

       SETB     ALLOVERBIT

EXIT:

       POP              ACC

       POP              PSW

       RETI

 

;****************

;延时子程序

;****************

DELAY:                           ;延时子程序

       MOV     R7,#0FFH

DELAYLOOP:

       DJNZ     R7,DELAYLOOP

       DJNZ     R6,DELAYLOOP

       RET

 

;****************

;扫键功能子程序

;****************

 

;判断是否有控制键按下,是哪一个键按下

SCAN_KEY:

       JNB       KEY_STAR_24,GOT0_STAR_24

       JNB       KEY_STAR_12,GOT0_STAR_12            ;通道切换,开机不计时,必须要按通道选择才记时

       JNB       KEY_STOP,GOTO_STOP

       JNB       KEY_GOON,GOTO_GOON

       AJMP    EXIT_SCAN_KEY

 

;24S倒计时按键

GOT0_STAR_24:

       LCALL  DELAY

       JB   KEY_STAR_24,EXIT_SCAN_KEY

GOT0_STAR_24_HERE:

;      LCALL  DISPLAY

      

       JNB       KEY_STAR_24,GOT0_STAR_24_HERE

       AJMP    EXIT_SCAN_KEY    

;12分钟正计时按键

GOT0_STAR_12:

       LCALL  DELAY

       JB   KEY_STAR_12,EXIT_SCAN_KEY

GOT0_STAR_12_HERE:

;      LCALL  DISPLAY

      

       JNB       KEY_STAR_12,GOT0_STAR_12_HERE

       AJMP    EXIT_SCAN_KEY

;暂停键

GOTO_STOP:

       LCALL  DELAY

       JB   KEY_STOP,EXIT_SCAN_KEY

GOTO_STOP_HERE:

;      LCALL  DISPLAY

       JNB       KEY_STOP,GOTO_STOP_HERE

       AJMP    EXIT_SCAN_KEY

 

;继续键

GOTO_GOON:

       LCALL  DELAY

       JB   KEY_GOON,EXIT_SCAN_KEY

GOTO_GOON_HERE:      

;      JNB       KEY_GOON,GOTO_GOON_HERE

       SETB     GOONBIT

       AJMP    EXIT_SCAN_KEY

 

EXIT_SCAN_KEY:

       RET

 

 

;****************

;显示子程序

;****************

DISPLAY:

       MOV     A,HOUR                     ;显示小时值十位

       MOV     B,#10

       DIV       AB

       CALL    T0LED

       MOV     LEDBUF,A          ;将十位值送显示码缓存区

       MOV     A,B               ;显示小时值个位

       CALL    T0LED

       ORL       A,#80H                ;显示小数点

       MOV     LEDBUF+1,A             ;送显示码缓存区

       MOV     A,MINUTE          ;显示分钟值十位

       MOV     B,#10

       DIV       AB

       CALL    T0LED

       MOV     LEDBUF+2,A      ;将十位值送显示码缓存区

       MOV     A,B                      显示分钟个位值

       CALL    T0LED               

       ORL       A,#80H                ;显示小数点

       MOV     LEDBUF+3,A      ;送显示码缓存区

       MOV     A,SECOND

       MOV     B,#10                   ;显示秒十位值

       DIV       AB

       CALL    T0LED

       MOV     LEDBUF+4,A      ;送显示码缓存区

       MOV     A,B

       CALL    T0LED

       MOV     LEDBUF+5,A

 

DISPLAYLED:

       MOV     R0,#LED

       MOV     R1,#6                   ;6个八段管

       MOV     R2,#0110011B       ;位扫描码初值

LOOP:  

       MOV     A,#0

       MOV     P0,A                     ;关所有八段管

       MOV     A,@R0

       CLR       LE_573

       MOV     P0,A

       SETB     LE_573

 

       MOV     A,R2

       MOV     P3,A                     ;显示一位八段管

       MOV     R6,#01H

       CALL    DELAY

       MOV     A,R2                    ;显示下一位

       RR  A

       MOV     R2,A

       INC R0

       DJNZ     R1,LOOP

       RET

 

 

;******************

;将字段码转换显示码

;******************

 

 

T0LED: 

MOV     P0,A                           

       MOV     A,@R0

       MOV     P0,A

       MOV     A,R2

       MOV     P3,A             

       MOV     DPTR,#LEDMAP              ;将字段码转换显示码

       MOVC   A,@A+DPTR

       RET

 

;****************

;主程序

;****************

START: 

      

       MOV     P0,#0FFH

       MOV     P1,#0FFH

       MOV     P2,#0FFH

       MOV     P3,#0FFH

       MOV     20H,#0

 

       MOV     30H,#0

       MOV     40H,#0

       MOV     41H,#0

       MOV     42H,#0

 

       MOV     TMOD,#02H               定时器工作方式2

       MOV     TH0,#T100us               定时器初始值

       MOV     TL0,#T100us          

       MOV     IE,#10000010B            ;EA=1IT0=1

       MOV     HOUR,#0                    ;显示初始值

       MOV     MINUTE,#0

       MOV     SECOND,#0

       MOV     C100us,#HIGH(TICK)

       MOV     C100us+1,#LOW(TICK)

;      SETB     TR0                      启动定时器0

             

CIRCLE:      

       LCALL  SCAN_KEY

       JB   S_24BIT,GOT0_24S

       JB   M_12BIT,CIRCLE_LOOP

       CLR       EA

       CLR       TR0

       MOV     LEDBUF,#0

 

       LCALL  DISPLAY                   ;无键按下,循环显示全0

       AJMP    CIRCLE

 

;进入24S倒计时模式

GOT0_24S:

       MOV     HOUR,#0                           ;显示初始值

       MOV     MINUTE,#0

       MOV     SECOND,#24

             

CIRCLE_LOOP:

       LCALL  DISPLAY                          ;调用显示子程序,等待中断

 

;扫暂停键和继续键

       JNB       KEY_STOP,GOTO_STOP_WORK

       JNB       KEY_GOON,GOTO_GOON_WORK

       AJMP    WORK_SCAN_KEYOVER

;暂停键

GOTO_STOP_WORK:

       LCALL  DELAY

       JB   KEY_STOP,WORK_SCAN_KEYOVER

GOTO_STOP_HERE_WORK:

       CLR       EA

       CLR       TR0

;      LCALL  DISPLAY

       JNB       KEY_STOP,GOTO_STOP_HERE_WORK    ;如果暂停,则停止计数

       SETB     STOPBIT

       CLR       EA

       CLR       TR0

       AJMP    WORK_SCAN_KEYOVER

;继续键

GOTO_GOON_WORK:

       LCALL  DELAY

       JB   KEY_GOON,WORK_SCAN_KEYOVER

GOTO_GOON_HERE_WORK:

       CLR       EA

       CLR       TR0

;      LCALL  DISPLAY

       JNB       KEY_GOON,GOTO_GOON_HERE_WORK

       SETB     GOONBIT

       SETB     EA

       SETB     TR0

 

WORK_SCAN_KEYOVER:

       JBC ALLOVERBIT,CIRCLE     ;如果一个计时流程完,则进入主循环

       LJMP     CIRCLE_LOOP          ;如果一个计时流程未完,则进入子循环

 

 

;************

;字段码

;************

 

LEDMAP:    

       DB  3FH,06H,5BH,4FH              ;八段数码管显示码

       DB  66H,6DH,7DH,07H

       DB  7FH,6FH,77H,7CH

       DB  39H,5EH,79H,71H

 

       END

 


在线客服
联系方式

热线电话

13329706647

上班时间

周一到周五

公司电话

027-87052087

二维码
线