[v] ;******************************************************************** ;************************* 八路计分电路 ************************ ;************************* 发哥的单片机设计 ************************ ;************************* 2007年5月22日 ************************ ;********************************************************************
;30H~37H存放各组分数值 ;各组分数值的中转操作,在显示和闪烁效果中用到 ;52H存放中断次数 ;28H数码管熄灭标志
SEL1 EQU 20H SEL2 EQU 21H SEL3 EQU 22H SEL4 EQU 23H SEL5 EQU 24H SEL6 EQU 25H SEL7 EQU 26H SEL8 EQU 27H ;选定哪一组标志位 INITIAL EQU 50H ;初值存放寄存器 QUENCH EQU 51H ;熄灭符 ORG 0000H AJMP MAIN ORG 000BH AJMP INTT0 ORG 0060H
MAIN: MOV SP,#70H MOV TMOD,#11H MOV TL0 ,#0BH MOV TH0,#3CH SETB EA SETB ET0 ;初始化定时器,开放中断 MOV INITIAL,#14H ;预置初值20分 MOV QUENCH, #64H ;熄灭符,闪烁程序中用到,与显示程序中的判断相对应 ;熄灭符除10得10,在显示程序中有一个判断是不是为10 ADJUST: MOV R0,#30H MOV R1,#8H LOOP: MOV @R0,INITIAL INC R0 DJNZ R1,LOOP ;将各组置分 MOV 40H,30H MOV 41H,31H MOV 42H,32H MOV 43H,33H MOV 44H,34H MOV 45H,35H MOV 46H,36H MOV 47H,37H ;转存到40~47号单元
;******************* 查询程序 **********************
START: JNB P1.0,NUMBER1 JNB P1.1,NUMBER2 JNB P1.2,NUMBER3 JNB P1.3,NUMBER4 JNB P1.4,NUMBER5 JNB P1.5,NUMBER6 JNB P1.6,NUMBER7 JNB P1.7,TZ0 JNB P3.0,SEL0 JNB P3.1,SEL0 ACALL DISPLAY AJMP START
TZ0: AJMP NUMBER8
;******************* 初值调整程序 **********************
SEL0: ACALL DEL1MS JNB P3.0,ADD0 JNB P3.1,SUBB0 AJMP START ;防干扰
ADD0: ACALL DEL200MS ;防止按一下加N个数 MOV A,INITIAL CJNE A,#63H,ADD01 MOV INITIAL,#00H ;到了99从0开始 AJMP ADJUST ADD01: INC A MOV INITIAL,A AJMP ADJUST
SUBB0: ACALL DEL200MS MOV A,INITIAL CJNE A,#00H,SUBB01 MOV INITIAL,#63H AJMP ADJUST SUBB01: DEC A MOV INITIAL,A AJMP ADJUST
;******************* 选择组别程序 **********************
NUMBER1: ACALL DEL200MS JB P1.0,START MOV R0,#30H SETB SEL1 ;标志位置位 AJMP SELECT NUMBER2: ACALL DEL200MS JB P1.1,START MOV R0,#31H SETB SEL2 AJMP SELECT
NUMBER3: ACALL DEL200MS JB P1.2,START MOV R0,#32H SETB SEL3 AJMP SELECT
NUMBER4: ACALL DEL200MS JB P1.3,START MOV R0,#33H SETB SEL4 AJMP SELECT
NUMBER5: ACALL DEL200MS JB P1.4,TZ1 MOV R0,#34H SETB SEL5 AJMP SELECT
NUMBER6: ACALL DEL200MS JB P1.5,TZ1 MOV R0,#35H SETB SEL6 AJMP SELECT
NUMBER7: ACALL DEL200MS JB P1.6,TZ1 MOV R0,#36H SETB SEL7 AJMP SELECT
NUMBER8: ACALL DEL200MS JB P1.7,TZ1 MOV R0,#37H SETB SEL8 AJMP SELECT
TZ1: AJMP START
;******************* 加分减分程序 **********************
SELECT: SETB TR0 JNB P3.2,INCC JNB P3.3,DECC JNB P3.4,EXIT ACALL DISPLAY AJMP SELECT
INCC: ACALL DEL1MS JB P3.2,SELECT ACALL DEL200MS MOV A,@R0 CJNE A,#63H,INCC0 ;到了99再加就变为0 MOV @R0,#00H AJMP SELECT INCC0: INC A MOV @R0,A AJMP SELECT
DECC: ACALL DEL1MS JB P3.3,SELECT ACALL DEL200MS MOV A,@R0 JZ DECC0 DEC A MOV @R0,A AJMP SELECT DECC0: MOV @R0,#63H AJMP SELECT
;******************* 返回程序 **********************
EXIT: JB 28H,$ ;当闪烁效果时用到返回时,若为熄灭状态则等待 CLR SEL1 CLR SEL2 CLR SEL3 CLR SEL4 CLR SEL5 CLR SEL6 CLR SEL7 CLR SEL8 CLR TR0 AJMP START
;******************* 闪烁程序 **********************
INTT0: PUSH ACC PUSH PSW MOV TL1,#0BH MOV TH1,#3CH INC 52H MOV A,52H CJNE A,#04H,INTT0OUT ;200MS往下执行一次 MOV 40H,30H MOV 41H,31H MOV 42H,32H MOV 43H,33H MOV 44H,34H MOV 45H,35H MOV 46H,36H MOV 47H,37H ;40H~47H单元内容更新 MOV 52H,#00H JB 28H,FLASH ;28H标志为0熄灭数码管 JNB SEL1,AA2 MOV 40H,51H
AA2: JNB SEL2,AA3 MOV 41H,51H
AA3: JNB SEL3,AA4 MOV 42H,51H
AA4: JNB SEL4,AA5 MOV 43H,51H
AA5: JNB SEL5,AA6 MOV 44H,51H
AA6: JNB SEL6,AA7 MOV 45H,51H
AA7: JNB SEL7,AA8 MOV 46H,51H
AA8: JNB SEL8,AA1 MOV 47H,51H
AA1: CPL 28H AJMP INTT0OUT
FLASH: CPL 28H INTT0OUT: POP PSW POP ACC RETI
;******************* 显示程序 **********************
DISPLAY: MOV DPTR,#TAB MOV R1,#40H MOV R2,#0FFH DISP1: INC R2 MOV A,@R1 MOV B,#0AH DIV AB
CJNE A,#0AH,DISP11 MOV B,A ;判断是不是熄灭符,是,则个位十位都灭
DISP11: MOVC A,@A+DPTR MOV P0,A MOV P2,R2 CLR P2.7 ;译码器使能,当动态扫描到第二位时要让第一位熄灭,否则会出错 ACALL DEL1MS SETB P2.7 INC R2 MOV A,B MOVC A,@A+DPTR MOV P0,A MOV P2,R2 CLR P2.7 ACALL DEL1MS SETB P2.7 INC R1 CJNE R2,#0FH,DISP1 RET
TAB: DB 03fH,06H,05bH,0CfH,066H,06dH,07dH,07H,7fH,6fH,00H ;灭,0,1,2,3,4,5,6,7,8,9,灭
;******************* 延时程序 **********************
DEL200MS: MOV R3,#19H DELLOOP: ACALL DISPLAY DJNZ R3,DELLOOP RET
DEL1MS: MOV R4,#0F0H DJNZ R4,$ RET
END [/v] 这是我在他的blog中抄录的一个程序,图片是作者 如果作者不同意转帖,我将删除它。希望你能够提出意见 |