www.pudn.com > wildman.rar > wildman.asm


LEDBUF	EQU	60H		;显示缓冲区 
HOUR	EQU	40H 
MINUTE	EQU	41H 
SECOND	EQU	42H 
C100US	EQU	43H 
TICK	EQU	10000		;中断次数计数器 
T100US	EQU	256-50		;100US定时初值 
	 
	ORG	0000H		;复位入口 
	LJMP	START		 
	ORG	000BH		;定时器T0中断入口 
	LJMP	T0INT 
	ORG	0030H 
 
LEDMAP:	 
	DB	0C0H,0F9H,0A4H,0B0H,99H 
	DB	92H,82H,0F8H,80H,90H 
	DB	40H,0F9H,24H,30H,19H	;数码管显示代码 
	DB	12H,02H,78H,00H,10H 
DELAY:	MOV	R7,#0		;延时子程序 
DELAYLOOP: 
	DJNZ	R7,DELAYLOOP 
	DJNZ	R6,DELAYLOOP 
	RET 
 
DISPLAYLED:			;显示子程序 
	MOV	50H,#0FBH	 
	MOV	51H,#0F7H	 
	MOV	52H,#0EFH 
	MOV	53H,#0DFH 
	MOV	54H,#0BFH 
	MOV	55H,#7FH 
	MOV	R0,#LEDBUF 
	MOV	R2,#6		;共6个数码管 
	MOV	R1,#50H		;从左边开始显示 
LOOP:	MOV	A,@R0 
	MOV	P0,A 
	MOV	A,@R1 
	MOV	P2,A		;显示一位八段管 
	MOV	R6,#1 
	CALL	DELAY 
	INC	R1 
	INC	R0 
	DJNZ	R2,LOOP 
	RET 
		 
TOLED:	MOV	DPTR,#LEDMAP		;查表取显示代码子程序 
	MOVC	A,@A+DPTR 
	RET 
 
START:	MOV	TMOD,#02H		;主程序 
	MOV	TH0,#T100US		;设置T0工作方式及初值 
	MOV	TL0,#T100US 
	MOV	IE,#10000010B		;开中断 
	MOV	HOUR,#0 
	MOV	MINUTE,#0 
	MOV	SECOND,#0 
	MOV	C100US,#HIGH(TICK) 
	MOV	C100US+1,#LOW(TICK) 
	SETB	TR0			;启动T0 
MLOOP:	MOV	A,HOUR 
	MOV	B,#10 
	DIV	AB 
	CALL	TOLED 
	MOV	LEDBUF,A 
	MOV	A,B 
	CALL	TOLED 
	ORL	A,#80H 
	MOV	LEDBUF+1,A 
	MOV	A,MINUTE 
	MOV	B,#10 
	DIV	AB 
	CALL	TOLED 
	MOV	LEDBUF+2,A 
	MOV	A,B 
	CALL	TOLED 
	ORL	A,#80H 
	MOV	LEDBUF+3,A 
	MOV	A,SECOND 
	MOV	B,#10H 
	DIV	AB 
	CALL	TOLED 
	MOV	LEDBUF+4,A 
	MOV	A,B 
	CALL	TOLED 
	MOV	LEDBUF+5,A 
	CALL	DISPLAYLED 
	LJMP	MLOOP 
 
T0INT:	PUSH	PSW			;定时器T0中断服务程序 
	PUSH	ACC 
	MOV	A,C100US+1 
	JNZ	GOON 
	DEC	C100US 
GOON:	DEC	C100US+1 
	MOV	A,C100US 
	ORL	A,C100US+1 
	JNZ	EXIT 
	MOV	C100US,#HIGH(TICK) 
	MOV	C100US+1,#LOW(TICK) 
	INC	SECOND 
	MOV	A,SECOND 
	CJNE	A,#60,EXIT 
	MOV	SECOND,#0 
	INC	MINUTE 
	MOV	A,MINUTE 
	CJNE	A,#60,EXIT 
	MOV	MINUTE,#0 
	INC	HOUR 
	MOV	A,HOUR 
	CJNE	A,#24,EXIT 
	MOV	HOUR,#0 
EXIT:	POP	ACC 
	POP	PSW 
	RETI 
	END