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

📄 7289.asm

📁 达盛单片机试验箱
💻 ASM
📖 第 1 页 / 共 2 页
字号:
			INC		R1
			DEC		R0
			SETB	KEY_CS
			CALL	DELAY_50MS
			DJNZ	R7,DSUP1
			SJMP	DSUP4
DSUP3:		MOV		A,R0				;大于10H表示是特殊字符
			ANL		A,#10000111B		;下载数据且按方式0译码
			CALL    KEY_SEND	
			MOV		A,@R1
			CALL    KEY_SEND
			INC		R1
			DEC		R0
			SETB	KEY_CS
			CALL	DELAY_50MS
			DJNZ	R7,DSUP1
DSUP4:		MOV     A,#10001000B   		;闪烁控制指令 88H(指令)
			CALL    KEY_SEND			
			MOV		A,BLINK
			CALL    KEY_SEND
			SETB    KEY_CS
			RET
;
;********************************************************
;			读键值子程序								*
;********************************************************
;
KBS:		MOV     A,#00010101B 		;发送读键盘数据指令码
			CALL    KEY_SEND
			MOV     R2,#08H				;8位数据
KBS1:   	SETB	KEY_CLK
			CALL	DELAY
			MOV		C,KEY_DAT
			RLC		A
			CLR     KEY_CLK
			CALL    DELAY
			DJNZ    R2,KBS1				;未满8位继续接收
			SETB	KEY_CS
	   		MOV	   	R2,A				;接收到的数据存于R2中
	   		MOV	   	R3,#1CH				;从键值表最底端开始比较
	   		MOV	   	DPTR,#KTB
KBS2:	   	MOV	   	A,R3
	   		MOVC    A,@A+DPTR
	   		CJNE    A,02H,KBS5
KBS3:	   	MOV	   	A,R3
			MOV		KEY_VALUE,A
			CJNE	A,#10H,KBS4
			SETB	C					;判断功能键数字键的标志
KBS4:		RET
KBS5:	   	DJNZ    R3,KBS2
	   		SJMP    KBS3								
;
;*******************************************************
;		/*万年历时、分、秒处理程序*/				   *
;*******************************************************
;	   
DSTIME:		MOV		R0,#DSBUF+7			;检查数据的合法性
			CALL	PTDEA
			CJNE	A,#24H,CHTIME
CHTIME:		JC		CHTIME00			;不合法重新键扫
			AJMP	RESET				;合法保存数据
CHTIME00:	MOV		HBUF,A
			DEC		R0
			CALL	PTDEA
			CJNE	A,#60H,CHTIME1
CHTIME1:	JC		CHTIME10
			AJMP	RESET		
CHTIME10:	MOV		MBUF,A
			DEC		R0
			CALL	PTDEA
			CJNE	A,#60H,CHTIME2
CHTIME2:	JC		CHTIME20
			AJMP	RESET
CHTIME20:	MOV		SSBUF,A

DSTIME0:	ACALL	DSINIT				;初始化万年历
			MOV		TIME_REG,#80H		;写秒寄存器
			MOV		TIME_DT,SSBUF
			CALL	W_WORD
			MOV		TIME_REG,#82H		;写分寄存器
			MOV		TIME_DT,MBUF
			CALL	W_WORD
			MOV		TIME_REG,#84H		;写小时寄存器
			MOV		TIME_DT,HBUF
			CALL	W_WORD
			ACALL	DSWRPRT				;写保护	
DSTIME1:	MOV		TIME_REG,#81H		;读秒寄存器
			CALL	R_WORD
			MOV		SSBUF,A
			MOV		TIME_REG,#83H		;读分寄存器
			CALL	R_WORD
			MOV		MBUF,A
			MOV		TIME_REG,#85H		;读小时寄存器
			CALL	R_WORD
			MOV		HBUF,A
			CALL	PUT_TIME
			CALL	DSUP			
			MOV		A,#88H
			CALL	KEY_SEND
			MOV		A,#0FFH
			CALL	KEY_SEND
			SETB	KEY_CS
			CALL	DELAY_500MS			
			JNB		KEY,L
			AJMP	DSTIME1
L:			AJMP	PRPT2				
;	   	
;*******************************************************
;		/*万年历初始化程序*/						   *
;*******************************************************
;		
DSINIT:		CLR		TIME_SCLK
			NOP
			CLR		TIME_RST
			MOV		TIME_REG,#8EH		;写保护寄存器(地址)
			MOV		TIME_DT,#00H		;打开写保护(指令)
			ACALL	W_WORD				;写地址、写指令
			MOV		TIME_REG,#90H		;涓流充电寄存器
			MOV		TIME_DT,#0A0H		;R=0,0 个稳压管
			ACALL	W_WORD
			RET

PTDEA:		MOV		A,@R0
			SWAP	A
			ANL		A,#0F0H
			MOV		R1,A
			DEC		R0
			MOV		A,@R0
			ANL		A,#0FH
			ORL		A,R1
			RET	   			
;		
;*******************************************************
;		/*DS1302 单字节命令(数据)写*/				   *
;*******************************************************
;		
W_WORD:		PUSH	PSW
			CLR		PSW.3
			CLR		PSW.4
			CLR		TIME_SCLK
			NOP
			SETB	TIME_RST
			MOV		A,TIME_REG
			ACALL	W_BYTE
			MOV		A,TIME_DT
			ACALL	W_BYTE
			CLR		TIME_RST
			NOP
			CLR		TIME_SCLK
			POP		PSW
			RET				
