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

📄 电子钟.txt

📁 可实现具有设置时间、设定闹钟、具有闰年判断、显示日期等功能的电子钟。
💻 TXT
字号:
            CODE SEGMENT
ASSUME CS:CODE
INTPORT1 EQU 0020H          ;8253控制寄存器地址
INTPORT2 EQU 0021H
INTQ3	 EQU INTREEUP3
CONTPORT EQU 00DFH
DATAPORT EQU 00DEH
KZZ EQU 73H     ;8255控制字寄存器地址
BDZ EQU 71H     ;B口地址

ORG 1000H
START:	JMP Tint1

DATA0 DB 40H,77H,00H,00H,00H,00H,00H,00H
DATA1 DB 40H,73H,00H,00H,00H,00H,00H,00H

RIQI  DB 00H,00H,00H,00H,00H,00H,00H,00H

NAOZ0 DB 40H,77H,40H,00H,00H,40H,00H,00H
NAOZ1 DB 40H,73H,40H,00H,00H,40H,00H,00H

DATA  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
      DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H


Tint1:  MOV DX,004BH                    ;8253定时器初始化
	MOV AL,0B6H                     ;设置定时器2工作于方式3
	OUT DX,AL

	MOV DX,004AH                    ;写计数初值 0C350
	MOV AL,50H                      ;计数初值低位
	OUT DX,AL
	MOV AL,0C3H                     ;计数初值高位
	OUT DX,AL

        CLD                              ;写中断 8259
        MOV AX,0H
	MOV DS,AX
	MOV AX,0H
	MOV ES,AX
        MOV DI,002CH                     ;IRQ3向量地址
	LEA AX,INTQ3
	STOSW
	MOV AX,CS
	STOSW

	MOV AL,13H                       ;初始化命令字
	MOV DX,INTPORT1                  ;ICW1         1
	OUT DX,AL
	MOV AL,08H                       ;ICW2
	MOV DX,INTPORT2                 
	OUT DX,AL
	MOV AL,00001101B                ;ICW4
	OUT DX,AL
	MOV AL,0F7H                     ;操作字命令字OCW1,开放IRQ3
	OUT DX,AL

        MOV BYTE PTR DS:[0620H],0CH     ;存放功能按键值
	MOV BYTE PTR DS:[0621H],03H     ;设置闰年标志位
        MOV BYTE PTR DS:[0600H],00H     ;设置上下午标志位
	MOV BYTE PTR DS:[0601H],00H	;存放20次中断计数
        MOV BYTE PTR DS:[0602H],57      ;S
        MOV BYTE PTR DS:[0603H],59      ;M
        MOV BYTE PTR DS:[0604H],11      ;H

        MOV BYTE PTR DS:[0605H],12     ;日
        MOV BYTE PTR DS:[0606H],12     ;月
        MOV BYTE PTR DS:[0607H],07      ;年低字节
        MOV BYTE PTR DS:[0608H],20     ;年高字节

        MOV BYTE PTR DS:[0612H],00H     ;闹钟秒
        MOV BYTE PTR DS:[0609H],00H     ;闹钟分
        MOV BYTE PTR DS:[0610H],01H     ;闹钟时
        MOV BYTE PTR DS:[0611H],01H     ;闹钟上下午
	STI
WATING: JMP WATING



INTREEUP3:MOV AH,BYTE PTR DS:[0612H]
          CMP BYTE PTR DS:[0602H],AH   ;     闹钟判断
          JNE KAISHI
          MOV AH,BYTE PTR DS:[0609H]
          CMP BYTE PTR DS:[0603H],AH   ;     闹钟判断
          JNE KAISHI
          MOV AH,BYTE PTR DS:[0610H]
          CMP BYTE PTR DS:[0604H],AH     ;
          JNE KAISHI
          MOV AH,BYTE PTR DS:[0611H]
          CMP BYTE PTR DS:[0600H],AH    ;
          JNE KAISHI
          JMP NAOLING

   KAISHI:JMP SJXS

