程序的编写,在日积月累中完成,同时更是在调试中完善。 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