求单片机按键控制四位数码管显示电路和程序,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,? 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
呵呵 ?别忘了? 给俺加分啊