GONGYONG: ADD BYTE PTR DS:[0601H],01H   ;此代码上下午公用,计时的主体
          CMP BYTE PTR DS:[0601H],19    ;20*50000 用于产生一秒
          JA MIAO
	  JMP INTRE1                    ;小于等于时转移

    MIAO: MOV BYTE PTR DS:[0601H],00H   ;秒
      MJY:ADD BYTE PTR DS:[0602H],01H
          CMP BYTE PTR DS:[0602H],59
          JA FEN
	  JMP INTRE1

         FEN: MOV BYTE PTR DS:[0602H],00H   ;分
      FJY:ADD BYTE PTR DS:[0603H],01H
          CMP BYTE PTR DS:[0603H],59
          JA SHI
	  JMP INTRE1

       SHI:MOV BYTE PTR DS:[0603H],00H     ;时

      SJY: ADD BYTE PTR DS:[0604H],01H
           CMP BYTE PTR DS:[0604H],12
           JE SX2
	   JMP INTRE1
       SX2:MOV BYTE PTR DS:[0604H],00H
      SXW:ADD BYTE PTR DS:[0600H],01H   ;置上下午标志位
          CMP BYTE PTR DS:[0600H],01H
          JA RI
	  JMP INTRE1
         RI: MOV BYTE PTR DS:[0600H],00H    ;日
      RJY:ADD BYTE PTR DS:[0605H],01H

          CMP BYTE PTR DS:[0606H],2      ;月为2时为28天,闰年时为29天
	  JE XXXT
          CMP BYTE PTR DS:[0606H],4      ;月为4、6、9、11时30天
	  JE XT
	  CMP BYTE PTR DS:[0606H],6
	  JE XT
	  CMP BYTE PTR DS:[0606H],9
	  JE XT
	  CMP BYTE PTR DS:[0606H],11
	  JE XT

          CMP BYTE PTR DS:[0605H],31
	  JBE INTRE1
       XT:CMP BYTE PTR DS:[0605H],30
	  JBE INTRE1
      XXT:
          CMP BYTE PTR DS:[0605H],29
	  JBE INTRE1
          MOV BYTE PTR DS:[0621H],00
          JMP TAO
     XXXT:CMP BYTE PTR DS:[0621H],04
          JE XXT
          CMP BYTE PTR DS:[0605H],28
	  JBE INTRE1

      TAO:MOV BYTE PTR DS:[0605H],01H     ;月的第一天
      YJY:ADD BYTE PTR DS:[0606H],01H
          CMP BYTE PTR DS:[0606H],12
	  JBE INTRE1

          MOV BYTE PTR DS:[0606H],01H     
      NJY:ADD BYTE PTR DS:[0607H],01H     ;年低字节
          ADD BYTE PTR DS:[0621H],01H     ;闰年标志位加1,当加到4时清零
          CMP BYTE PTR DS:[0621H],05
          JBE FR

       FR:CMP BYTE PTR DS:[0607H],99
          JBE INTRE1

          MOV BYTE PTR DS:[0607H],00H     ;年高字节
     NGJY:ADD BYTE PTR DS:[0608H],01H
          CMP BYTE PTR DS:[0608H],20
          JBE INTRE1

          MOV BYTE PTR DS:[0608H],19

INTRE1:   MOV AL,20H               ;中断结束              
                                   ;如果ICW4为00001011B
	  MOV DX,INTPORT1          ;OCW2命令可以不写,因为20H命令字就是EOI置1
	  OUT DX,AL
	  STI
	  IRET


CONVERS:AAM                        ;改变DATA数组值
        MOV BH,0H
        MOV BL,AL
	MOV AL,[BX+DATA]
        MOV [DI],AL
        INC DI
        MOV BH,0H
        MOV BL,AH
	MOV AL,[BX+DATA]
        MOV [DI],AL
	RET



