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

📄 正计时倒计时秒表.txt

📁 基于8051芯片的电子秒表设计
💻 TXT
字号:
   LOAD BIT P1.2
    DIN  BIT P1.0
    DCLK BIT P1.1
    DOUT BIT P3.3
    KEYF BIT 00H

    ST   EQU 21H
    KEY  EQU 22H
    KD   EQU 23H
    
    MIH  EQU 30H
    MIL  EQU 31H
    SEH  EQU 32H
    SEL  EQU 33H
    MSH  EQU 34H
    MSL  EQU 35H

    ORG 0000H
    LJMP MAIN
    ORG 0013H
    LJMP CH451INT1
    ORG 000BH
    LJMP INT_0   
    ORG 001BH
    LJMP INT_1
    ORG 0100H
MAIN:MOV SP,#60H     
     MOV ST,#0
     CLR KEYF
     MOV KD,#0
     ACALL CH451_INT
     MOV MIH,#0
     MOV MIL,#0
     MOV SEH,#0
     MOV SEL,#80H
     MOV MSH,#0
     MOV MSL,#0
     MOV TMOD,#11H
     MOV DPTR,#56318
     MOV TH0,DPH
     MOV TL0,DPL
     MOV TH1,DPH
     MOV TL1,DPL
     
ML0: LCALL SS
     LCALL DISPLAY
     NOP
     JNB KEYF,ML0
     CLR KEYF
     MOV DPTR,#STAB
     MOV A,ST
     MOV B,#8
     MUL AB
     ADD A,DPL
     MOV DPL,A
     MOV A,B
     ADDC A,DPH
     MOV DPH,A
     MOV A,KD
     RL A
     MOV R0,A
     MOVC A,@A+DPTR
     MOV ST,A
     MOV A,R0
     INC A
     MOVC A,@A+DPTR
     MOV B,#3
     MUL AB
     MOV DPTR,#TASK
     JMP @A+DPTR
TASK:LJMP P_0  ;清0
     LJMP P_1  ;正向计 
     LJMP P_2   ;停止
     LJMP P_3
     LJMP P_4
     LJMP P_5
     LJMP P_6
     LJMP P_7
     LJMP P_8
     LJMP P_9
;正向计时
P_1:
    SETB EA
    SETB ET0
    SETB TR0
    LJMP ML0
;停止
P_2:CLR TR1
    CLR TR0
    LCALL DISPLAY
    LJMP ML0
;清0
P_0:MOV MIH,#0
    MOV MIL,#0
    MOV SEH,#0
    MOV SEL,#80H
    MOV MSH,#0
    MOV MSL,#0
    LCALL DISPLAY
    LJMP ML0

DISPLAY:MOV R1,#MIH
        MOV B,#08H
DISPLAY0:MOV A,@R1
LCALL WRITE_CH451
INC B
INC R1
MOV A,R1
CJNE A,#36H,DISPLAY0
RET
STAB:DB 1,1,5,5,0,8,0,8
     DB 2,2,1,8,1,8,1,8
     DB 0,0,2,8,2,8,2,8
     DB 1,1,5,5,3,8,3,8
     DB 6,9,3,8,4,8,4,8
     DB 5,8,4,4,5,6,5,7
     DB 4,2,6,8,6,8,6,8
GETKD:MOV A,KEY
      CJNE A,#43H,OUT1
      MOV A,#3
      MOV KD,A
      SETB KEYF
 OUT1:CJNE A,#42H,OUT2
      MOV A,#2
      MOV KD,A
      SETB KEYF
 OUT2:CJNE A,#41H,OUT3
      MOV A,#1
      MOV KD,A
      SETB KEYF
 OUT3:CJNE A,#40H,OUT4
      MOV A,#0
      MOV KD,A
      SETB KEYF
OUT4:RET

INT_0:PUSH PSW
     PUSH ACC
     MOV DPTR,#56318
     MOV TH0,DPH
     MOV TL0,DPL
MS0: INC MSL
     MOV A,MSL
     CJNE A,#10,IOUT
     MOV MSL,#0
MS1: INC MSH
     MOV A,MSH
     CJNE A,#10,IOUT
     MOV MSH,#0
SE0: INC SEL
     MOV A,SEL
     CJNE A,#8AH,IOUT
     MOV SEL,#80H
SE1: INC SEH
     MOV A,SEH
     CJNE A,#6,IOUT
     MOV SEH,#0
MI0: INC MIL
     MOV A,MIL
     CJNE A,#10,IOUT
     MOV MIL,#0
MI1: INC MIH
     MOV A,MIH
     CJNE A,#10,IOUT
     MOV MIH,#0
IOUT:POP ACC
     POP PSW
     RETI
;正向
P_3:MOV B,#0110B
    MOV A,#00000000B
    LCALL WRITE_CH451
    MOV MIH,#0
    MOV MIL,#0
    MOV	SEH,#0
    MOV SEL,#80H
    MOV MSH,#0
    MOV MSL,#0
    LCALL DISPLAY
    LJMP ML0
;倒向
P_4:MOV B,#0110B
    MOV A,#00000000B
    LCALL WRITE_CH451
    LCALL DISPLAY
    LJMP ML0
;调时
P_5:
    MOV B,#0110B
    MOV A,#00001000B
    LCALL WRITE_CH451
    LCALL DISPLAY
    LJMP ML0
;+1
P_6:
    MOV R0,SEL
    INC R0
    MOV SEL,R0
    MOV A,SEL
    CJNE A,#8AH,S2
    MOV SEL,#80H
    MOV R1,SEH
    INC R1
    MOV SEH,R1
    MOV A,SEH
    CJNE A,#6,S2
    MOV SEH,#0
    MOV R2,MIL
    INC R2
    MOV MIL,R2
    MOV A,MIL
    CJNE A,#10,S2
    MOV MIL,#0
    MOV R3,MIH
    INC R3
    MOV MIH,R3
    MOV A,MIH
    CJNE A,#10,S2
    MOV MIH,#0
    
S2:LCALL DISPLAY
    LJMP ML0
;-1
P_7:MOV A,SEL
    MOV R0,SEL
    DEC R0
    MOV SEL,R0
    CJNE A,#80H,S21
    MOV SEL,#89H
    MOV A,SEH
    MOV R1,SEH
    DEC R1
    MOV SEH,R1
    CJNE A,#0,S21
    MOV SEH,#5
    MOV A,MIL
    MOV R2,MIL
    DEC R2
    MOV MIL,R2
    CJNE A,#0,S21
    MOV MIL,#9
    MOV A,MIH
    MOV R3,MIH
    DEC R3
    MOV MIH,R3
    CJNE A,#0,S21
    MOV MIH,#9
S21:LCALL DISPLAY
    LJMP ML0

;null
P_8:LJMP ML0


;初始化CH451
CH451_INT:     MOV  P1,#60H ;禁止其它芯片
     CLR     DIN    ;先低后高 
     SETB    DCLK  ;置为默认的高电平
     SETB    DIN    ;输出上升沿CH451选择4线串行接口
     SETB    LOAD  ;为加载数据作准备
     SETB    DOUT  ;默认是高电平
     MOV     B,#04H ;设置CH451系统参数
     MOV     A,#03H ;关看门狗开显示键盘
     LCALL   WRITE_CH451;写入命令字
     MOV B,#05H
     MOV A,#80H
     LCALL   WRITE_CH451
     NOP
     CLR     IT1     ;置外部中断信号为低电平触发
     CLR     IE1     ;清中断标志 
     SETB    PX1    ;置高优先级
     SETB    EX1    ;允许键盘中断 
     SETB    EA     ;开总中断
     RET
;写入
WRITE_CH451:PUSH    ACC 
              CLR      EX1          ;禁止键盘中断
              CLR      LOAD        ;命令开始
              MOV     R7,#08H     ;将ACC中的8位送出
WRITE_8:     RRC       A            ;低位在前,高位在后
              CLR       DCLK        ;为输入数据作准备
              MOV      DIN,C       ;送出一位数据
              SETB      DCLK        ;产生上升沿通知CH451输入位数据 
     	      DJNZ      R7,WRITE_8   ;位数据未完继续
     	      MOV       A,B 
     	      MOV       R7,#04H      ;将B中的4位数据送出
WRITE_4:     RRC       A              ;低位在前,高位在后
     	      CLR       DCLK          ;为输入数据作准备
     	      MOV      DIN,C         ;送出一位数据
     	      SETB      DCLK          ;产生上升沿通知CH451输入位数据
     	      DJNZ      R7,WRITE_4   ;位数据未完继续
     	      SETB      LOAD    ;产生加载上升沿通知CH451处理命令数据
     	      SETB      EX1          ;准许键盘中断 
     	      POP       ACC 
     	      RET 

CH451INT1:PUSH PSW
          PUSH ACC
          CLR EX1
          CLR LOAD
          MOV A,#0F7H
INTER4:   SETB C
          RRC A
          CLR DCLK
          MOV DIN,C
          SETB DCLK
          CJNE A,#0FFH,INTER4
          SETB LOAD
          MOV A,#0FCH
INTER7:   MOV C,DOUT
          CLR DCLK
          RLC A
          SETB DCLK
          JC INTER7
          MOV KEY,A
          ACALL GETKD
          POP ACC
          POP PSW
          SETB EX1
          CLR IE1
          RETI
;倒向计时
P_9:MOV R6,#01H
SETB EA 
    SETB ET1
    SETB TR1

LJMP ML0


INT_1:PUSH PSW
     PUSH ACC   
     MOV DPTR,#56318
     MOV TH1,DPH
     MOV TL1,DPL
     MOV A,MSL
     DEC MSL
     CJNE A,#0,AOUT
     MOV MSL,#9   
     MOV A,MSH
     DEC MSH
     CJNE A,#0,AOUT
     MOV MSH,#9  
     MOV A,SEL
     DEC SEL
     CJNE A,#80H,AOUT
     MOV SEL,#89H  
     MOV A,SEH
     DEC SEH
     CJNE A,#0,AOUT
     MOV SEH,#5     
     MOV A,MIL
     DEC MIL
     CJNE A,#0,AOUT
     MOV MIL,#9     
     MOV A,MIH
     DEC MIH
     CJNE A,#0,AOUT
     MOV MIH,#9 
AOUT: POP ACC
     POP PSW   
     RETI
SS: 
    CJNE R6,#01H,SK
    MOV R0,MSL
    MOV R1,MSH
    MOV R2,SEL
    MOV R3,SEH
    MOV R4,MIL
    MOV R5,MIH
    CJNE R0,#0,SK
    CJNE R1,#0,SK
    CJNE R2,#80H,SK 
    CJNE R3,#0,SK
    CJNE R4,#0,SK
    CJNE R5,#0,SK
    CLR TR1
    CLR P3.7
      MOV R7,#248
      MOV R6,#60
DLY1: DJNZ R6,DLY1
      DJNZ R7,DLY1
   SETB P3.7
SK:LCALL DISPLAY
   RET
   END

⌨️ 快捷键说明

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