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

📄 ch13-3.asm

📁 時鐘及現在的時間,有得setup the current time more of the powerful tools in this 13-3.asm try to use it. Thank
💻 ASM
字号:
RS      BIT     P2.0
RW      BIT     P2.1
EN      BIT     P2.2
LED	BIT	P2.7
REFRESH	BIT	20H.0
TIMEOUT	EQU	21H
HOUR	EQU	30H
MIN	EQU	31H
SEC	EQU	32H
AHOUR	EQU	33H
AMIN	EQU	34H
ASEC	EQU	35H
CURSOR	EQU	36H
CNT	EQU	37H
ONE	EQU	38H
ZERO	EQU	39H
KEYTEMP	EQU	3AH
KEYDATA	EQU	3BH
SCANLINE EQU	3CH
COLS	EQU	3DH
ROWS	EQU	3EH
SECN	EQU	3FH
TIME	EQU	40H
;
        ORG     00H
        AJMP    START
        ORG     0BH
        AJMP    TIMER0
START:  MOV     SP,#60H
        ACALL   INIT            ;INITIAL RAM & LCD
LOOP:   MOV	A,TIMEOUT
	CJNE	A,#0,S0
	SETB	F0	
S0:	JNB	REFRESH,S2
	CLR	REFRESH
	MOV	A,#82H
	ACALL	W_INS
	MOV	CNT,#12
	MOV	DPTR,#MSG1	
	JB	F0,S1
	MOV	DPTR,#MSG2
S1:	ACALL	W_STR
        ACALL   CONV            ;BCD TO ASCII
 	MOV     A,#0C4H          ;SET ROW ADDRESS
        ACALL   W_INS
	ACALL	DISPLAY
	MOV	A,CURSOR
	ACALL	W_INS
S2: 	ACALL   KEYSCAN
	MOV	A,#-1
	XCH	A,KEYDATA
	CJNE	A,#-1,S3
	SJMP	LOOP
S3:	MOV	TIMEOUT,#5
	CJNE    A,#0,S4
        ACALL   KEY0
S4:     CJNE    A,#1,S5
        ACALL   KEY1
S5:     CJNE    A,#2,S6
        ACALL   KEY2
S6:     CJNE    A,#3,LOOP
        ACALL   KEY3
        SJMP    LOOP
;
KEY0:   PUSH    ACC               ;TIME/ALARM
	JB	LED,K01
	SETB	LED
	SJMP	K02
K01:	CPL     F0              ;F0=1/0,TIME/ALARM
 	SETB	REFRESH
K02:	POP     ACC
        RET
;
KEY1:   PUSH    ACC               ;ADJUST TIME/ALARM
        JNB     TR0,K11
	JMP	K10
K11:    MOV     R0,#HOUR
        JB      F0,K12
        MOV	R0,#AHOUR
K12:	MOV     R1,CURSOR
        CJNE    R1,#0C4H,K14
        MOV     A,#10H          ;ADJUST HOUR10
        ADD     A,@R0
        MOV     @R0,A
        ANL     A,#0F0H
        CJNE    A,#20H,K13
        MOV     A,@R0
        ANL     A,#0FH
        MOV     @R0,A
K13:    CJNE    A,#30H,K19
        MOV     A,@R0
        ANL     A,#0FH
        MOV     @R0,A
K14:    CJNE    R1,#0C5H,K15
        MOV     A,@R0           ;ADJUST HOUR
        ADD     A,#1
        DA      A
        MOV     @R0,A
        CJNE    A,#24H,K19
        MOV     @R0,#0
K15:    INC     R0              ;R0=31H or 34H
        CJNE    R1,#0C7H,K16
        MOV     A,#10H          ;ADJUST MIN10
        ADD     A,@R0
        MOV     @R0,A
        ANL     A,#0F0H
        CJNE    A,#60H,K19
        MOV     A,@R0
        ANL     A,#0FH
        MOV     @R0,A
K16:    CJNE    R1,#0C8H,K17
        MOV     A,@R0           ;ADJUST MIN
        ADD     A,#1
        DA      A
        MOV     @R0,A
        CJNE    A,#60H,K19
        MOV     @R0,#0