SJXS:MOV DX,00DFH                        ;时间显示
         IN  AL,DX
      AND AL,01H
      JZ   PDGN
      MOV CX,0FFFH
     D:LOOP D                                   ; 为数模信号转换提供输出延时
      MOV DX,00DEH
      IN AL,DX                                        ; 时间

      CMP AL,0CH                  ;〉=C的按键是功能键
      JB TSJ                     ;小于0C时跳过存储功能键,转调时间
      MOV BYTE PTR DS:[0620H],AL  ;将按键值存入功能判断单元

  TSJ: CMP AL,01H
       JNE TSJ0
      JMP MJY              ;秒加一
   TSJ0:CMP AL,02H
      JNE TSJ1
      JMP FJY              ;分加一
   TSJ1:CMP AL,03H
      JNE TSJ2
      JMP SJY              ;时加一
   TSJ2:CMP AL,04H
      JNE TRQ
      JMP SXW              ;调上下午

   TRQ: CMP AL,05H          ;调日期 
       JNE TRQ0
      JMP RJY               ;日加一
   TRQ0:CMP AL,06H
      JNE TRQ1
      JMP YJY               ;月加一
   TRQ1:CMP AL,07H
      JNE TNZ
      JMP NJY

   TNZ: CMP AL,08H           ;设闹钟
       JNE TNZ0
      JMP NZFJY               ;分加一
   TNZ0:CMP AL,09H
      JNE TNZ1
      JMP NZSJY                ;时加一
   TNZ1:CMP AL,0AH
      JNE NZT
      JMP NZSXW                 ;设上下午
   NZT:CMP AL,0BH               ;闹钟停止
      JNE PDGN
       JMP NAOLINGT



PDGN:CMP BYTE PTR DS:[0620H],0CH     ;按下C键显示时间
     JE PDSHX
     CMP BYTE PTR DS:[0620H],0DH     ;按下D键显示日期
     JNE NZH
     JMP XSRQ
NZH:CMP BYTE PTR DS:[0620H],0EH    ;按下E键后显示闹钟
     JNE PDSHX
     JMP XSNZ


   PDSHX:CMP BYTE PTR DS:[0600H],01H   ;判断上下午标志位
          JNE SHWU
          JMP XIAWU             ;01时跳转执行下午
SHWU:     CLI
          MOV SI,0602H
          LEA DI,DATA0+2
	  MOV AL,[SI]
	  CALL CONVERS
          MOV SI,0603H
          LEA DI,DATA0+4
	  MOV AL,DS:[SI]
	  CALL CONVERS
          MOV SI,0604H
          LEA DI,DATA0+6
	  MOV AL,DS:[SI]
	  CALL CONVERS
   	  CALL LEDDISP             ;调用显示
          JMP GONGYONG
          RET

XIAWU:    CLI
          MOV SI,0602H
          LEA DI,DATA1+2
	  MOV AL,[SI]
	  CALL CONVERS
          MOV SI,0603H
          LEA DI,DATA1+4
	  MOV AL,DS:[SI]
	  CALL CONVERS
          MOV SI,0604H
          LEA DI,DATA1+6
	  MOV AL,DS:[SI]
	  CALL CONVERS
   	  CALL LEDDISP
          JMP GONGYONG
          RET

LEDDISP:MOV AL,90H
	MOV DX,00DFH                ;CONTPORT
	OUT DX,AL
        MOV SI,0                     ;SI初始化
        MOV DX,00DEH

        CMP BYTE PTR DS:[0600H],01H   ;判断上下午标志位,置位时,执行下午代码
        JE LEDXIAWU

LEDSHWU:MOV AL,[SI+DATA0]             ;上午时间显示
        OUT DX,AL
        INC SI
        CMP SI,8
        JB  LEDSHWU
        JMP LEDD

LEDXIAWU:MOV AL,[SI+DATA1]            ;下午时间显示
        OUT DX,AL
        INC SI
        CMP SI,8
        JB  LEDXIAWU
LEDD:   RET                           ;公用的返回



