⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lanqiu.asm

📁 单片机典型系统设计实例精讲 第5章 篮球赛计时计分器
💻 ASM
字号:
;***************************************************************
;*------------------ 球赛计时计分器程序------------------------*
;*-------------------------------------------------------------*
;*---------------------MCS-51汇编语言-------------------------*
;*-------------------------------------------------------------*
;*-----------------------CPU: AT89C51--------------------------*
;*-------------------------------------------------------------*
;*---------------------程序名:qsjsjf.asm-----------------------*
;*-------------------------------------------------------------*
;*-------------------设计人: 雷道仲  罗政球--------------------*
;***************************************************************
ORG  0000H
AJMP   LK1               ;主程序地址
ORG    000BH             ;定时中断入口地址
AJMP   CTCO
ORG    0013H             ;外部中断入口地址
AJMP   CXT
LK1:           MOV    33H,#00H          ;甲队记分清0
MOV    34H,#00H            
MOV    35H,#00H
MOV    36H,#00H          ;乙队记分清0
MOV    37H,#00H             
MOV    38H,#00H
MOV    40H,#00H          ;记时分钟清0
MOV    41H,#00H
CLR    P0.0
Mp:             CLR    P2.0              ;计时牌子清零
CLR    P2.1                ;分分秒秒清0
CLR    P2.2  
CLR    P2.3
MOV    P1,#00H
NOP
NOP
SETB   P2.0
SETB   P2.1
SETB   P2.2
SETB   P2.3
MOV    42H,#05H       ;送秒钟初值59秒
MOV    43H,#09H

MOV    SCON,#00H        ;计分牌子清零程序
CLR    P3.7
MOV    R1,#33H
MOV    R2,#06H
 LP:            MOV    A,@R1
                MOV    DPTR,#TAB       ;取显示数
MOVC   A,@A+DPTR
MOV    SBUF,A          ;通过串行口发显示数据
JNB    TI,$           ;是否发送完毕
CLR    TI                  ;清除标志位
INC    R1
DJNZ   R2,LP          ;6次是否 发送完毕
SETB   P3.7                 ;显示数据
LK3:            JB     P2.4,LK6         
ACALL  D10MS
JB     P2.4,LK3         
ACALL  D2S
LK4:            JB     P2.4,LK3          ;调整分钟(十位)
CLR    P2.0                 ;显示分钟十位数据
MOV    P1,40H
SETB   P2.0
ACALL  D2S                  ;调用延时程序
INC    40H                  ;将十位加1
MOV    A,40H
CJNE   A,#0AH,LK4    ;十到了没有
MOV    40H,#00H
AJMP   LK4
LK6:            JB     P2.5,LK5            
ACALL  D10MS
JB     P2.5,LK6
ACALL  D2S
LK7:            JB     P2.5,LK6              ; 调分钟(个位)
CLR    P2.1                  ;显示分钟个位数据
MOV    P1,41H
SETB   P2.1
ACALL  D2S                  ;调用延时程序
INC    41H                   ;将个位加1
MOV    A,41H
CJNE   A,#0AH,LK7     ;十到了没有
MOV    41H,# 00H
AJMP   LK7

LK5:            JB     P2.6,LK3               ;等待启动计时
ACALL  D10MS
JB     P2.6,LK5
CLR    P2.2                   ;显示秒钟十位
MOV    P1,42H
NOP
NOP
SETB   P2.2
CLR    P2.3                   ;显示秒钟个位
MOV    P1,43H
NOP
NOP
SETB   P2.3
SETB   P0.0                   ;点亮计时指示灯
MOV    TMOD,#01H          ;定时中断初始化
MOV    TL0,#0B0H         ;送定时初值
MOV    TH0,#3CH
SETB   ET0                   ;开放定时中断
SETB   EX1                   ;开放外部中断
CLR    IT0                   ;外部中断低电平有效
SETB   TR0                   ;启动定时
MOV    R0,#14H
SJMP   $
CTCO:           JNB    P2.6,LK8           ;定时中断程序
DJNZ   R0,NEXT         ;一秒钟到了吗?
MOV    R0,#14H
DEC    43H
CLR    P2.3                  ;显示时间
MOV    P1,43H           ;显示秒钟个位
NOP
NOP
SETB   P2.3
CLR    P2.2                  ;显示秒钟十位
MOV    P1,42H
NOP
NOP
SETB   P2.2
CLR    P2.1                  ;显示分钟个位
MOV    P1,41H
NOP
NOP
SETB   P2.1


