51单片机矩形键盘输入,用汇编写的,程序如下

按键设定为0-F,我看了很久也不知道哪里错了,每1行只能输入2个有效数字,意思就是有些数字显示不出来,求高手帮忙看看

ORG 0000H
LJMP START
ORG 0030H

START:MOV DPTR,#TABLE
MOV A,#00H
MOVC A,@A+DPTR
MOV P0,A

MAIN:ACALL KEY ;调用扫描程序 判断是否有键按下
JNZ KS1 ;若此时A的值不为0跳KS1,为0返回MAIN,初步确定没按键按下
LJMP MAIN

KS1:ACALL T12MS ;延时12ms去抖动
ACALL KEY ;再次扫描,确定是否有键按下
JNZ L1 ;若此时A的值不为0跳LOOP,为0返回MAIN,最终确定没按键按下
LJMP MAIN

KEY:MOV P2,#0FH ;给P2口初始值,列为1,行为0
MOV A,P2 ;读入当前P2口值
ANL A,#0FH ;屏蔽当前行的值,只比较列
CPL A ;A内容取反
RET

L1:JB P2.0,L2 ;扫描P2.0状态,如果P2.0为低电平确定按键所在列为第1列,为高电平跳L2扫描第2行
MOV P2,#0F0H
JB P2.4,H11 ;扫描P2.5状态,如果P2.4为高电平跳 ,确定按键位置为1列1行
JB P2.5,H12
JB P2.6,H13
LJMP H14

L2:JB P2.1,L3 ;扫描P2.1状态,为高电平跳L3扫描第3行
MOV P2,#0F0H
JB P2.4,H21
JB P2.5,H22
JB P2.6,H23
LJMP H24

L3:JB P2.2,L4 ;扫描P2.2状态,为高电平跳L4扫描第4行
MOV P2,#0F0H
JB P2.4,H31
JB P2.5,H32
JB P2.6,H33
LJMP H34

L4: MOV P2,#0F0H
JB P2.4,H41
JB P2.5,H42
JB P2.6,H43
LJMP H44

H11:MOV A,#00H ;1行1列对应按键为数字7

LJMP DC

H12:MOV A,#01H

LJMP DC

H13:MOV A,#02H

LJMP DC

H14:MOV A,#03H

LJMP DC

H21:MOV A,#04H

LJMP DC

H22:MOV A,#05H

LJMP DC

H23:MOV A,#06H

LJMP DC

H24:MOV A,#07H

LJMP DC

H31:MOV A,#08H

LJMP DC

H32:MOV A,#09H

LJMP DC

H33:MOV A,#0AH

LJMP DC

H34:MOV A,#0BH

LJMP DC

H41:MOV A,#0CH

LJMP DC

H42:MOV A,#0DH

LJMP DC

H43:MOV A,#0EH

LJMP DC

H44:MOV A,#0FH

LJMP DC

DC:MOVC A,@A+DPTR
MOV P0,A
LJMP MAIN

T12MS:MOV R7,#18H ;12ms延时程序
TM:MOV R6,#0FFH
TM6:DJNZ R6,TM6
DJNZ R7,TM
RET

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H ;字符表
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H
DB 8EH

END

键盘的值应该是行值加列值,你计算的都不对,而且扫描方式也不对啊,显示上也有点问题,在显示下个值的时候要对上次显示的值进行处理要关显示的追问

一定要用行进入列的子程序,然后加起来赋值吗?如果要赋的值没有规律这个方法不就是不行,请问有没有能1个程序给1个键赋值的,因为还有的键还有做成功能键,比如加减乘除

追答

呵呵 兄弟你别这么单独的对某个按键的功能进行分配,你要整体的对所有的按键整体来处理,首先要做的是按键的识别,然后才会有相应按键的功能去执行,而且执行完这个按键的程序后还要回到主程序对所有按键进行检测,以防止程序进入死循环,如果需要的话我这里有现成的程序c和汇编都有,祝你成功,我的qq是991011040

追问

大师你的QQ号不对啊,你把汇编写的发我邮箱吧 584613572@qq.com 谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-12
4×4的键盘,不需要这么长的程序。
即使是使用汇编语言,十几行,也就够了。
夜长梦多。

到我的百度空间看看吧。本回答被网友采纳
第2个回答  2012-06-08
单个数据不能一一显示吗? 位控制P1口 那段程序在哪?追问

P1目前还不需要控制,只要能对应输出0-F就行了 我看了很久 只有第1列的按键是可以的,同1行上的234列按键输出一样

追答

L1:JB P2.0,L2
MOV P2,#0F0H //这行是不是应该 MOV P2,#0FH ?

你的第一列显示应该也不是矩阵里对应的值吧,第二列的值和第一列的值反了,2,3,4列出来的是矩阵第一列的值。大概是这样,睡觉去了,如果不是自己在找找原因

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网