XSRQ:     CLI                          ;显示日期主体程序
          MOV SI,0605H
          LEA DI,RIQI
	  MOV AL,[SI]
	  CALL CONVERS
          MOV SI,0606H
          LEA DI,RIQI+2
	  MOV AL,DS:[SI]
	  CALL CONVERS
          MOV SI,0607H
          LEA DI,RIQI+4
	  MOV AL,DS:[SI]
	  CALL CONVERS
	  MOV SI,0608H
          LEA DI,RIQI+6
	  MOV AL,DS:[SI]
	  CALL CONVERS
   	  CALL LEDDRIQI
   	  JMP GONGYONG
   	  RET
   LEDDRIQI:MOV AL,90H
	MOV DX,00DFH                 ;CONTPORT
	OUT DX,AL
        MOV SI,0
        MOV DX,00DEH
  LEDRQ:MOV AL,[SI+RIQI]             ;日期显示
        OUT DX,AL
        INC SI
        CMP SI,8
        JB  LEDRQ
        RET


XSNZ:     CMP BYTE PTR DS:[0611H],01H   ;判断上下午标志位(显示闹钟)
          JE NZXW                    ;置位时跳转执行下午

          CLI                         ;闹钟上午
          MOV SI,0609H
          LEA DI,NAOZ0+3
	  MOV AL,[SI]
	  CALL CONVERS
          MOV SI,0610H
          LEA DI,NAOZ0+6
	  MOV AL,DS:[SI]
	  CALL CONVERS
   	  CALL LEDNAOZ
   	  JMP GONGYONG
   	  RET


NZXW:     CLI                        ;闹钟下午
          MOV SI,0609H
          LEA DI,NAOZ1+3
	  MOV AL,[SI]
	  CALL CONVERS
          MOV SI,0610H
          LEA DI,NAOZ1+6
	  MOV AL,DS:[SI]
	  CALL CONVERS
   	  CALL LEDNAOZ
   	  JMP GONGYONG
   	  RET
LEDNAOZ:MOV AL,90H
	MOV DX,00DFH                  ;CONTPORT
	OUT DX,AL
        MOV SI,0
        MOV DX,00DEH

        CMP BYTE PTR DS:[0611H],01H   ;判断上下午标志位,置位时,执行下午代码
        JE LEDNZXW

LEDNZSW:MOV AL,[SI+NAOZ0]             ;上午时间显示
        OUT DX,AL
        INC SI
        CMP SI,8
        JB  LEDNZSW
        JMP LEDD1

LEDNZXW:MOV AL,[SI+NAOZ1]            ;下午时间显示
        OUT DX,AL
        INC SI
        CMP SI,8
        JB  
LEDNZXW
LEDD1:  RET

       NZFJY:ADD BYTE PTR DS:[0609H],01H    ;闹钟分+1
          CMP BYTE PTR DS:[0609H],59
          JA NZS
	  JMP GONGYONG

     NZS: MOV BYTE PTR DS:[0609H],00H    ;闹钟时+1
    NZSJY:ADD BYTE PTR DS:[0610H],01H
          CMP BYTE PTR DS:[0610H],12
          JA NZSX
	  JMP GONGYONG

    NZSX: MOV BYTE PTR DS:[0610H],01H
    NZSXW:ADD BYTE PTR DS:[0611H],01H   ;置闹钟上下午标志位
          CMP BYTE PTR DS:[0611H],01H
          JA QINGL
	  JMP GONGYONG

  QINGL: MOV BYTE PTR DS:[0611H],00H      ;闹钟上下午标志清零
          JMP GONGYONG
          RET

NAOLING:MOV AL,80H                        ;8255方式0                      
        MOV DX,KZZ
        OUT DX,AL
        MOV AL,0000H                      ;送数据至B口
        MOV DX,BDZ
        OUT DX,AL
        JMP KAISHI
    RET
NAOLINGT:MOV AL,80H
        MOV DX,KZZ
        OUT DX,AL
        MOV AL,0FFFFH
        MOV DX,BDZ
        OUT DX,AL
        JMP KAISHI
    RET


CODE ENDS
END  START

⌨️ 快捷键说明

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