4X4键盘的单片机汇编编程~急

来源:百度知道 编辑:UC知道 时间:2024/05/08 17:18:07
要设计4X4的键盘,按第一个到第16个数码管依次显示0~F,P1.0~P1.3为行线,P1口高四位为列线,P0口接8个动态数码管,P3口为其控制口,低电平有效。。我的程序如下
ORG 00H
MOV SP,#60H
START: MOV DPTR,#TAB
KEY: LCALL KS
JNZ K1
LCALL DELAY
LJMP KEY
K1: LCALL DELAY
LCALL KS
JNZ K2
LJMP KEY
K2: MOV R2,#0FEH
MOV R4,#00H
K3: MOV A,R2
MOV P1,A
MOV A,P1
JB ACC.0,L1
MOV A,#00H
LJMP LK
L1: JB ACC.1,L2
MOV A,#04H
LJMP LK
L2: JB ACC.2,L3
MOV A,#08H
LJMP LK
L3: JB ACC.3,NEXT
MOV A,#0CH
LJMP LK
LK: ADD A,R4
MOV 88H,A
K4: LCALL DELAY
LCALL KS
JNZ K4
MOV A,88H
MOVC A,@A+DPTR
MOV P0,A
MOV P3,#00H
NEXT: INC R4

你的db定义的是共阳极数码管的断码,P3口送低电平怎么能够点亮,我认为你实际的数码管是共阴极的。不过你的程序还是有问题的,下面是我修改以后的,尽管修改的不是很大,但是修改了多处,

我使用共阴极数码管,改动了你的断码,proteus仿真完全正确,复合你的要求,我的接线如图所示。如果你是共阳极数码管之需要把段码改过来就行了,在源程序中只是被注释掉了。

     ORG   00H

       MOV   SP,#60H

START: MOV   DPTR,#TAB

KEY:   LCALL KS

       JNZ   K1

       LCALL DELAY

       LJMP  KEY

K1:    LCALL DELAY

       LCALL KS

       JNZ   K2

       LJMP  KEY

K2:    MOV   R2,#0EFH

       MOV  &