已解决
ORG 0000H
LJMP START
ORG 0003H
LJMP KEY
ORG 000BH
LJMP T0_INT
//----------------------------------
//主程序:
ORG 0030H
START: MOV IE,#83H ;CPU开中断,T0开中断,外部中断0打开
CLR IT0 ;设置电平触发
MOV R0,#00H ;个位数字
MOV R1,#00H ;十位数字
MOV R2,#00H ;判断是否溢出标志
MOV B,#00H
MOV P0,#0C0H ;初始
MOV P2,#03H
MOV TMOD,#02H ;T0方式2
MOV TH0,#6 ;计时器赋值
MOV TL0,#6
MOV R5,#39 ;设置循环次数
MOV R6,#100
MOV R7,#00H ;按键次数
MOV DPTR,#TAB_LED ;指针指向段码
CJNE R7,#01H,$ ;等待键盘
RUN: SETB TR0 ;启动T0
LOOP: MOV A,R0 ;显示个位
MOVC A,@A+DPTR ;
MOV P2,#02H ;
MOV P0,A ;送段码显示
LCALL DELAY_10MS ;动态延时10ms
MOV A,R1 ;送十位
MOVC A,@A+DPTR ;显示十位
MOV P2,#01H ;
MOV P0,A ;送段码显示
LCALL DELAY_10MS ;动态延时10ms
CJNE R2,#00H,OVER ;判断是否溢出
MOV A,B
CJNE A,#00H,START
NEXT: LJMP LOOP ;循环
OVER: MOV P2,#00H ;关断
LJMP $
//----------------------------------
//共阳极段码表:
TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
//----------------------------------
//T0中断:
T0_INT: DJNZ R5,INT_END
MOV R5,#39
DJNZ R6,T0_INT
MOV R6,#100
INC R0 ;
CJNE R0,#10,INT_END ;判断个位是否满10
CLEAN1: MOV R0,#00H ;个位归零
CLEAN2: INC R1 ;十位进一
CJNE R1,#10,INT_END ;判断十位是否满10
MOV R1,#00H ;十位归零
MOV R2,#01H ;标志位置1
INT_END: RETI
//----------------------------------
//键盘输入:
KEY: JNB P3.2,$
INC R7 ;R7加一
CJNE R7,#02H,CLEAN_R7
CLR TR0
LJMP KEY_END
CLEAN_R7: CJNE R7,#03H,KEY_END
MOV B,#01H
KEY_END: RETI
//----------------------------------
//延时10ms:
DELAY_10MS: MOV R3,#20
L1: MOV R4,#250
DJNZ R4,$
DJNZ R3,L1
RET
END
|