P1是位选,p2是段选.
ORG 0000HLJMP MAINORG 000BHLJMP INTMAIN: MOV TMOD,#01H MOV TH0,#0 MOV TL0,#1 SETB EA SETB ET0 SETB TR0MOV R6,#0 ;------------- R6用于存储1~9 MOV R4,#44H ; 刚上电时让第四个数码管显现0;--------------R1~R4用于寄存四个数码管对应的段码---------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,APLAY: MOV P1,#0FFHMOV R7,#100 ;关非正常微亮 DJNZ R7,$MOV A,R4 MOV P1,#7FH MOV P2,AMOV R7,#100 ;调理亮度 DJNZ R7,$MOV P1,#0FFHMOV R7,#100 ;关非正常微亮 DJNZ R7,$ MOV A,R1 MOV P1,#0EFH MOV P2,AMOV R7,#100 ;调理亮度 DJNZ R7,$MOV P1,#0FFHMOV R7,#100 ;关非正常微亮 DJNZ R7,$ MOV A,R2 MOV P1,#0DFH MOV P2,AMOV R7,#100 ;调理亮度 DJNZ R7,$ LJMP DISPLAY;----------------------------------------------------------DELAY: MOV R7,#100 MOV R3,#100LAY: MOV R2,#20DJNZ R2,$ DJNZ R3,LAY DJNZ R7,LAY RET;***********扫描键盘子程序*************************KEYSCAN: MOV P1,#0FHJB P1.3,OFF MOV R7,#100 DJNZ R7,$ JNB P1.3,SCAN RET SCAN: MOV A,#07FHCONTINUE: MOV P1,AJNB P1.3,RECORDRR ACJNE A,#0FEH,CONTINUERECORD: MOV R0,A ;R0用于存储键码KEYDEAL: MOV A,R0CJNE A,#7FH,OFFLCALL K4OFF: MOV P1,#0FFH RETK4: INC R6 LCALL DELAY MOV A,R6 MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV R4,A CJNE R6,#10,RETURN MOV R6,#0RETURN: RET;----------------------------------------------------INT: LCALL KEYSCAN ; 键盘扫描放定时器中止里边 MOV TH0,#0 MOV TL0,#1 RETI;------------------------------------------------------TAB1: DB 44H,0DEH,62H,52H,0D8H,51H,41H,0D6H,40H,50HTAB2: DB 44H,44H,44H,44H,0DEH,62H,52H,0D8H,41H,040HTAB3: DB 44H,0DEH,0D8H,50H,41H,51H,41H,50H,0D8H,0DEH END留意:假如你运用的是STC5608单片机 运转此程序可能会呈现的状况:1,数码管闪耀显现;2,数码管显现1、4、7时会卡死或许只要1、4、7能够正常显现 ,假如遇到以上状况主张换用STC5204或换质量较高的电源线然后全部就会正常了。