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

📄 dianzizhong1.asm

📁 改进的七段显示电子钟
💻 ASM
字号:
STACK  SEGMENT STACK'STACK'
       DB 1024 DUP(0)
STACK  ENDS
DATA   SEGMENT
BWORD EQU THIS BYTE
          R0 DW (?)
          R1 DW (?)
          R2 DW (?)
          R3 DW (?)
          R4 DW (?)
          R5 DW (?)
          R6 DW (?)
          R7 DW (?)
TEMP1  DW (?)
TEMP2  DW (?)
TEMP3  DW (?)
TEMP4  DW (?)
LED1    DB (?)
LED2    DB (?)
LED3    DB (?)
LED4    DB (?)
LED5    DB (?)
LED6    DB (?)
LED7    DB (?)
LED8    DB (?)
LED9    DB (?)
LED10   DB (?)
LED11   DB (?)
LED12   DB (?)
LED13   DB (?)
LED14   DB (?)
LED15   DB (?)
LED16   DB (?)
LED17   DB (?)
LED18   DB (?)
LED19   DB (?)
YEAR_REG  DB (?)
MOTH_REG  DB (?)
DATE_REG  DB (?)
S_REG     DB (?)
M_REG     DB (?)
H_REG     DB (?)



F0      DB    5fh,9,0,0
        DB    7ch,9,1,-1                                                                  
        DB    7ch,9,1,0                            
        DB    5fh,9,0,1
        DB    7ch,9,0,1
        DB    7ch,9,-1,0
        DB    5fh,0,0,-1

F1      DB    5fh,0,0,0
        DB    7ch,0,1,-1
        DB    7ch,0,1,0
        DB    5fh,0,0,1
        DB    7ch,9,0,1
        DB    7ch,9,-1,0
        DB    5fh,0,0,-1


F2      DB    5fh,9,0,0
        DB    7ch,0,1,-1
        DB    7ch,9,1,0
        DB    5fh,9,0,1
        DB    7ch,0,0,1
        DB    7ch,9,-1,0
        DB    5fh,9,0,-1

F3      DB    5fh,9,0,0
        DB    7ch,0,1,-1
        DB    7ch,0,1,0
        DB    5fh,9,0,1
        DB    7ch,9,0,1
        DB    7ch,9,-1,0
        DB    5fh,9,0,-1


F4      DB    5fh,0,0,0
        DB    7ch,9,1,-1
        DB    7ch,0,1,0
        DB    5fh,0,0,1
        DB    7ch,9,0,1
        DB    7ch,9,-1,0
        DB    5fh,9,0,-1
F5      DB    5fh,9,0,0
        DB    7ch,9,1,-1
        DB    7ch,0,1,0
        DB    5fh,9,0,1
        DB    7ch,9,0,1
        DB    7ch,0,-1,0
        DB    5fh,9,0,-1

F6      DB    5fh,0,0,0
        DB    7ch,9,1,-1                          
        DB    7ch,9,1,0
        DB    5fh,9,0,1
        DB    7ch,9,0,1
        DB    7ch,0,-1,0
        DB    5fh,9,0,-1

F7      DB    5fh,9,0,0
        DB    7ch,0,1,-1
        DB    7ch,0,1,0
        DB    5fh,0,0,1
        DB    7ch,9,0,1
        DB    7ch,9,-1,0
        DB    5fh,0,0,-1
F8      DB    5fh,9,0,0
        DB    7ch,9,1,-1
        DB    7ch,9,1,0
        DB    5fh,9,0,1
        DB    7ch,9,0,1
        DB    7ch,9,-1,0
        DB    5fh,9,0,-1

F9      DB    5fh,9,0,0
        DB    7ch,9,1,-1
        DB    7ch,0,1,0
        DB    5fh,0,0,1
        DB    7ch,9,0,1
        DB    7ch,9,-1,0
        DB    5fh,9,0,-1

DATA      ENDS

VIDEO     SEGMENT AT 0B800H
WD_BUFFER LABEL WORD
V_BUFF    DB 25*8*2 DUP(?)
VIDEO     ENDS

PROGRAM   SEGMENT
MAIN      PROC FAR
          ASSUME CS:PROGRAM,DS:DATA,SS:STACK,ES:VIDEO
START:    PUSH DS
          MOV AX,0
          PUSH AX

          MOV AX,DATA
          MOV DS,AX
          MOV AX,VIDEO
          MOV ES,AX

          MOV TEMP1,000H
          MOV TEMP2,184FH
          MOV BH,0FH
          CALL CLR_SCREEN
DO_WAIT:  MOV AH,1
          INT 16H
          JZ NO_KEY
YES_KEY:  MOV AH,0
          INT 16H
          CMP AL,1BH
          JNZ NO_KEY
          JMP EXIT
NO_KEY:   CALL READ_TIME
          CALL READ_DATE
          CALL CONVERT_ASCII
          CALL MOVE
          CALL   DISPLAY_DATE
          JMP  DO_WAIT

EXIT:     MOV TEMP1,0000H
          MOV TEMP2,184FH
          MOV BH,0FH
          CALL CLR_SCREEN
          RET
MAIN      ENDP

READ_TIME PROC NEAR
          MOV AH,02H
          INT 1AH
          MOV H_REG,CH
          MOV M_REG,CL
          MOV S_REG,DH
          RET
READ_TIME ENDP

READ_DATE PROC NEAR
          MOV AH,04H
          INT 1AH
          MOV YEAR_REG,CL
          MOV MOTH_REG,DH
          MOV DATE_REG,DL
          RET
