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

📄 calendari.asm

📁 万历年日历 可显示年、月、日、时、分、秒等参数
💻 ASM
字号:
T_CLK     Bit P1.5               ;实时时钟时钟线引脚
T_IO      Bit P1.4                ;实时时钟数据线引脚
T_RST     Bit P1.3               ;实时时钟复位线引脚
DIN       BIT P1.0               ;MAX7219端口定义-
CLK       BIT P1.2
LOAD      BIT P1.1
SECOND    EQU 50H            ;秒寄存器
MINUTE    EQU 51H            ;分
HOUR      EQU 52H            ;时
DAY       EQU 53H            ;日
MONTH     EQU 54H            ;月
WEEK      EQU 55H            ;星期
YEAR      EQU 56H            ;年
COMMAN    DATA  40H          ;控制字
BITCNT    DATA  41H          ;计数器
REDCNT    DATA  42H
ADRESS    DATA  43H          ;调节地址
      ORG  0000H
      AJMP MAIN
      ORG  0030H
MAIN: MOV SP,#70H
      LCALL DISPLAY         ;初始化MAX7219显示
      LCALL SETI            ;初始化DS1302
MAIN1:AJMP KEY              ;键盘扫描
QITA: LCALL READ_B          ;读DS1302
      LCALL DEAL            ;数据处理
      LCALL PLAY            ;显示
      AJMP  MAIN1
SETI: LCALL CLKK            ;初始化
      MOV COMMAN,#8EH       ;控制
      LCALL SEND_B          ;发送数据
      MOV COMMAN,#00H       ;WP=0
      LCALL SEND_B
      MOV COMMAN,#81H       ;读秒地址内容
      LCALL SEND_B
      LCALL SEND_O
      MOV B,A
      MOV COMMAN,#80H       ;写入秒地址内容
      LCALL SEND_B
      MOV COMMAN,B
      LCALL SEND_B
      MOV COMMAN,#90H       ;充电
      LCALL SEND_B
      MOV COMMAN,#0A5H
      LCALL SEND_B
      RET
KEY: JNB P2.0,KEY1           ;修改时间
     AJMP  QITA
KEY1:MOV ADRESS,#83H
KEY2:JNB P2.1,QITA          ;确定  返回
     JNB P2.2,KEYS          ;上 / 加
     JNB P2.3,KEYX          ;下 / 减
     JNB P2.4,KEYZ          ;左
     JNB P2.5,KEYY          ;右
     LCALL READ_B
     LCALL DEAL             ;数据处理
     LCALL PLAY             ;显示
     AJMP KEY2
     RET
KEYZ:MOV  A,ADRESS          ;左
     INC A
     INC A
     CJNE A,#8DH,KEYZ1
     MOV A,#83H
KEYZ1:MOV  ADRESS,A
     AJMP KEY2
KEYY:MOV  A,ADRESS         ;右
     DEC A
     DEC A
     CJNE A,#81H,KEYY1
     MOV A,#8DH
KEYY1:MOV  ADRESS,A
     AJMP KEY2
KEYS:MOV COMMAN,ADRESS     ;加
     LCALL SEND_B
     NOP
     LCALL SEND_O
     INC A
     MOV B,A
     MOV A,ADRESS
     DEC A
     MOV COMMAN,A
     LCALL SEND_B
     MOV COMMAN,B
     LCALL SEND_B
     AJMP KEY2
KEYX:MOV COMMAN,ADRESS     ;加
     LCALL SEND_B
     NOP
     LCALL SEND_O
     DEC A
     MOV B,A
     MOV A,ADRESS
     DEC A
     MOV COMMAN,A
     LCALL SEND_B
     MOV COMMAN,B
     LCALL SEND_B
     AJMP KEY2
READ_B:MOV REDCNT,#7          ;读数据子程序
       MOV R0,#81H            ;秒地址
       MOV R1,#50H
READ_1:CALL CLKK
       MOV COMMAN,R0
       CALL SEND_B
       NOP
       CALL SEND_O
       MOV @R1,A
       INC  R0
       INC  R0
       INC  R1
       SETB T_CLK
       CLR T_RST
       DJNZ REDCNT,READ_1
       RET
WRITE: MOV REDCNT,#7          ;写数据子程序
       MOV R0,#80H
       MOV R1,#50H
WRITE1:CALL CLKK
       MOV COMMAN,R0
       CALL SEND_B
       MOV COMMAN,@R1
       CALL SEND_B
       INC R0
       INC R0
       INC R1
       SETB T_CLK
       CLR  T_RST
       DJNZ REDCNT,WRITE1
       RET
SEND_O:MOV R4, #8            ;读一个字节
Outbit:MOV C, T_IO
       RRC A
       SETB T_CLK
       NOP
       CLR T_CLK
       DJNZ R4, Outbit
       RET
SEND_B:MOV A,COMMAN          ;写一个字节
       MOV BITCNT,#8
SEND_1:RRC A
       MOV T_IO,C
       NOP
       SETB T_CLK
       NOP
       CLR  T_CLK
       DJNZ  BITCNT,SEND_1
       RET
CLKK:  CLR T_RST
       NOP
       CLR T_CLK
       NOP
       SETB T_RST
       RET
DISPLAY:MOV A,#0BH            ;MAX7219初始化子程序
        MOV B,#07H
        LCALL W_7219
        MOV A,#09H
        MOV B,#0FFH
        LCALL W_7219
        MOV A,#0AH
        MOV B,#0FH
        LCALL W_7219
        MOV A,#0CH
        MOV B,#01H
        LCALL W_7219
        RET
PLAY:  JNB P2.6,PLA1            ;MAX7219显示子程序
       MOV R1,#68H
       AJMP PLA2
PLA1:  MOV R1,#60H
PLA2:  MOV R4,#01H
       MOV R3,#08H
C_DISP:MOV A,@R1
       MOV B,A
       MOV A,R4
       LCALL W_7219
       INC R1
       INC R4
       DJNZ R3,C_DISP
       RET
W_7219:CLR LOAD              ;发送一个字节到MAX7219
       LCALL SD_7219
       MOV A,B
       LCALL SD_7219
       SETB LOAD
       RET
       SD_7219:
       MOV R5,#08H
       C_SD:
       NOP
       CLR CLK
       RLC A
       MOV DIN,C
       NOP
       SETB CLK
       DJNZ R5,C_SD
       RET
;--------数据处理,将50H-57H内容个.十位送入60H-6DH---------
DEAL:MOV R1,#50H             ;秒 分
     MOV R0,#60H
     CALL DEL
     CALL DEL2               ;时
     MOV R1,#55H             ;星期
     MOV R0,#66H
     CALL DELE
     CALL DEL3               ;日
     MOV R1,#54H             ;月
     MOV R0,#6AH
     CALL DELE
     MOV R1,#56H             ;年
     MOV R0,#6CH
     CALL DELE
     MOV 6EH,#00H
     MOV 6FH,#02H
     RET
DEL3:MOV R1,#53H             ;日
     MOV R0,#68H
     MOV A,@R1
     MOV B,A
     ANL A,#0FH
     ANL B,#30H
DEL4:MOV @R0,A
     INC R0
     MOV A,B
     SWAP A
     MOV @R0,A
     RET
DEL2:MOV R1,#52H            ;小时
     MOV R0,#64H
     MOV B,@R1
     MOV A,B
     ANL A,#80H
     JZ DELM1
     MOV A,B
     ANL A,#0FH
     ANL B,#10H
     CALL DEL4
     AJMP XX
DELM1:MOV A,B
      ANL A,#0FH            ;分离高低位
      ANL B,#30H
      CALL DEL4
XX:   RET
DEL: MOV R7,#02H
DEL1:MOV A,@R1
     MOV B,A
     ANL A,#0FH
     ANL B,#0F0H
     MOV @R0,A
     INC R0
     MOV A,B
     SWAP A
     MOV @R0,A
     INC R0
     INC R1
     DJNZ R7,DEL1
     RET
DELE:MOV R7,#01H
     CALL DEL1
     RET
     END


⌨️ 快捷键说明

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