P1是位選,p2是段選.
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT
MAIN: MOV TMOD,#01H
MOV TH0,#0
MOV TL0,#1
SETB EA
SETB ET0
SETB TR0
MOV R6,#0 ;------------- R6用于存儲1~9
MOV R4,#44H ; 剛上電時讓第四個數(shù)碼管顯示0
;--------------R1~R4用于存放四個數(shù)碼管對應的段碼---------
DISPLAY: MOV A,R6
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV R1,A
MOV A,R6
MOV DPTR,#TAB3
MOVC A,@A+DPTR
MOV R2,A
PLAY: MOV P1,#0FFH
MOV R7,#100 ;關非正常微亮
DJNZ R7,$
MOV A,R4
MOV P1,#7FH
MOV P2,A
MOV R7,#100 ;調節(jié)亮度
DJNZ R7,$
MOV P1,#0FFH
MOV R7,#100 ;關非正常微亮
DJNZ R7,$
MOV A,R1
MOV P1,#0EFH
MOV P2,A
MOV R7,#100 ;調節(jié)亮度
DJNZ R7,$
MOV P1,#0FFH
MOV R7,#100 ;關非正常微亮
DJNZ R7,$
MOV A,R2
MOV P1,#0DFH
MOV P2,A
MOV R7,#100 ;調節(jié)亮度
DJNZ R7,$
LJMP DISPLAY
;----------------------------------------------------------
DELAY: MOV R7,#100
MOV R3,#100
LAY: MOV R2,#20
DJNZ R2,$
DJNZ R3,LAY
DJNZ R7,LAY
RET
;***********掃描鍵盤子程序*************************
KEYSCAN:
MOV P1,#0FH
JB P1.3,OFF
MOV R7,#100
DJNZ R7,$
JNB P1.3,SCAN
RET
SCAN: MOV A,#07FH
CONTINUE: MOV P1,A
JNB P1.3,RECORD
RR A
CJNE A,#0FEH,CONTINUE
RECORD: MOV R0,A ;R0用于存儲鍵碼
KEYDEAL: MOV A,R0
CJNE A,#7FH,OFF
LCALL K4
OFF: MOV P1,#0FFH
RET
K4: INC R6
LCALL DELAY
MOV A,R6
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV R4,A
CJNE R6,#10,RETURN
MOV R6,#0
RETURN: RET
;----------------------------------------------------
INT: LCALL KEYSCAN ; 鍵盤掃描放定時器中斷里面
MOV TH0,#0
MOV TL0,#1
RETI
;------------------------------------------------------
TAB1: DB 44H,0DEH,62H,52H,0D8H,51H,41H,0D6H,40H,50H
TAB2: DB 44H,44H,44H,44H,0DEH,62H,52H,0D8H,41H,040H
TAB3: DB 44H,0DEH,0D8H,50H,41H,51H,41H,50H,0D8H,0DEH
END
注意:如果你使用的是STC5608單片機 運行此程序可能會出現(xiàn)的情況:
1,數(shù)碼管閃爍顯示;2,數(shù)碼管顯示1、4、7時會卡死或者只有1、4、7可以正常顯示 ,
如果遇到以上情況建議換用STC5204或換質量較高的電源線然后一切就會正常了。