关于C51单片机矩阵式键盘编程的一些问题

ORG00HAJMPLISTORG03HAJMPIN_0ORG30HLIST:MOV30H,#11H//键盘码表MOV31H,#21HMOV32H,#41HMOV33H,... ORG 00H
AJMP LIST
ORG 03H
AJMP IN_0
ORG 30H
LIST: MOV 30H,#11H //键盘码表
MOV 31H,#21H
MOV 32H,#41H
MOV 33H,#81H
MOV 34H,#12H
MOV 35H,#22H
MOV 36H,#42H
MOV 37H,#82H
MOV 38H,#14H
MOV 39H,#24H
MOV 3AH,#44H
MOV 3BH,#84H
MOV 3CH,#18H
MOV 3DH,#28H
MOV 3EH,#48H
MOV 3FH,#88H
MOV 40H,#00H
MAIN:SETB EA //开中断
SETB EX0
SETB IT0
SETB PX0
MOV P1,#0F0H //检测是否有键按下
ACALL KCS
MOV R2,A
MOV P1,#0FH
ACALL KCS1
ADD A,R2
MOV R1,A
ACALL KCS2 //检测按键是否释放
MOV R0,#30H
MOV A,R1
AJMP KEY //跳转到按键功能程序
KCS:MOV A,P1
ANL A,#0FH
JZ KCS
RET
KCS1:MOV A,P1
ANL A,#0F0H
JZ KCS1
RET
KCS2:MOV A,P1
ANL A,#0F0H
JNZ KCS2
RET
KEY:CLR PSW.7 //查询键盘码表
MOV A,R1
SUBB A,@R0
JZ TMP
INC R0
AJMP KEY
TMP:CLR PSW.7 //将按键数值赋给A
MOV A,R0
SUBB A,#30H
AJMP SUM
SUM:ADD A,R3 //将所有按下的数值求和
MOV R3,A
AJMP MAIN
IN_0: //外部中断0将求和结果输出
MOV A,R3 MOV P0,A
RETI
END
我的疑惑是:我在用KEIL和PROTEUS联调时,单步执行时可以得出想要的结果,但是全速执行时得的结果却是单步执行结果的两倍,忘高手解惑,小弟感激不尽.
电路如图
展开
 我来答
cocoguojia
2009-12-07 · TA获得超过4519个赞
知道小有建树答主
回答量:1097
采纳率:100%
帮助的人:547万
展开全部
按键要消抖!很重要!要不然你的结果会是2 3 4 倍的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式