CLR    P2.0                ;显示分钟十位
MOV    P1,40H
NOP
NOP
SETB   P2.0
MOV    A,43H
CJNE   A,#00H,NEXT   ;秒钟个位回到0没有
MOV    43H,#0AH        ;秒钟个位送初值10
MOV    A,42H
CJNE   A,00H,LP3      ;秒钟十位回到0没有
MOV    42H,#05H         ;秒钟十位送初值5
MOV    A,41H
CJNE   A,#00H,LP2     ;分种个位回到0没有
MOV    41H,#09H        ;分钟个位送初值9
MOV    A,40H
CJNE   A,#00H,LP1     ;分钟十位回到0没有
CLR    P0.0               
CLR    P3.6                  ;时间到发出警备10S
ACALL  D10S
SETB   P3.6
KP11:           JB     P2.6,KP11         ;等待交换
AJMP   KP12                 ;去两队分数交换程序  
LK8:            ACALL  D10MS        
JB     P2.6,CTCO        ;计时暂停处理
CLR    P0.0
LK9:            JNB    P2.6,LK9          ;等待键按下
KL10:           JB     P2.6,LK10         ;等待键放开
SETB   P0.0                 ;继续计时
AJMP   CTCO
P3:             DEC    42H                  ;将秒钟十位减1 
AJMP   NEXT
LP1:            DEC    40H                  ;将分钟十位减1
AJMP   NEXT
LP2:            DEC    41H                  ;将分钟个位减1
NEXT:           MOV    TL0,#0B0H        ;定时中断送初值返回
MOV    TH0,#3CH
RETI
KP12:           MOV    A,33H          ;甲乙两队交换分数
XCH    A,36H           
MOV    33H,A
MOV    A,34H
XCH    A,37H
MOV    34H,A
MOV    A,35H
XCH    A,38H
MOV    35H,A
AJMP   mp                  ;返回显示交换后的分数
CXT:            JNB    P3.5,KP1            ;甲队+1
JNB    P3.4,KP2            ;甲队-1
JNB    P0.2,KP3            ;乙队+1
JNB    P0.1,KP4            ;乙队-1
AJMP   KP
KP1:            JNC    36H                 ;甲队+1程序
MOV    A,36H
CJNE   A,#0AH,KP5
MOV    36H,#00H
INC    37H
MOV    A,37H
CJNE   A,#0AH,KP5
MOV    37H,#00H
INC    38H
AJMP   KP5
KP2:            MOV    A,36H             ;甲队-1程序
CJNE   A,#00H,AP1
MOV    36H,#09H
DEC    37H
AJMP   KP5
AP1:            DEC    36H
AJMP   KP5
KP3:            INC    33H              ;乙队+1程序
MOV    A,33H
CJNE   A,#0AH,KP5
MOV    33H,#00H
INC    34H
MOV    A,34H
CJNE   A,#0AH,KP5
MOV    A,34H
CJNE   A,# 0AH,KP5
MOV    34H,#00H
INC    35H
AJMP   KP5
KP4:            MOV    A,33H          ;乙队-1程序
CJNE   A,#00H,AP2
MOV    34H,#09H
DEC    35H
AJMP   KP5
AP2:            DEC    34H


KP5:            CLR    P3.7            ;显示分数
MOV    R1,#33H
MOV    R2,#06H
LP6:            MOV    A,@R1
MOV    DPTR,#TAB        ;查找显示数据
MOVC   A,@A+DPTR
MOV    SBUF,A           ;通过串行口发送显示
JNB    TI,$             ;串行口是否发送完毕
CLR    TI               ;串行口标志清0
INC    R1
DJNZ   R2,L             ;6次是否发送完毕
SETB   P3.7
KP6:            JNB    P3.3,KP6
KP:             RETI
TAB:            DB     3FH, 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H  ;显示字
D10S:           MOV    50H,#05H        ;延时程序10S
D2S:            MOV    R3,#0AH        ;延时程序2S
D200MS:         MOV    R7,#14H
D10MS:          MOV    R6,#05H
LOOP3:          MOV    R5,#0F9H
NOP
NOP
LOOP2:          DJNZ   R5,LOOP2
DJNZ   R6,LOOP3
DJNZ   R7,D10MS
DJNZ   R3,D200MS
DJNZ   50H,D2S
RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -