📄 calendari.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 + -