K17:    INC     R0              ;R0=32H or 35H
        CJNE    R1,#0CAH,K18
        MOV     A,@R0           ;ADJUST SEC10
        MOV     A,#10H
        ADD     A,@R0
        MOV     @R0,A
        ANL     A,#0F0H
        CJNE    A,#60H,K19
        MOV     A,@R0
        ANL     A,#0FH
        MOV     @R0,A
K18:    CJNE    R1,#0CBH,K19
        MOV     A,@R0           ;ADJUST SEC
        ADD     A,#1
        DA      A
        MOV     @R0,A
        CJNE    A,#60H,K19
        MOV     @R0,#0
K19:    ACALL   CONV
	SETB	REFRESH
K10:    POP     ACC
        RET
;
KEY2:   PUSH    ACC               ;MOVE CURSOR
        JB      TR0,K24
        MOV     A,CURSOR
        INC     A
        CJNE    A,#0C6H,K21
        INC     A
K21:    CJNE    A,#0C9H,K22
        INC     A
K22:    CJNE    A,#0CCH,K23
        MOV     A,#0C4H
K23:    ACALL   W_INS
        MOV     CURSOR,A
	SETB	REFRESH
K24:    POP     ACC
        RET
;
KEY3:   PUSH    ACC               ;ADJUST/EXCUTE
        CPL     TR0
        JNB     TR0,K31
        MOV     A,#0CH          ;NO CURSOR
        ACALL   W_INS
        SJMP    K32
K31:    MOV     A,#0EH          ;DISPLAY CURSOR
        ACALL   W_INS
        MOV     CURSOR,#0C4H
	SETB	REFRESH
K32:    POP     ACC
        RET
;
DISPLAY:MOV	R1,#8
	MOV	R0,#TIME
D1:	MOV     A,@R0
	ACALL   W_DATA
        INC     R0
        DJNZ    R1,D1
        RET
;
KEYSCAN:PUSH	ACC
	MOV	COLS,#2
	MOV	SCANLINE,#11111110B
COL:	MOV	A,SCANLINE
	MOV	P3,A
	MOV	A,P3
	RR	A
	RR	A
	MOV	ROWS,#2			;2 PUSH-SW
ROW:	SETB	C
	RRC	A	
	JNC	KEYIN
	DJNZ	ROWS,ROW
K1:	MOV	A,SCANLINE		;SCAN NEXT COLUMN
	RL	A
	MOV	SCANLINE,A
	DJNZ	COLS,COL
 	INC	ONE			;SCAN 1'S
	MOV	A,ONE
	CJNE	A,#5,K2
	MOV	ZERO,#0
	MOV	KEYTEMP,#-1
	MOV	KEYDATA,#-1
K2:	POP	ACC
	RET
KEYIN:	MOV	ONE,#0
	MOV	A,ROWS			;CALCULATE KEY VALUE
	DEC	A
	XRL	A,#1
	MOV	ROWS,A
	MOV	A,COLS		
	DEC	A
	XRL	A,#1
	RL	A			;MULTIPLES 2
	ORL	A,ROWS
	CJNE	A,KEYTEMP,K4
	MOV	A,ZERO
	CJNE	A,#5,K3
	SJMP	K2
K3:	INC	ZERO
	MOV	A,ZERO
	CJNE	A,#5,COL
	MOV	A,KEYTEMP
	MOV	KEYDATA,A
	SJMP	K2
K4:	MOV	KEYTEMP,A
	MOV	ZERO,#1
	SJMP	K2
;
INIT:   SETB    F0              ;F0=1:DISPLAY TIME
	MOV     SECN,#100
        MOV     TMOD,#01H
        MOV     IE,#10000010B
        MOV     TH0,#0D8H
        MOV     TL0,#0F0H
        SETB    TR0
	SETB	LED
	MOV     CURSOR,#0C4H     ;CURSOR ADDRESS
	MOV	TIMEOUT,#0
	MOV	HOUR,#0
	MOV	MIN,#0
	MOV	SEC,#0
	MOV	AHOUR,#0
	MOV	AMIN,#0
	MOV	ASEC,#0
	MOV	KEYTEMP,#-1
	MOV	KEYDATA,#-1
	MOV	ONE,#0
	MOV	ZERO,#0
	MOV	SCANLINE,#11111110B
	MOV	COLS,#2
	SETB	REFRESH
        MOV     A,#38H
        ACALL   W_INS
        MOV     A,#38H
        ACALL   W_INS
        MOV     A,#38H
        ACALL   W_INS
        MOV     A,#38H
        ACALL   W_INS
        MOV     A,#08H  ;FUNCTION SET
        ACALL   W_INS
        MOV     A,#01H  ;CLEAR DISPLAY
        ACALL   W_INS
        MOV     A,#06H  ;INPUT MODE SET
        ACALL   W_INS
        MOV     A,#0CH  ;DISPLAY ON/OFF
        ACALL   W_INS
        RET
CONV:   MOV	R1,#TIME
	MOV     A,#HOUR
        JB      F0,C1
        MOV	A,#AHOUR
C1:    	MOV     R0,A
        MOV     A,@R0
        SWAP    A
        ANL     A,#0FH
        ADD     A,#30H
        MOV     @R1,A
	INC	R1
        MOV     A,@R0
        ANL     A,#0FH
        ADD     A,#30H
        MOV     @R1,A
	INC	R1
        MOV     @R1,#":"
	INC	R1
        INC     R0
        MOV     A,@R0
        SWAP    A
        ANL     A,#0FH
        ADD     A,#30H
        MOV     @R1,A
	INC	R1
        MOV     A,@R0
        ANL     A,#0FH
        ADD     A,#30H
        MOV     @R1,A
	INC	R1
        MOV     @R1,#":"
	INC	R1
        INC     R0
        MOV     A,@R0
        SWAP    A
        ANL     A,#0FH
        ADD     A,#30H
        MOV     @R1,A
	INC	R1
        MOV     A,@R0
        ANL     A,#0FH
        ADD     A,#30H
        MOV     @R1,A
        RET
CMPTIME:PUSH    ACC
        MOV     R0,#HOUR
        MOV     R1,#AHOUR
        MOV     R2,#3
CO1:    CLR     C
        MOV     A,@R0
        SUBB    A,@R1
        JNZ     CO2
        INC     R0
        INC     R1
        DJNZ    R2,CO1
	CLR	LED
CO2:    POP     ACC
        RET
W_STR:	MOV	R0,#0
W1:	MOV	A,R0
	MOVC	A,@A+DPTR
	ACALL   W_DATA
        INC     R0
        DJNZ    CNT,W1
        RET
W_INS:  ACALL   CHECK
        CLR     RS
        CLR     RW
        SETB    EN
        MOV     P1,A
        CLR     EN
        RET
W_DATA: ACALL   CHECK
        SETB    RS
        CLR     RW
        SETB    EN
        MOV     P1,A
        CLR     EN
        RET
CHECK:  PUSH    ACC
BUSY:   CLR     RS
        SETB    RW
        SETB    EN
        MOV     A,P1
        CLR     EN
        JB      ACC.7,BUSY
        ACALL   DELAY
        POP     ACC
        RET
DELAY:  MOV     R6,#20
DEL1:   MOV     R7,#150
        DJNZ    R7,$
        DJNZ    R6,DEL1
        RET
CHGTIME:MOV     A,SEC
        ADD     A,#1
        DA      A
        MOV     SEC,A
        CJNE    A,#60H,FIX
        MOV     SEC,#00
        MOV     A,MIN
        ADD     A,#1
        DA      A
        MOV     MIN,A
        CJNE    A,#60H,FIX
        MOV     MIN,#00
        MOV     A,HOUR
        ADD     A,#1
        DA      A
        MOV     HOUR,A
        CJNE    A,#24H,FIX
        MOV     HOUR,#00
FIX:    RET
TIMER0: PUSH    ACC                       ;TIMER 1 SEC
        MOV     TH0,#0D8H
        MOV     TL0,#0F0H
        DJNZ    SECN,T03
	CLR	TR0
        MOV     SECN,#100
        ACALL   CHGTIME			;CHANGE TIME
	ACALL	CMPTIME			;COMPARE TIME
	SETB	REFRESH
	MOV	A,TIMEOUT
	CJNE	A,#1,T01
T01:	JC	T02
	DEC	A
	MOV	TIMEOUT,A	
T02:	SETB	TR0
T03:    POP     ACC
        RETI
MSG1:	DB	'Current Time'
MSG2:	DB	' Alarm Time '
        END

⌨️ 快捷键说明

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