51单片机用键盘输入并用动态数码管显示

如题,利用51单片机的4*4键盘,输入数据,并用4个数码管分别显示,例如输入1显示1,再输入2,显示12,再输入3,显示123,输入4,显示1234,输入5显示2345,如此循环下去,可以用C语言,也可以用汇编,只要能实现功能就好,编完方便的话直接贴在下面,不太方便的话,就发到我邮箱[email protected]

第1个回答  2010-06-28
CLK BIT P0.0
DAT BIT P0.1
STR BIT P0.2
S1 BIT P2.4
S2 BIT P2.5
S3 BIT P2.6
S4 BIT P2.7
ORG 0000H
MAIN:CLR 20H.0
MOV R0,#0FFH ;11111111
MOV R1,#04H ;00000100
LOOP:MOV C,20H.0
LOOP1: MOV A,R0
RRC A ;01111111-c(0)-
MOV R0,A ;01111111
MOV P2,A ;01111111
MOV A,P2 ;01111101
CPL A ;10000010
ANL A,#0FH ;00000010
JNZ NEXT
DJNZ R1,LOOP1
AJMP MAIN
NEXT:;LCALL DELAY2
MOV 20H.0,C
CLR C
JB ACC.0,K4
JB ACC.1,K3
JB ACC.2,K2
JB ACC.3,K1
K4:MOV A,R1 ;A=4
SUBB A,#01H ;A=3
MOV B,#04H ;B=00000100
MUL AB ;AB=12;=0BH A=0BH B=0
AJMP LOOP0
K3:MOV A,R1 ;A=4
SUBB A,#01H ;A=3
MOV B,#04H ;
MUL AB ;AB=12
ADD A,#01H ;A=0CH B=0
AJMP LOOP0
K2:MOV A,R1
SUBB A,#01H ;
MOV B,#04H
MUL AB
ADD A,#02H
AJMP LOOP0
K1:MOV A,R1
SUBB A,#01H ;
MOV B,#04H
MUL AB
ADD A,#03H

LOOP0:
ADD A,#01H ;(要显示的数)
MOV B,#0AH
DIV AB
SETB S1
SETB S2
CLR S3
SETB S4
ACALL DISP
LCALL DELAY1
MOV A,B
SETB S1
SETB S2
SETB S3
CLR S4
ACALL DISP
LCALL DELAY1
MOV A,#0
SETB S1
SETB S2
SETB S3
SETB S4
ACALL DISP
LCALL DELAY1
DJNZ R1,LOOP
AJMP MAIN

DISP: MOV DPTR,#TABLE
MOVC A,@A+DPTR
CPL A
SEND_ACC:
MOV R2, #8
CLR STR
S_LOOP:
RRC A ;A中的最低位移动到C
MOV DAT, C ;移动到D口
NOP
CLR CLK ;P0.1输出一个脉冲
NOP
NOP
SETB CLK
DJNZ R2, S_LOOP
SETB STR
CLR STR
RET

DELAY1: MOV R7,#50
DIP: MOV R5,#50
DJNZ R5,$
DJNZ R7, DIP
RET
/*DELAY2:MOV R6,#100
DIP2:MOV R4,#100
DJNZ R4,$
DJNZ R6,DIP2
RET*/

TABLE:DB 0F5H,05H,0E3H,67H,17H,76H,0F6H,25H
DB 0F7H,77H
END

显示送4094
proteus图我也有
第2个回答  2010-06-28
PS8数据线接在普通口还真不好办 数据线接在中断脚就很容易写啦 PS8接串口就更加方便啦 PS8键盘按键输出原理至少要弄懂 明白原理就很容易写啦