求单片机按键控制四位数码管显示电路和程序,7个按键按下,四位数码管依次显示四个1111~7777

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,? LL2

LCALL 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

呵呵 ?别忘了? 给俺加分啊