K1 BIT P1.1
K2 BIT P1.2
K3 BIT P1.3
K4 BIT P1.4
K5 BIT P1.5
K6 BIT P1.6
K7 BIT P1.7 ?
ORG 0000H
?LJMP 0100H
MAIN: MOV ?SP,#70H?
MOV 60H,#0 ;給顯示緩沖區送顯示的初值? 開始顯示0000
?MOV 61H,#0
?MOV 62H,#0 ?
?MOV 63H,#0
LY: ? LCALL ?DISP ? ;調用顯示子程序? 顯示0000 LL1: JB K1,? LL2LCALL YS1MS ;去抖動
JB K1,? LL2
?MOV 60H,? #1
?MOV 61H,? #1
?MOV 62H,? #1
?MOV 63H,? #1 ?
LCALL ?DISP ? ;調用顯示子程序? 顯示1111
LL2: JB K1,? LL3
LCALL YS1MS ;去抖動
JB K1,? LL3
?MOV 60H,? #2
?MOV 61H,? #2
?MOV 62H,? #2
?MOV 63H,? #2 ?
LCALL ?DISP ? ;調用顯示子程序? 顯示2222
LL3: JB K1,? LL4
LCALL YS1MS ;去抖動
JB K1,? LL4
?MOV 60H,? #3
?MOV 61H,? #3
?MOV 62H,? #3
?MOV 63H,? #3
LCALL ?DISP ? ;調用顯示子程序? 顯示3333
LL4: JB K1,? LL5
LCALL YS1MS ;去抖動
JB K1,? LL5
?MOV 60H,? #4
?MOV 61H,? #4
?MOV 62H,? #4
?MOV 63H,? #4
LCALL ?DISP ? ;調用顯示子程序? 顯示4444
LL5: JB K1,? LL6
LCALL YS1MS ;去抖動
JB K1,? LL6
?MOV 60H,? #5
?MOV 61H,? #5
?MOV 62H,? #5
?MOV 63H,? #5 ?
LCALL ?DISP ? ;調用顯示子程序? 顯示5555
LL6: JB K1,? LL7
LCALL YS1MS ;去抖動
JB K1,? LL7
?MOV 60H,? #6
?MOV 61H,? #6
?MOV 62H,? #6
?MOV 63H,? #6
LCALL ?DISP ? ;調用顯示子程序? 顯示6666
LL7: JB K1,? LLL
LCALL YS1MS ;去抖動
JB K1,? LLL
?MOV 60H,? #7
?MOV 61H,? #7
?MOV 62H,? #7
?MOV 63H,? #7
LCALL ?DISP ? ;調用顯示子程序? 顯示7777
LLL: ?SJMP ? LL1
DISP: MOV R0,#60H ? ;指針指向顯示緩沖區
?MOV R7,#4 ? ;設循環顯示的次數? 顯示4位數據
?CLR ?C
?MOV R6,#00000001B ;從p2.0開始顯示? 即先顯示1
LL: MOV DPTR,#TAB ?;數據指針指向顯示編碼表達首地址
?MOV A,@R0
?MOVC? A? ,? @?A+?DPTR?;取顯示編碼
?MOV ?P0,A ?;送P0口顯示
?MOV ?A,R6
?MOV ?P2,A ;控制顯示位
?RLC ? A ? ;修改顯示位
?MOV ?R6,A
?INC R0 ?;指向下壹個要顯示的數據
?LCALL YS1MS ;延時顯示時間
?DJNZ ? R7,LL ? ;4位數據沒顯示完?則轉LL繼續顯示
?RET
TAB: ?DB 0C0H,0F9H,0A4H,0B0H,99H ;顯示編碼
?DB 92H,82H,0F8H,80H,98H
YS1MS: MOV R5,#45 ;延時子程序
YSLL: MOV R4,#200
YYLL: ? DJNZ R4,YYLL?DJNZ R5,YSLL
?RET
呵呵 ?別忘了? 給俺加分啊