芯片:        STC15W4K58S4

实验开发板STC 大学计划实验箱4.C

实验代码:

ORG 0000H
	AJMP MAIN
ORG 0023H
	AJMP SIRIAL_ISR
	
	AUXR DATA 8EH

ORG 0500H
	
	MAIN:
	P4 DATA 0C0H
	P5 DATA 0C8H
	P0M0 DATA 94H
	P0M1 DATA 93H
	P4M0 DATA 0B4H
	P4M1 DATA 0B3H
	P5M0 DATA 0CAH
	P5M1 DATA 0C9H
	MOV 50H , #00H
	MOV 60H , #00H
	MOV 70H , #00H
	MOV 71H , #00H
	MOV DPTR , #5000H
	MOV P0 , #00H
	MOV P4 , #00H
	MOV P5 , #00H
	MOV P0M0 , #00H
	MOV P0M1 , #00H
	MOV P4M0 , #00H
	MOV P4M1 , #00H
	MOV P5M0 , #00H
	MOV P5M1 , #00H
	LCALL UARTINIT
	
	LOOP:
	LCALL BUTTON_JUDGE
	LCALL DYNAMIC_DISPLAY_1
	LCALL DYNAMIC_DISPLAY_2
	AJMP LOOP
	
	UARTINIT:			;9600bps@12.000MHz
	MOV SCON,#50H		;8位数据,可变波特率
	ANL AUXR,#0BFH		;定时器1时钟为Fosc/12,即12T
	ANL AUXR,#0FEH		;串口1选择定时器1为波特率发生器
	ANL TMOD,#0FH		;设定定时器1为16位自动重装方式
	MOV TL1,#0E6H		;设定定时初值
	MOV TH1,#0FFH		;设定定时初值
	CLR ET1			;禁止定时器1中断
	SETB TR1		;启动定时器1
	SETB ES
	SETB EA
	RET

	SIRIAL_ISR:
	CLR EA
	CLR RI
	PUSH ACC
	PUSH DPH
	PUSH DPL
	MOV A,SBUF 
	MOV 70H , #0FH
	ANL 70H , A
	MOV 71H , #0F0H
	ANL 71H , A
	MOV A , 71H
	SWAP A
	MOV 71H , A
	POP DPL
	POP DPH
	POP ACC
	SETB EA
	RETI
	
	BUTTON_JUDGE:
	MOV   P0 , #0F0H
	MOV   A  , P0
	CJNE  A  , #0F0H , Button_Debouncing
	AJMP  RETURN_BUTTON
	Button_Debouncing:
	LCALL DELAY10MS
	MOV   A  , P0
	CJNE  A  , #0F0H ,JUDGE_X 
	AJMP  RETURN_BUTTON
	JUDGE_X:
	JNB   ACC.4 , ROW_X_3
	JNB   ACC.5 , ROW_X_2
	JNB   ACC.6 , ROW_X_1
	JNB   ACC.7 , ROW_X_0
	ROW_X_3:
	MOV  60H , #0
	AJMP  JUDGE_Y
	ROW_X_2:
	MOV  60H , #4
	AJMP  JUDGE_Y
	ROW_X_1:
	MOV  60H , #8
	AJMP  JUDGE_Y
	ROW_X_0:
	MOV  60H , #12
	AJMP  JUDGE_Y
	JUDGE_Y:
	MOV   P0 , #0FH
	LCALL DELAY1MS
	MOV   A  , P0
	MOV   R4 , #01H
	JNB   ACC.3 , ROW_Y_3
	JNB   ACC.2 , ROW_Y_2
	JNB   ACC.1 , ROW_Y_1
	JNB   ACC.0 , ROW_Y_0
	AJMP  RETURN_BUTTON
	ROW_Y_3:
	MOV   A  , P0
	JNB   ACC.3 , ROW_Y_3
	MOV  A   , 60H
	ADD  A   , #3
	MOV  60H , A
	MOV SBUF , A 
	LCALL CHECK_TI_OK
	AJMP  RETURN_BUTTON
	ROW_Y_2:
	MOV   A  , P0
	JNB   ACC.2 , ROW_Y_2
	MOV  A   , 60H
	ADD  A   , #2
	MOV  60H , A
	MOV SBUF , A
	LCALL CHECK_TI_OK
	AJMP  RETURN_BUTTON
	ROW_Y_1:
	MOV   A  , P0
	JNB   ACC.1 , ROW_Y_1
	MOV  A   , 60H
	ADD  A   , #1
	MOV  60H , A
	MOV SBUF , A
	LCALL CHECK_TI_OK
	AJMP  RETURN_BUTTON
	ROW_Y_0:
	MOV   A  , P0
	JNB   ACC.0 , ROW_Y_0
	MOV  A   , 60H
	ADD  A   , #0
	MOV  60H , A
	MOV SBUF , A
	LCALL CHECK_TI_OK
	AJMP  RETURN_BUTTON
	RETURN_BUTTON:
	RET
	
	CHECK_TI_OK:
	JNB TI , CHECK_TI_OK
	CLR TI
	RET
	
	DYNAMIC_DISPLAY_1:
	MOV A , 70H
	MOVC A , @A+DPTR
	MOV 50H , A
	MOV  R1 , 50H
	MOV  R2 , #00H
	LCALL DIGITAL_TUBE_DISPLAY
	RET
	
	DYNAMIC_DISPLAY_2:
	MOV A , 71H
	MOVC A , @A+DPTR
	MOV 50H , A
	MOV  R1 , 50H
	MOV  R2 , #01H
	LCALL DIGITAL_TUBE_DISPLAY
	RET
	
	DIGITAL_TUBE_DISPLAY:
	LCALL SELECT_LED
	LCALL SELECT_DISPLAY_NUMBER
	SETB P5.4
	LCALL DELAY5US
	CLR  P5.4
	RET
	
	SELECT_LED:
	MOV R3 , #00H
	MOV A , R2
	FOR_LED:
	CJNE R3 , #08H ,AGAIN_LED
	MOV R3 , #00H
	AJMP RETURN
	AGAIN_LED:
	MOV 40H , R3
	CJNE A , 40H , NEXT_LED
	CLR P4.0
	LCALL PULSE
	INC R3
	AJMP FOR_LED
	NEXT_LED:
	SETB P4.0
	LCALL PULSE
	INC R3
	AJMP FOR_LED
	RET
	
	SELECT_DISPLAY_NUMBER:
	MOV R3 , #00H
	MOV A , R1
	FOR_DISPLAY:
	CJNE R3 , #08H , AGAIN_DISPLAY
	MOV R3 , #00H
	AJMP RETURN 
	AGAIN_DISPLAY:
	JB ACC.7 , NEXT_DISPLAY
	CLR P4.0
	LCALL PULSE
	INC R3
	RL A
	AJMP FOR_DISPLAY
	NEXT_DISPLAY:
	SETB P4.0
	LCALL PULSE
	INC R3
	RL A
	AJMP FOR_DISPLAY
	RET
	
	RETURN:
	RET
	
	PULSE:
	SETB P4.3
	LCALL DELAY5US
	CLR  P4.3
	RET
	
	DELAY10MS:			;@12.000MHz
	NOP
	PUSH 30H
	PUSH 31H
	MOV 30H,#94
	MOV 31H,#93
	NEXT_10:
	DJNZ 31H,NEXT_10
	DJNZ 30H,NEXT_10
	POP 31H
	POP 30H
	RET
	
	DELAY1MS:			;@12.000MHz
	NOP
	PUSH 30H
	PUSH 31H
	MOV 30H,#10
	MOV 31H,#81
	NEXT_1:
	DJNZ 31H,NEXT_1
	DJNZ 30H,NEXT_1
	POP 31H
	POP 30H
	RET
	
	DELAY5US:			;@12.000MHz
	NOP
	NOP
	NOP
	NOP
	PUSH 30H
	MOV 30H,#8
	NEXT:
	DJNZ 30H,NEXT
	POP 30H
	RET
	
ORG 5000H
	TABLE:
	DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
	
	END

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