;
;*******************************************************
;		/*DS1302 单字节命令(数据)读*/				   *
;*******************************************************
;		
R_WORD:		PUSH	PSW
			CLR		PSW.3
			CLR		PSW.4
			CLR		TIME_SCLK
			NOP
			SETB	TIME_RST
			MOV		A,TIME_REG
			ACALL	W_BYTE
			ACALL	R_BYTE
			MOV		TIME_DT,A
			CLR		TIME_RST
			NOP
			CLR		TIME_SCLK
			POP		PSW
			RET
;	
;*******************************************************
;		/*DS1302 字节写时序*/						   *
;*******************************************************
;			
W_BYTE:		MOV		R6,#08H
			CLR		C
W_BYTE1:	CLR		TIME_SCLK
			RRC		A
			MOV		TIME_IO,C
			NOP
			SETB	TIME_SCLK
			DJNZ	R6,W_BYTE1
			RET		
;				
;*******************************************************
;		/*DS1302 字节读时序*/						   *
;*******************************************************	
;		
R_BYTE:		MOV		R6,#08H
			CLR		C
R_BYTE1:	CLR		TIME_SCLK
			MOV		C,TIME_IO
			RRC		A
			SETB	TIME_SCLK
			DJNZ	R6,R_BYTE1
			RET	
;
;*******************************************************
;		/*万年历写保护程序*/						   *
;*******************************************************
;
DSWRPRT:	MOV		TIME_REG,#10001110B
			MOV		TIME_DT,#10000000B
			CALL	W_WORD
			RET	
;			
;*******************************************************
;		/*读取时分秒缓冲区内容子程序*/				   *
;*******************************************************
;
PUT_TIME:	MOV     R1,#SSBUF			;SSBUF 缓冲区内容送显示缓冲区
			CALL	GET_TIME	
			MOV		DSBUF+7,R0
			MOV		DSBUF+6,R1	
			MOV		DSBUF+5,#1AH    	;显示‘-’	     	
	   		MOV     R1,#MBUF			;MBUF 缓冲区内容送显示缓冲区
	   		CALL	GET_TIME
	     	MOV		DSBUF+4,R0			
	     	MOV		DSBUF+3,R1
	     	MOV		DSBUF+2,#1AH   		;显示‘-’	     	
	    	MOV     R1,#HBUF           	;HBUF 缓冲区内容送显示缓冲区
	    	CALL	GET_TIME
	    	MOV		DSBUF+1,R0
	    	MOV		DSBUF,R1
	   		RET
	   	
GET_TIME:	MOV		A,@R1
			ANL		A,#0FH
	   		MOV		R0,A
	   		MOV		A,@R1
	   		SWAP	A
	   		ANL		A,#0FH
	   		MOV		R1,A
	   		RET
;
;********************************************************
;			键值表										*
;********************************************************
;
KTB:		DB		30H					;0
			DB		32H					;1
			DB		2AH					;2
			DB		22H					;3
			DB		34H					;4
			DB		2CH					;5
			DB		24H					;6
			DB		36H					;7
			DB		2EH					;8
			DB		26H					;9
			DB		1EH					;A
			DB		1CH					;B
			DB		1AH					;C
			DB		18H					;D
			DB		20H					;E
			DB		28H					;F
			DB		0FFH				;10
			DB		16H					;11
			DB		14H					;12
			DB		12H					;13
			DB		10H					;14
			DB		0EH					;15
			DB		0CH					;16
			DB		0AH					;17
			DB		08H					;18
			DB		06H					;19
			DB		04H					;1A
			DB		02H					;1B
			DB		00H					;1C
;			
;*******************************************************
;          循环显示段地址表								*
;*******************************************************
;
SEGTB:		DB		3BH,33H,2BH,23H,24H,20H,21H
			DB		26H,1EH,16H,0EH,06H,05H,04H
			DB		03H,0BH,13H,1BH,1AH,18H,1DH
			DB		1EH,26H,2EH,36H,3EH,39H,3AH				
;
;********************************************************
;		/*延时子程序*/									*
;******************************************************** 
;  				
DELAY_1S:	MOV		R7,#20
DELAY_1S1:	CALL	DELAY_50MS
			DJNZ	R7,DELAY_1S1
			RET

DELAY_500MS:
			MOV		R7,#10
DELAY_500MS1:
			CALL	DELAY_50MS
			DJNZ	R7,DELAY_500MS1
			RET

DELAY_3S:	
			MOV     R5,#10       		;延时约3秒
DELAY_3S0:  MOV     R6,#00H
DELAY_3S1:  MOV     R7,#00H
DELAY_3S2:  NOP
			NOP
			DJNZ    R7,DELAY_3S2
			DJNZ    R6,DELAY_3S1
			DJNZ    R5,DELAY_3S0
			RET		
;
DELAY_50MS: MOV     R5,#50              ;延时约50MS
DELAY_50MS1:MOV     R6,#250
DELAY_50MS2:NOP
			NOP
			DJNZ    R6,DELAY_50MS2
			DJNZ    R5,DELAY_50MS1
			RET
;			
DELAY:		DB	00H,00H,00H,00H
			DB	00H,00H,00H,00H
			RET
									
			END

⌨️ 快捷键说明

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