📄 shijian.asm
字号:
SEC EQU 50H
MIN EQU 51H
HOUR EQU 52H
COM EQU 20H
DAT EQU 21H
LCD_PORT EQU P1
RS EQU P3.0
RW EQU P3.1
E EQU P3.2
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP CLOCK
ORG 0100H
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P2,#0FFH
MOV SEC,#00H
MOV MIN,#58H
MOV HOUR,#21H
MOV 53H,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
LCALL INT ;初始化液晶
SETB ET0
SETB EA
START: SETB TR0
LCALL KEY
LCALL DISPLAY
LJMP START
INT: MOV COM,#3CH
LCALL LCD_W_CMD
MOV COM,#0CH
LCALL LCD_W_CMD
MOV COM,#01H
LCALL LCD_W_CMD
MOV COM,#06H
LCALL LCD_W_CMD
MOV COM,#80H
LCALL LCD_W_CMD
RET
LCD_W_CMD:PUSH ACC
LCD_W_CMD_A:LCALL LCD_R_STAT
JNB ACC.7,LCD_W_CMD_B
LCALL PUB_DELAY_100US
SJMP LCD_W_CMD_A
LCD_W_CMD_B:CLR RW
LCALL PP
CLR RS
LCALL PP
SETB E
LCALL PP
MOV A,COM
MOV LCD_PORT,A
LCALL PP
CLR E
LCALL PP
SETB RW
POP ACC
RET
LCD_W_DAT: PUSH ACC
LCD_W_DAT_A:LCALL LCD_R_STAT
JNB ACC.7,LCD_W_DAT_B
LCALL PUB_DELAY_100US
SJMP LCD_W_DAT_A
LCD_W_DAT_B:CLR RW
LCALL PP
SETB RS
LCALL PP
SETB E
LCALL PP
MOV A,DAT
MOV LCD_PORT,A
LCALL PP
CLR E
LCALL PP
SETB RW
POP ACC
RET
LCD_R_STAT:SETB RW
LCALL PP
CLR RS
LCALL PP
SETB E
LCALL PP
MOV A,LCD_PORT
LCALL PP
CLR RW
RET
KEY: PUSH ACC
JB P2.0,KEY1
LCALL DELAY
MOV SEC,#00H
LJMP OUT
KEY1:JB P2.1,KEY2
LCALL DELAY
MOV A,MIN
ADD A,#01H
DA A
MOV MIN,A
CJNE A,#60H,OUT
MOV MIN,#00H
LJMP OUT
KEY2:JB P2.2,OUT
LCALL DELAY
MOV A,HOUR
ADD A,#01H
DA A
MOV HOUR,A
CJNE A,#24H,OUT
MOV HOUR,#00H
LJMP OUT
OUT:
POP ACC
RET
PUB_DELAY_100US:PUSH ACC
CLR A
PD5_0: INC A
CJNE A,#23,PD5_0
POP ACC
RET
PP: NOP
NOP
NOP
RET
DISPLAY:
MOV R1,#12 ;显示shenzhen
MOV COM,#80H ;液晶显示第一行
LCALL LCD_W_CMD
MOV DPTR,#TAB1
MOV R3,#00H
LCD1:MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL LCD_W_DAT
INC R3
DJNZ R1,LCD1 ;显示shenzhen结束
MOV COM,#0C4H ;显示时钟,液晶显示第二行
LCALL LCD_W_CMD
MOV R0,#HOUR
MOV R6,#02H
DIS1: MOV A,@R0
SWAP A
ANL A,#0FH
LCALL LCD
MOV A,@R0
ANL A,#0FH
LCALL LCD
MOV DAT,#3AH
LCALL LCD_W_DAT
DEC R0
DJNZ R6,DIS1
MOV R0,#SEC
MOV A,@R0
SWAP A
ANL A,#0FH
LCALL LCD
MOV A,@R0
ANL A,#0FH
LCALL LCD
RET
LCD:
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DAT,A
LCALL LCD_W_DAT
LCALL DELAY
RET
TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
TAB1: DB " SHENZHEN "
CLOCK:CLR EA
PUSH PSW
PUSH ACC
SETB RS1
INC 53H
MOV A,53H
CJNE A,#20,BACK1
MOV 53H,#00H
BACK0:MOV A,SEC
ADD A,#01H
DA A
MOV SEC,A
CJNE A,#60H,BACK1
MOV SEC,#00H
MOV A,MIN
ADD A,#01H
DA A
MOV MIN ,A
CJNE A,#60H,BACK1
MOV MIN,#00H
MOV A,HOUR
ADD A,#01H
DA A
MOV HOUR,A
CJNE A,#24H,BACK1
MOV HOUR,#00H
BACK1:POP ACC
POP PSW
CLR RS1
SETB EA
RETI
DELAY: SETB RS0
MOV R6,#00H
MOV R7,#00H
DELAY1: NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
CLR RS0
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -