程序的编写,在日积月累中完成,同时更是在调试中完善。
TJ0109_1 DATA 50H ;1至9洞数据统计
TJ0109_2 DATA 51H ;1至9洞数据统计
TJ0109_3 DATA 52H ;1至9洞数据统计
TJ1018_1 DATA 53H ;10至18洞数据统计
TJ1018_2 DATA 54H ;10至18洞数据统计
TJ1018_3 DATA 55H ;10至18洞数据统计
TJ0118_1 DATA 56H ;1至18洞数据统计
TJ0118_2 DATA 57H ;1至18洞数据统计
TJ0118_3 DATA 58H ;1至18洞数据统计
SHUJU_G DATA 56H
SHUJU_S DATA 57H
SHUJU_B DATA 58H
SHUJU_W DATA 75H
SHUJU_Z DATA 76H
;;;;;;;;;;;;;;;;;;;;;;;;;;;
DON1 DATA 31H ;洞1数据
DON2 DATA 32H
DON3 DATA 33H
DON4 DATA 34H
DON5 DATA 35H
DON6 DATA 36H
DON7 DATA 37H
DON8 DATA 38H
DON9 DATA 39H
DON10 DATA 3AH
DON11 DATA 3BH
DON12 DATA 3CH
DON13 DATA 3DH
DON14 DATA 3EH
DON15 DATA 3FH
DON16 DATA 40H
DON17 DATA 41H
DON18 DATA 42H
;;;;;;;;;;;;;;;;;;;;;;;
KS BIT P0.0 ;开始
JA BIT P0.1 ;加
JD BIT P0.2 ;减
CX BIT P0.3 ;查询
;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0H ;程序代码由地址0开始执行
MAIN:
;;;;;;;;;;;;;;;;;;;;;;;;按任意键进入人员编号设置
SX_RY:
MOV P3,#0FFH ;;;;;;关闭显示
JB KS,SX_RY_1
JNB KS,$
AJMP BISAI_1
SX_RY_1:
JB JA,SX_RY_2
JNB JA,$
AJMP BISAI_1
SX_RY_2:
JB JD,SX_RY_3
JNB JD,$
AJMP BISAI_1
SX_RY_3:
JB CX,SX_RY_4
JNB CX,$
AJMP BISAI_1
SX_RY_4:
AJMP SX_RY
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;数据调用
SHUJU_T:LCALL SHUJU_1_9
LCALL SHUJU_10_18
LCALL SHUJU_0118
RET
;;;;;;;;;;;;;;;;;;;;;;;;洞位将冲突的数据暂时保存起来
BISAI_1: MOV R1,#1
MOV R0,#31H
BISAI_1_A:
MOV SHUJU_Z,R0 ;将数据暂时保存
MOV SHUJU_W,R1
LCALL SHUJU_T
BISAI_1_B:;;;;;;;;;;作为查询时的返回入口
MOV R0,SHUJU_Z ;将数据送回
MOV R1,SHUJU_W
MOV R2,#50
MOV R3,#50
BISAI_1_2:LCALL XSLED_CX
DEC R2
MOV A,R2
CJNE A,#0,BISAI_1_4
BISAI_1_3: LCALL XSLED_CX_2
DEC R3
MOV A,R3
CJNE A,#0,BISAI_1_6
AJMP BISAI_1_A
RET
BISAI_1_4: JB CX,BISAI_1_4_B
JNB CX,$
MOV SHUJU_Z,R0 ;将数据暂时保存
MOV SHUJU_W,R1
LCALL CX_1_B
RET
BISAI_1_4_B:
JB KS,BISAI_1_5
JNB KS,$
INC R0
INC R1
MOV A,R1
CJNE A,#19,BISAI_1_2
LCALL BISAI_37
RET
BISAI_1_5: MOV A,@R0
LCALL BISAI_T
MOV @R0,A
AJMP BISAI_1_2
RET
BISAI_1_6: JB CX,BISAI_1_6_B
JNB CX,$
MOV SHUJU_Z,R0 ;将数据暂时保存
MOV SHUJU_W,R1
LCALL CX_1_B
RET
BISAI_1_6_B:
JB KS,BISAI_1_7
JNB KS,$
INC R0
INC R1
MOV A,R1
CJNE A,#19,BISAI_1_3
LCALL BISAI_37
RET
BISAI_1_7: MOV A,@R0
LCALL BISAI_T
MOV @R0,A
AJMP BISAI_1_3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;比赛完成,不再进行数据登记
BISAI_37:
MOV R0,#100 ;;;;;;;; 修改参数,就可以改变显示的延时时间
MOV R1,#100 ;;;;;;;; 修改参数,就可以改变显示的延时时间
XS_1: LCALL ANJIAN_SX
LCALL XSLED
MOV P3,#0FFH
DEC R0
MOV A,R0
CJNE A,#0,XS_1
DEC R1
MOV A,R1
CJNE A,#0,XS_2
LCALL ANJIAN_SX
RET
XS_2: MOV R0,#100
AJMP XS_1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;洞位数据调整
BISAI_T: JB JA,BISAI_T_1
JNB JA,$
INC A
RET
BISAI_T_1:JB JD,BISAI_T_2
JNB JD,$
DEC A
RET
BISAI_T_2:RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示时,按下,延时恢复
ANJIAN_SX:
JB KS,ANJIAN_SX_1
JNB KS,$
AJMP BISAI_37
ANJIAN_SX_1:
JB JA,ANJIAN_SX_2
JNB JA,$
AJMP BISAI_37
ANJIAN_SX_2:
JB JD,ANJIAN_SX_3
JNB JD,$
AJMP BISAI_37
ANJIAN_SX_3:
JB CX,ANJIAN_SX_4
JNB CX,$
AJMP CX_1
ANJIAN_SX_4:
RET
;;;;;;;;;;;;;;;;;;;数据0118
SHUJU_0118:
MOV A,TJ0109_1
MOV B,TJ1018_1
ADD A,B
MOV TJ0118_1,A
MOV A,TJ0109_2
MOV B,TJ1018_2
ADD A,B
MOV TJ0118_2,A
MOV A,TJ0109_3
MOV B,TJ1018_3
ADD A,B
MOV TJ0118_3,A
MOV A,TJ0118_3
MOV B,#10
DIV AB
MOV TJ0118_3,B
ADD A,TJ0118_2
MOV B,#10
DIV AB
MOV TJ0118_2,B
ADD A,TJ0118_1
MOV B,#10
DIV AB
MOV TJ0118_1,B
RET
;;;;;;;;;;;;;数据累加,尽量使用一个R争取不要冲突使用
SHUJU_1_9: MOV TJ0109_1,#0
MOV TJ0109_2,#0
MOV TJ0109_3,#0
MOV R0,#31H
SHUJU_1_9_2: MOV A,@R0
ADD A,TJ0109_3
MOV B,#100
DIV AB
MOV SHUJU_B,A;;;;;;;;;;;百位临时数据
MOV A,B
MOV B,#10
DIV AB
MOV SHUJU_S,A;;;;;;;;十位临时数据
MOV TJ0109_3,B;;;;个位送数据
;;;;;;;;;;;;;;;十位数相加
MOV A,TJ0109_2
ADD A,SHUJU_B
MOV B,#10
DIV AB
;;;;;;;;;;;;;;;;;;超过十位的,累加到百位
ADD A,TJ0109_1
MOV TJ0109_1,A ;;;;;;;累加最后值送百位
MOV TJ0109_2,B ;;;;;;;余数送百位
INC R0
MOV A,R0
CJNE A,#3AH,SHUJU_1_9_2
RET
;;;;;;;;;;;;;数据累加,尽量使用一个R争取不要冲突使用
SHUJU_10_18: MOV TJ1018_1,#0
MOV TJ1018_2,#0
MOV TJ1018_3,#0
MOV R0,#3AH
SHUJU_10_18_2: MOV A,@R0
ADD A,TJ1018_3
MOV B,#100
DIV AB
MOV SHUJU_B,A;;;;;;;;;;;百位临时数据
MOV A,B
MOV B,#10
DIV AB
MOV SHUJU_S,A;;;;;;;;十位临时数据
MOV TJ1018_3,B;;;;个位送数据
;;;;;;;;;;;;;;;十位数相加
MOV A,TJ1018_2
ADD A,SHUJU_B
MOV B,#10
DIV AB
;;;;;;;;;;;;;;;;;;超过十位的,累加到百位
ADD A,TJ1018_1
MOV TJ1018_1,A ;;;;;;;累加最后值送百位
MOV TJ1018_2,B ;;;;;;;余数送百位
INC R0
MOV A,R0
CJNE A,#43H,SHUJU_10_18_2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;比赛结束使用查询功能
CX_1: MOV R1,#1
MOV R0,#31H
CX_1_1: JB KS,CX_1_2
JNB KS,$
LCALL BISAI_37
RET
CX_1_2: JB JA,CX_1_3
JNB JA,$
INC R1
INC R0
MOV A,R0
CJNE A,#43H,CX_1_1
AJMP CX_1
CX_1_3: JB JD,CX_1_4
JNB JD,$
DEC R1
DEC R0
MOV A,R0
CJNE A,#30H,CX_1_1
AJMP CX_2
RET
CX_1_4: LCALL XSLED_CX
AJMP CX_1_1
RET
CX_2: MOV R1,#18
MOV R0,#42H
AJMP CX_1_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;比赛过程查询数据
CX_1_B: MOV R1,#1
MOV R0,#31H
CX_1_1_B: JB KS,CX_1_2_B
JNB KS,$
LCALL BISAI_1_B
RET
CX_1_2_B: JB JA,CX_1_3_B
JNB JA,$
INC R1
INC R0
MOV A,R0
CJNE A,#43H,CX_1_1_B
AJMP CX_1_B
CX_1_3_B: JB JD,CX_1_4_B
JNB JD,$
DEC R1
DEC R0
MOV A,R0
CJNE A,#30H,CX_1_1_B
AJMP CX_2_B
RET
CX_1_4_B: LCALL XSLED_CX
AJMP CX_1_1_B
RET
CX_2_B: MOV R1,#18
MOV R0,#42H
AJMP CX_1_1_B
;;;;;;;;;;;;;;;;;;;;数据显示
XSLED_CX:
LCALL XSLED
MOV A,R1 ;;;;;;;;;;;;;设置洞位1
LCALL LED_LED_10
MOV A,@R0 ;;;;;;;;;;;;;将相应洞位数据传给A
LCALL LED_LED_10
RET
;;;;;;;;;;;;;;;;;;;;闪烁数据显示
XSLED_CX_2:
LCALL XSLED
MOV A,R1 ;;;;;;;;;;;;;设置洞位1
LCALL LED_LED_10
;MOV A,@R0 ;;;;;;;;;;;;;将相应洞位数据传给A
;LCALL LED_LED_10
RET
;;;;;;;;;;;;;;;;;;;;;;;;;运行时数码管显示
XSLED:
MOV P3,#0D0H
MOV A,TJ0118_1
LCALL LED
INC P3
MOV A,TJ0118_2
LCALL LED
INC P3
MOV A,TJ0118_3
LCALL LED
INC P3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;数码显示调用程序
LED: MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;; 除以100得百位数
LED_LED_100:
MOV B,#100
DIV AB
LCALL LED
INC P3
MOV A,B
;;;;;;;;;;;;;;;;;;;;;;;;;;;除以10得十位数
LED_LED_10:
MOV B,#10
DIV AB
LCALL LED
INC P3
MOV A,B
;;;;;;;;;;;;;;;;;;;;;;;;;;不除得个位数
LED_LED_1:
LCALL LED
INC P3
RET
TABLE:
DB 0C0H ;"0"
DB 0F9H ;"1"
DB 0A4H ;"2"
DB 0B0H ;"3"
DB 99H ;"4"
DB 92H ;"5"
DB 82H ;"6"
DB 0F8H ;"7"
DB 80H ;"8"
DB 90H ;"9"
DB 0FFH ;"-"
DB 0FFH ;"-"
DB 0BFH ;"-"
DB 0BFH ;"-"
DELAY1:
MOV R7,#10
L1: MOV R6,#50
DJNZ R6,$
DJNZ R7,L1
RET
END