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或換質量較高的電源線然后一切就會正常了。