程序做得很粗糙,功能还算齐全,也还没进行优化,所以我只让它保存15个数据,如果能优化一下数据结构,应该可以保存更多数据,分两种模式,0和1模式。也没有计算误差,每次暂停会有少于1MS的误差,开始计时也有少于1MS误差。
写了好几天,往往都是因为其中一个单词写错,害得我弄上他几个小时,比如就因为我把JC写成了JB,害得我从昨天中午开始一直弄到今天,把程序改来改去,到最后才知道原来也就差一个单词,今天做好了,不想改了,也不用优化了,简易秒表嘛,要求也不是很高的,做出来,交给老师检查,希望过关
说一下功能吧,最左边复位键复位,中间键开始键,在复位被点后中间键没被点前,右边键改模式(0和1两种模式,0是单人模式,记录启动后开始键点击间隔,就是这次点击减去上次点击记录下来,1模式是多人模式,记录启动后每次点击开始键时间),开始键是启动秒表的按键,在秒表启动后是记录时间的按键。启动后,右边键为暂停键,暂停后可以点中间键继续计时。暂停后也可以再点暂停键查看记录的数据。只能记录15个数据哦!
ORG 0000H LJMP MAIN ORG 000BH LJMP DING ORG 0030H MAIN: MOV R7,#28H;定时器中断40次,记下一个时间单位1次是250US, MOV SP,#30H MOV R0,#40H MOV R1,#32H MOV R5,#00H QING0: MOV @R0,#00H INC R0 DJNZ R1,QING0 MOV IE,#82H MOV TMOD,#02H MOV TH0,#06H;定时器值 MOV TL0,#06H SETB TR0 CLR IE.7 CLR 00H CLR 01H CLR 02H CLR 03H XIAN: MOV P1,#0FFH MOV A,P1 JB ACC.0,JIANGPAN MOV A,50H CJNE A,#00H,NONG LCALL AN1 NONG: MOV 50H,#32H;定义键盘延时,延时时间为显示程序运行一次所需时间*定义数值 JIANGPAN: MOV A,50H CJNE A,#00H,NONG2 SJMP NONG3 NONG2: DEC 50H NONG3: MOV A,P1 JB ACC.1,JIANPAN1 MOV A,51H CJNE A,#00H,NONG1 LCALL AN2 NONG1: MOV 51H,#32H;定义键盘延时,延时时间为显示程序运行一次所需时间*定义数值 JIANPAN1:MOV A,51H CJNE A,#00H,NONG8 SJMP NONG9 NONG8: DEC 51H NONG9: MOV R3, #02H MOV R0,40H MOV R2,#0FEH CLR 00H MOV R4,#00H XIAN1: MOV A,R0 MOV B,#0AH DIV AB MOV R0,A MOV A,R2 RR A MOV R2,A MOV A,B MOV DPTR,#TAB JNB 00H,XIAN2 CLR 00H ADD A,#0AH XIAN2: MOVC A,@A+DPTR MOV P0,#0FFH MOV P2,R2 CPL A MOV P0,A INC R4 DJNZ R3,XIAN1 CJNE R4,#06H,XIAN3 MOV R3,#02H MOV R0,43H SJMP XIAN4 XIAN3: JNC WEI MOV R3,#02H CJNE R4,#04H,XIAN111 MOV R0,42H SJMP XIAN4 XIAN111: MOV R0,41H XIAN4: SETB 00H LJMP XIAN1 WEI:LJMP XIAN AN1: JB 01H,AN11 SETB 01H SETB 02H MOV 40H,45H MOV 41H,46H MOV 42H,47H MOV 43H,48H SETB IE.7 LJMP AN12 AN11: SETB 02H CLR C MOV A,#0EH SUBB A,4AH JC MEINVA SJMP MEINVA1 MEINVA: LJMP AN12 MEINVA1: MOV A,4AH MOV B,#03H MUL AB ADD A,#52H MOV R0,A MOV @R0,40H INC R0 MOV @R0,41H INC R0 MOV @R0,42H MOV R1,#48H CJNE @R1,#01H,MMMMG LJMP DDDD MMMMG: MOV A,4AH CJNE A,#00H,MMMM LJMP DDDD MMMM: DEC R0 DEC R0 MOV A,R0 MOV R1,A MOV R0,#45H MOV R4,#64H MOV A,@R0 MOV R3,A MOV A,@R1 LCALL JIANFA MOV @R1,A JNC MMMM1 INC R1 MOV R3,#01H MOV A,@R1 MOV R4,#3CH LCALL JIANFA MOV @R1,A DEC R1 JNC MMMM1 INC R1 INC R1 MOV R3,#01H MOV A,@R1 LCALL JIANFA MOV @R1,A DEC R1 DEC R1 MMMM1: INC R1 INC R0 MOV R4,#3CH MOV A,@R0 MOV R3,A MOV A,@R1 LCALL JIANFA MOV @R1,A JNC MMMM18 INC R1 MOV R3,#01H MOV A,@R1 LCALL JIANFA MOV @R1,A DEC R1 MMMM18: INC R1 INC R0 MOV A,@R0 MOV R3,A MOV A,@R1 LCALL JIANFA MOV @R1,A DDDD: MOV 45H,40H MOV 46H,41H MOV 47H,42H INC 4AH AN12: RET JIANFA: CLR C MOV 4FH,R3 CJNE A,4FH,JIANDA12 NOP JIANDA12: JC JIANDA1 SUBB A,R3 SJMP JIANFA2 JIANDA1: ADD A,R4 SUBB A,R3 SETB C JIANFA2: RET AN2: JNB 01H,AN21 CLR IE.7 MOV 45H,40H MOV 46H,41H MOV 47H,42H CLR 01H MOV R5,#01H LJMP AN22 AN21: JB 02H,AN23 MOV A,#01H XRL A,43H MOV 43H,A MOV 48H,A LJMP AN22 AN23: MOV 43H,R5 MOV A,R5 MOV B,#03H MUL AB ADD A,#4FH MOV R1,A MOV 43H,R5 MOV 40H,@R1 INC R1 MOV 41H,@R1 INC R1 MOV 42H,@R1 MOV A,R5 CJNE A,4AH,AN24 MOV R5,#00H AN24: INC R5 AN22: RET DING: PUSH 00H PUSH ACC PUSH PSW PUSH DPH PUSH DPL DJNZ R7,DINGSHI1 MOV R0,#40H MOV R7,#28H;定时器中断40次,记下一个时间单位1次是250US, INC @R0 CJNE @R0,#64H,DINGSHI1 MOV @R0,#00H INC R0 INC @R0 CJNE @R0,#3CH,DINGSHI1 MOV @R0,#00H INC R0 INC @R0 CJNE @R0,#3CH,DINGSHI1 MOV @R0,#00H DINGSHI1: POP DPL POP DPH POP PSW POP ACC POP 00H RETI TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH END