我用汇编语言做了个矩阵键盘,可是怎么按键盘,数码管就是不反应,求大神指点,谢谢!
GAOEQU40HDIIEQU45HORG0000HLJMPMAINORG0030HMAIN:;;;;;;;;;;;;;;;;;;;;;;;;主程序AJMPSAO;调用扫...
GAO EQU 40H
DII EQU 45H
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: ;;;;;;;;;;;;;;;;;;;;;;;;主程序
AJMP SAO ;调用扫描键盘程序
CJNE A,#0CH,M ;看输入的值是否等于设置高门限的值
AJMP GA ;调用高门限程序
M:CJNE A,#0DH,M1 ; 底
AJMP DI
M1:AJMP MAIN
;;;;;;;;;;;;;;;;;高门限程序如下
GA:
MOV GAO,0F7H
MOV GAO+1,0F7H
MOV GAO+2,077H
MOV GAO+3,0F7H
MOV R2,#4
AJMP XIAN
G: ;调用显示程序
LJMP SAO ;调用扫描键盘程序
MOV GAO,A ;
AJMP XIAN ;
DEC R2 ;
INC GAO ;
DJNZ R2,G ;
G1:LJMP XIAN
CJNE A,#0EH,G1
CLR A
MOV R2,00H
RET
;;;;;;;;;;;;;;底门限
DI:
MOV DII,0F7H
MOV DII+1,0F7H
MOV DII+2,077H
MOV DII+3,0F7H
MOV R2,#4
AJMP XIAN1
D: ;调用显示程序
LJMP SAO ;调用扫描键盘程序
MOV DII,A ;
AJMP XIAN1 ;
DEC R2 ;
INC DII ;
DJNZ R2,D ;
D1:LJMP XIAN1
CJNE A,#0EH,D1
CLR A
MOV R2,00H
RET
;;;;;;;;;;;;;;;;;;;;;;键盘扫描程序
SAO: MOV P2,#0F0H
LCALL DELAY
MOV A,P2
ANL A,#0F0H
CJNE A,#0F0H,L
AJMP SAO
L:LCALL DELAY
MOV A,P2
JB ACC.4,L1
AJMP Q1
L1:JB ACC.5,L2
MOV R3,#01H
AJMP Q1
L2:JB ACC.6,L3
MOV R3,#02H
AJMP Q1
L3:JB ACC.7,SAO
MOV R3,#03H
AJMP Q1
Q1:MOV P2,#0FH
LCALL DELAY
MOV A,P2
ANL A,#0FH
JB ACC.0,Q2
MOV R4,#00H
AJMP JIA
Q2:JB ACC.1,Q3
MOV R4,#04H
AJMP JIA
Q3:JB ACC.2,Q4
MOV R4,#08H
AJMP JIA
Q4:JB ACC.3,SAO
MOV R4,#0CH
AJMP JIA
JIA:MOV A,R3
ADD A,R4
RET
DELAY:MOV R6,#20H ;扫描延时程序
Q6:MOV R5,#0BBH
Q5:DJNZ R5,Q5
DJNZ R6,Q6
RET
;;;;;;;;显示程序1
XIAN:
MOV R0,#GAO
MOV DPTR,#segtab
MOV A,@R0
MOVC A,@A+DPTR
mov r1,#4 ;扫描6次
mov r2,#0Eh ;从第一位开始
dp01: mov a,@r0
mov p0,a ;段码输出
mov a,r2 ;取位码
mov p1,a ;位码输出
acall delay1 ;调用延时
mov a,r2
rl a
mov r2,a
inc r0
mov p1,#0
djnz r1,dp01
SJMP XIAN
segtab: DB 0C0H,0F9H,0A4H,0B0H,99H;共阳字段码表
DB 92H,82H,0F8H,80H,90H
XIAN1:
MOV R0,#DII
MOV DPTR,#segtab
MOV A,@R0
MOVC A,@A+DPTR
mov r1,#4 ;扫描6次
mov r2,#0Eh ;从第一位开始
dp011: mov a,@r0
mov p0,a ;段码输出
mov a,r2 ;取位码
mov p1,a ;位码输出
acall delay1 ;调用延时
mov a,r2
rl a
mov r2,a
inc r0
mov p1,#0
djnz r1,dp011
SJMP XIAN
;;;;;;;显示延时子程序
delay1: mov r4,#03H ;延时子程序
aa1: mov r5,#0ffh
aa: djnz r5,aa
djnz r4,aa1
ret
end 展开
DII EQU 45H
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: ;;;;;;;;;;;;;;;;;;;;;;;;主程序
AJMP SAO ;调用扫描键盘程序
CJNE A,#0CH,M ;看输入的值是否等于设置高门限的值
AJMP GA ;调用高门限程序
M:CJNE A,#0DH,M1 ; 底
AJMP DI
M1:AJMP MAIN
;;;;;;;;;;;;;;;;;高门限程序如下
GA:
MOV GAO,0F7H
MOV GAO+1,0F7H
MOV GAO+2,077H
MOV GAO+3,0F7H
MOV R2,#4
AJMP XIAN
G: ;调用显示程序
LJMP SAO ;调用扫描键盘程序
MOV GAO,A ;
AJMP XIAN ;
DEC R2 ;
INC GAO ;
DJNZ R2,G ;
G1:LJMP XIAN
CJNE A,#0EH,G1
CLR A
MOV R2,00H
RET
;;;;;;;;;;;;;;底门限
DI:
MOV DII,0F7H
MOV DII+1,0F7H
MOV DII+2,077H
MOV DII+3,0F7H
MOV R2,#4
AJMP XIAN1
D: ;调用显示程序
LJMP SAO ;调用扫描键盘程序
MOV DII,A ;
AJMP XIAN1 ;
DEC R2 ;
INC DII ;
DJNZ R2,D ;
D1:LJMP XIAN1
CJNE A,#0EH,D1
CLR A
MOV R2,00H
RET
;;;;;;;;;;;;;;;;;;;;;;键盘扫描程序
SAO: MOV P2,#0F0H
LCALL DELAY
MOV A,P2
ANL A,#0F0H
CJNE A,#0F0H,L
AJMP SAO
L:LCALL DELAY
MOV A,P2
JB ACC.4,L1
AJMP Q1
L1:JB ACC.5,L2
MOV R3,#01H
AJMP Q1
L2:JB ACC.6,L3
MOV R3,#02H
AJMP Q1
L3:JB ACC.7,SAO
MOV R3,#03H
AJMP Q1
Q1:MOV P2,#0FH
LCALL DELAY
MOV A,P2
ANL A,#0FH
JB ACC.0,Q2
MOV R4,#00H
AJMP JIA
Q2:JB ACC.1,Q3
MOV R4,#04H
AJMP JIA
Q3:JB ACC.2,Q4
MOV R4,#08H
AJMP JIA
Q4:JB ACC.3,SAO
MOV R4,#0CH
AJMP JIA
JIA:MOV A,R3
ADD A,R4
RET
DELAY:MOV R6,#20H ;扫描延时程序
Q6:MOV R5,#0BBH
Q5:DJNZ R5,Q5
DJNZ R6,Q6
RET
;;;;;;;;显示程序1
XIAN:
MOV R0,#GAO
MOV DPTR,#segtab
MOV A,@R0
MOVC A,@A+DPTR
mov r1,#4 ;扫描6次
mov r2,#0Eh ;从第一位开始
dp01: mov a,@r0
mov p0,a ;段码输出
mov a,r2 ;取位码
mov p1,a ;位码输出
acall delay1 ;调用延时
mov a,r2
rl a
mov r2,a
inc r0
mov p1,#0
djnz r1,dp01
SJMP XIAN
segtab: DB 0C0H,0F9H,0A4H,0B0H,99H;共阳字段码表
DB 92H,82H,0F8H,80H,90H
XIAN1:
MOV R0,#DII
MOV DPTR,#segtab
MOV A,@R0
MOVC A,@A+DPTR
mov r1,#4 ;扫描6次
mov r2,#0Eh ;从第一位开始
dp011: mov a,@r0
mov p0,a ;段码输出
mov a,r2 ;取位码
mov p1,a ;位码输出
acall delay1 ;调用延时
mov a,r2
rl a
mov r2,a
inc r0
mov p1,#0
djnz r1,dp011
SJMP XIAN
;;;;;;;显示延时子程序
delay1: mov r4,#03H ;延时子程序
aa1: mov r5,#0ffh
aa: djnz r5,aa
djnz r4,aa1
ret
end 展开
3个回答
展开全部
这是一个4x4键扫描 加 一个8x8点阵 数字显示,仿真实例,供参考
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
XIAN,显示程序? 好像是个死循环。
更多追问追答
追问
我改过来过 还是不行
追答
按键、显示,很容易办到。
可以看看我的百度空间,里面有例程。
你到程序里面,高、低,都是什么?这就看不懂了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是“共阳”,位码怎么送“0”?
更多追问追答
追问
我用了一个非门的
追答
;这是我以前编的一段键盘扫描程序,你参考一下。
KEYSCAN:
MOV KEYVAL,#0
MOV KEYSCAN,#0EFH
LCALL GETKEY
MOV A,KEYTM
JZ KEYS1
MOV KEYVAL,A
SJMP KEYRTN
KEYS1:
MOV KEYSCAN,#0DFH
LCALL GETKEY
MOV A,KEYTM
JZ KEYS2
CLR C
ADD A,#4
MOV KEYVAL,A
SJMP KEYRTN
KEYS2:
MOV KEYSCAN,#0BFH
LCALL GETKEY
MOV A,KEYTM
JZ KEYS3
CLR C
ADD A,#8
MOV KEYVAL,A
SJMP KEYRTN
KEYS3:
MOV KEYSCAN,#7FH
LCALL GETKEY
MOV A,KEYTM
JZ KEYRTN
CLR C
ADD A,#12
MOV KEYVAL,A
KEYRTN:
LCALL CHGKEY
RET
GETKEY:
MOV KEYTM,#0
MOV A,KEYSCAN
MOV P3,A
NOP
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY
MOV R2,#10
LCALL DELAY
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY
MOV A,P3
ANL A,#0FH
MOV R7,A
SF:
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ SF
MOV A,R7
CJNE A,#0EH,NK1
MOV KEYTM,#1
SJMP NOKEY
NK1:
CJNE A,#0DH,NK2
MOV KEYTM,#2
SJMP NOKEY
NK2:
CJNE A,#0BH,NK3
MOV KEYTM,#3
SJMP NOKEY
NK3:
CJNE A,#07H,NOKEY
MOV KEYTM,#4
NOKEY: RET
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |