;-----------------------------
; Define Port&Pin Name
;-----------------------------
DIGIT1            BIT     P2.0    
DIGIT2            BIT     P2.1   

START_SW        	BIT	P3.6    
DELAY_SW	BIT	 P3.7

CHIP_CLK	BIT	P2.2    

DSP_ASCII	EQU     	030H    
DSP_NUM	EQU     	031H    
DELAY_CNT	EQU     	032H    
FLAG		EQU	02FH
DUMMY		BIT	FLAG.0
DUMMY2		BIT	FLAG.1
;-----------------------------------
; Main Program.
;-----------------------------------
                ORG     0000H          
                AJMP    INITIAL        

INITIAL:    	MOV    	P0,#00000000B 
                	MOV     	P1,#00000000B  
               	 	MOV     	P2,#11111000B 
                	MOV     	P3,#00011111B  
                	MOV     	DSP_NUM,#0     
		MOV	DSP_ASCII,#0
		MOV	FLAG,#0

MAIN:      		MOV     	R4,#5         
SEGMENT_SCAN:  	JNB	DUMMY2,NEXT1
		MOV	DPTR,#DOT_A
		MOV	A,DSP_NUM
		JB	DUMMY2,NEXT2
			
NEXT1:		MOV	A,DSP_NUM
		MOV     	DPTR,#NUM0 
NEXT2:          	MOVC    	A,@A+DPTR   
                	MOV     	P0,A           
                	CLR     	DIGIT1       
                	ACALL   	DELAY_1ms 
                	SETB    	DIGIT1          

		MOV	A,DSP_ASCII
		MOV	DPTR,#ASCII_INT
		MOVC	A,@A+DPTR
		MOV	P0,A
		CLR	DIGIT2
		ACALL	DELAY_1ms
		SETB	DIGIT2
		DJNZ	R4,SEGMENT_SCAN
	
DELAY:          	JB	DELAY_SW,START
		ACALL	DELAY_10ms
		JB	DELAY_SW,START
		ACALL	DELAY_PRESS

START:		JB	START_SW,STAR
		ACALL	DELAY_10ms
		JB	START_SW,STAR
		ACALL	START_PRESS

STAR:		JNB	DUMMY,DELTA	
		DJNZ	DSP_NUM,TIME1
		ACALL	CLEAR_FLAG
		
DELTA:		JNB	DUMMY2,EXIT
		MOV	P0,00000101B ;main contact - delta contact
		ACALL	CHIP_CLK
		ACALL	ANIMATE
		JNB	DUMMY,EXIT		

TIME1:         	ACALL	DELAY_1s
EXIT:		AJMP    MAIN

;---------------------------------------------------------------------------
START_PRESS:	MOV	DELAY_CNT,DSP_NUM
		MOV	DSP_ASCII,#1
		SETB	DUMMY
		CLR	DUMMY2
		MOV	P0,00000011B	;main contact - star contact
		RET

DELAY_PRESS:    	MOV	P0,#00
		ACALL	CHIP_CLK
		MOV	DSP_ASCII,#3
		MOV	R0,DSP_NUM
		CJNE	R0,#9,NEXT3
		MOV	DSP_NUM,#0
NEXT3:		INC     	DSP_NUM
		CLR	DUMMY
		CLR	DUMMY2
                	RET

CLEAR_FLAG:	MOV	DSP_ASCII,#2
		CLR	DUMMY
		SETB	DUMMY2
		RET

ANIMATE:		MOV	R1,DSP_NUM
		CJNE	R1,#5,NEXT4
		MOV	DSP_NUM,#0
NEXT4:		ACALL	DELAY_10ms
		INC	DSP_NUM
		RET

DRIVER_LATCH:	SETB	CHIP_CLK
		NOP
		CLR	CHIP_CLK
		NOP
		RET
	
;----------------------------------------------------------------------------
; Dummy Delay time 1m,10ms,1s
;----------------------------------------------------------------------------
DELAY_1ms:      	MOV     6,#0E6H         ; Each loop = 1 ms
DELAY_1ms_1:    	NOP
                	NOP
                	DJNZ    R6,DELAY_1ms_1

DELAY_10ms:     	MOV     7,#7         
DELAY_10ms_1:   	MOV     6,#0E6H        
DELAY_10ms_2:   	NOP
                	NOP
                	DJNZ    R6,DELAY_10ms_2
                	DJNZ    R7,DELAY_10ms_1
                	RET

DELAY_1s:       	MOV     5,#142        
DELAY_1s_1:     	ACALL   DELAY_10ms
                	DJNZ    R5,DELAY_1s_1
                	RET

;-----------------------------------------------------------------------------------
NUM0:       	DB      00111111B
NUM1:       	DB      00000110B
NUM2:       	DB      01011011B
NUM3:       	DB      01001111B
NUM4:       	DB      01100110B
NUM5:       	DB      01101101B
NUM6:       	DB      01111101B
NUM7:       	DB      00000111B
NUM8:       	DB      01111111B
NUM9:       	DB      01101111B

ASCII_INT:	DB	01001001B
ASCII_Y:        	DB      00110111B
ASCII_DELTA:    	DB      00111110B

DOT_A:		DB	00000001B
DOT_B:		DB	00000010B
DOT_C:		DB	00000100B
DOT_D:		DB	00001000B
DOT_E:		DB	00010000B
DOT_F:		DB	00100000B

END
