刚学单片机三个星期的萌新,有问题实在解决不了,求大佬帮个忙。单片机型号STC95C52,数码管为共阴极数码管,LED连接数码管运行,晶振为11.0592MHz,我设的定时中断口为P3.3。其他接口和题目我都写在纸上,现在的问题就是:单片机能够正常运行,能够正常倒计时,LED能够正常运行,但是数码管显示的十位上(左边)的数字一直在闪,我怎么调都调不好,要么闪要么一秒只跳一下,就是不能稳定显示,实在没办法了,求大佬帮忙看看程序,从MAIN开始就行了,前面应该都没问题,不会汇编的大佬就不用进来了,谢谢各位大佬!!!
SECOND EQU 30H
TCOUNT EQU 31H
ORG 0000H
LJMP START
ORG 001BH
LJMP T_0
START:SETB IT1
SETB EX1
SETB EA
MOV R6,#0
MOV R0,#00H
MOV R1,#01H
MOV R2,#00H
MOV R3,#00H
MOV DPTR,#TABLE
LCALL DISP1
DISP1:MOV R7,#200
DISP2:MOV A,R0
ORL P2,#00001110B
ANL P2,#11111110B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
MOV A,R1
ORL P2,#00001101B
ANL P2,#11111101B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
MOV A,R2
ORL P2,#00001011B
ANL P2,#11111011B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
MOV A,R3
ORL P2,#00000111B
ANL P2,#11110111B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
RET
DONE:SJMP DONE
T_0:PUSH PSW
PUSH ACC
LJMP MAIN
POP ACC
POP PSW
RETI
MAIN: MOV SECOND,#90
MOV TCOUNT,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
DISP: MOV A,SECOND
MOV B,#10
DIV AB
MOV DPTR,#TABLE
ORL P2,#00000101B
ANL P2,#11111101B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY2
MOV A,B
ORL P2,#00001011B
ANL P2,#11111011B
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY2
WAIT: JNB TF0,WAIT
CLR TF0
MOV TH0,#3CH
MOV TL0,#0B0H
INC TCOUNT
MOV A,TCOUNT
CJNE A,#20,NEX
MOV TCOUNT,#00H
DEC SECOND
MOV A,SECOND
CJNE A,#00H,NEXT
MOV SECOND,#90
CLR P2.6
CLR P2.5
CLR P2.4
CLR P2.3
CLR P2.2
CLR P2.1
CLR P2.0
JNB P2.0,DONE1
NEX: LJMP DISP
NEXT: LJMP WAIT
DELAY:MOV R5,#25
D1:MOV R4,#25
D2:DJNZ R4,D2
DJNZ R5,D1
RET
DONE1:LJMP START1
START1:SETB P1.5
LCALL DELAY
CLR P1.5
LCALL DELAY
LJMP START1
DELAY1:MOV R0,#50
D3:MOV R1,#30
D4:DJNZ R1,D4
DJNZ R0,D3
RET
DELAY2:MOV R0,#5
D5:MOV R1,#5
D6:DJNZ R1,D4
DJNZ R0,D3
RET
TABLE: DB 03FH,006H,05BH,04FH,066H
DB 06DH,07DH,007H,07FH,06FH
END
|