READ_DATE ENDP 

CONVERT_ASCII PROC NEAR
          MOV AL,H_REG
          AND AL,0F0H
          MOV CL,4
          ROR AL,CL
          ADD AL,30H
          MOV LED1,AL
          MOV AL,H_REG
          AND AL,0FH
          ADD AL,30H
          MOV LED2,AL

          MOV AL,M_REG
          AND AL,0F0H
          MOV CL,4
          ROR AL,CL
          ADD AL,30H
          MOV LED4,AL
          MOV AL,M_REG
          AND AL,0F0H
          ADD AL,30H
          MOV LED5,AL

          MOV AL,S_REG
          AND AL,0F0H
          MOV CL,4
          ROR AL,CL
          ADD AL,30H
          MOV LED7,AL
          MOV AL,S_REG
          AND AL,0FH
          ADD AL,30H
          MOV LED8,AL
          MOV LED3,3AH
          MOV LED6,3AH

          MOV AL,YEAR_REG
          AND AL,0F0H
          MOV CL,4
          ROR AL,CL
          ADD AL,30H
          MOV LED12,AL
          MOV AL,YEAR_REG
          AND AL,0FH
          ADD AL,30H
          MOV LED13,AL
          MOV AL,MOTH_REG
          AND AL,0F0H
          MOV CL,4
          ROR AL,CL
          ADD AL,30H
          MOV LED15,AL
          MOV AL,MOTH_REG
          AND AL,0FH
          ADD AL,30H
          MOV LED16,AL

          MOV AL,DATE_REG
          AND AL,0F0H
          MOV CL,4
          ROR AL,CL
          ADD AL,30H
          MOV LED18,AL
          MOV AL,DATE_REG
          AND AL,0FH
          ADD AL,30H
          MOV LED19,AL
          MOV LED10,32H
          MOV LED11,30H
          MOV LED14,2DH
          MOV LED17,2DH
          RET
CONVERT_ASCII ENDP

MOVE      PROC NEAR
          
          
          
          MOV DX,8
          MOV CX,0836H
	    LEA SI,LED8
          INC SI
S:        DEC SI
          MOV BL,[SI]
          
          SUB CX,4
          CMP CX,082BH
          JZ  L6
          CMP CX,0821H
          JZ  L3
          
          CALL COMPARE
          DEC DX
          JNZ S
          JMP
L6:     LEA         BX,LED6
          MOV         CH,8
          MOV         CL,43
          MOV         AL,[BX]
          MOV         AH,9H
          CALL        DISPLAY 
          ADD         CX,1
          JMP         S
           
L3:     LEA         BX,LED3
          MOV         CH,8
          MOV         CL,33
          MOV         AL,[BX]
          MOV         AH,9H
          CALL        DISPLAY 
          ADD         CX,1         
          JMP         S       
          POP BX
          POP CX
          PUSH DX
EXIT2:    RET
MOVE      ENDP
                    

COMPARE   PROC NEAR
          
          CMP BL,30H
          JE  YELLOW
          CMP BL,31H
          JE  ONE
          CMP BL,32H
          JE  TWO
          CMP BL,33H
          JE  THREE
          CMP BL,34H
          JE  FOUR
          CMP BL,35H
          JE  FIVE
          CMP BL,36H
          JE  SIX 
          CMP BL,37H
          JE  SEVEN
          CMP BL,38H
          JE  EIGHT
          CMP BL,39H
          JE  NINE
          JMP EXIT1
YELLOW:   LEA DI,F0
          JMP W
ONE:      LEA DI,F1
          JMP W
TWO:      LEA DI,F2
          JMP W
THREE:    LEA DI,F3
          JMP W
FOUR:     LEA DI,F4
          JMP W
FIVE:     LEA DI,F5
          JMP W 
SIX:      LEA DI,F6
          JMP W
SEVEN:    LEA DI,F7
          JMP W
EIGHT:    LEA DI,F8
          JMP W
NINE:     LEA DI,F9
          JMP W
          JMP EXIT1



P:        MOV DX,7H
          
          
Z:        INC DI
W:        MOV AL,[DI]
          INC DI
          MOV AH,[DI]
          INC DI
          POP CX
          ADD CH,[DI]
          INC DI
          ADD CL,[DI]
                    
          CALL DISPLAY
          DEC DX
          JNZ Z         


EXIT1:    RET
COMPARE   ENDP
         


          

 
          

DISPLAY   PROC NEAR
          PUSH BX
          PUSH CX
          PUSH AX
          MOV AL,160
          MUL CH
          MOV BL,CL
          ROL BL,1
          MOV BH,0
          ADD BX,AX
          POP AX
          MOV ES:[WD_BUFFER+BX],AX
          POP CX
          POP BX
          RET
DISPLAY   ENDP

DISPLAY_DATE PROC NEAR
          MOV R0,10
          LEA BX,LED10
          MOV CX,0922H
DISPLAY_DATE1: MOV AL,[BX]
          MOV AH,5FH
          CALL DISPLAY
          INC CX
          INC BX
          DEC R0
          JNZ DISPLAY_DATE1
          RET
DISPLAY_DATE ENDP
         
CLR_SCREEN PROC NEAR
          MOV AH,06H
          MOV CX,TEMP1
          MOV DX,TEMP2
          INT 10H
          MOV AH,02H
          MOV DH,24
          MOV DL,80
          MOV BH,0
          INT 10H
          RET
CLR_SCREEN ENDP
PROGRAM   ENDS
          END START                             

⌨️ 快捷键说明

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