收藏 分销(赏)

键盘扫描子程序.doc

上传人:xrp****65 文档编号:7666522 上传时间:2025-01-11 格式:DOC 页数:4 大小:121KB 下载积分:10 金币
下载 相关 举报
键盘扫描子程序.doc_第1页
第1页 / 共4页
键盘扫描子程序.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
键盘扫描 图a 4*4键盘 图b 4*3键盘 扫描步骤: 1. P2.3=0行扫描初值; 2. P2左移检测列; 3. P2右移扫描行; 4. 计数指针到表中取码(读入键盘值由表中的数据一一对应)。 ;********************** 键盘扫描子程序 SCANKEY ********** ; 4*4键盘扫描子程序 ; 行接P2.0-P2.3,列接P2.4-P2.7 ; 调用该子程序扫描一遍键盘 ; 键盘如有按键,则标志位FLAG_KEY=1 ; 输入键盘码放入键盘存储器KEYBUFF ; 面板上键盘为 1 2 3 C ; 4 5 6 D 7 8 9 E ; A 0 B F ;*************************************** SCANKEY: MOV R3,#0F7H; 扫描初值(P2.3=0) MOV R2,#00H; R2为取键盘码指针 L2: MOV A,R3; 开始扫描 MOV P2,A; 扫描值输出至P2口 MOV A,P2; 读入P2值,判断是否有键按下 MOV R4,A; 存入P2值,以判断是否放开按键 SETB C; 后用带循环移位 MOV R5,#04H; 先扫描4列(如为4*3键盘此处MOV R5,#03H) L3: RLC A; 先从P2.3相接这一行P2.4-P2.7哪个键按下了 JNC KEYIN ; C=0则有键按下,跳至KEYIN INC R2; C=1表明没有键按下,取码指针加1 DJNZ R5,L3; 3列扫描完毕? MOV A,R3; 扫描值载入 SETB C RRC A; 扫描下一行 MOV R3,A; 存回扫描寄存器 JC L2; 4行扫完?没有则回L2继续扫描 RET; 一遍扫描完返回 ;------------------------------------------------- KEYIN: MOV R7,#60; 30MS消抖动(晶振12MHZ) D2: MOV R6,#248 DJNZ R6,$ DJNZ R7,D2 D3: MOV A,P2; 读入P2值,判断换键是否松开 XRL A,R4; 与上次值XX比较 JZ D3; ACC=0表示未放 MOV A,R2 ; 按钮已松开,取码指针载入 MOV DPTR,#KEYSCAN_TAB MOVC A,@A+DPTR SETB FLAG_KEY; 键盘扫描一次有输入标志位置位 MOV KEYBUFF, A ;键盘码放入键盘存储器KEYBUFF RET ;=========================================== ; 键盘扫描码 KEYSCAN_TAB: DB 01H,02H,03H,0CH DB 04H,05H,06H,0DH DB 07H,08H,09H,0DH DB 0AH,00H,0BH,0FH ;----------------------------------- ;***************键盘扫描结束**************************** ;********************** 键盘扫描子程序 SCANKEY ********** ; 4*3键盘扫描子程序 ; 行接P2.0-P2.3,列接P2.4-P2.6 ; 调用该子程序扫描一遍键盘 ; 键盘如有按键,则标志位FLAG_KEY=1 ; 输入键盘码放入键盘存储器KEYBUFF ; 面板上键盘为 1 2 3 4 ; 5 6 7 8 ; 9 0 A B ;*************************************** SCANKEY: MOV R3,#0F7H; 扫描初值(P2.3=0) MOV R2,#00H; R2为取键盘码指针 L2: MOV A,R3; 开始扫描 MOV P2,A; 扫描值输出至P2口 MOV A,P2; 读入P2值,判断是否有键按下 MOV R4,A; 存入P2值,以判断是否放开按键 SETB C MOV R5,#03H; 先扫描3列 RLC A ; 由于P2.7没有接,故先左移一位,让P2.6位进入Cy L3: RLC A; 先从P2.3相接这一行P2.4-P2.6哪个键按下了 JNC KEYIN ; C=0则有键按下,跳至KEYIN INC R2; C=1表明没有键按下,取码指针加1 DJNZ R5,L3; 3列扫描完毕? MOV A,R3; 扫描值载入 SETB C RRC A; 扫描下一行 MOV R3,A; 存回扫描寄存器 JC L2; 4行扫完?没有则回L2继续扫描 RET; 一遍扫描完返回 ;------------------------------------------------- KEYIN: MOV R7,#60; 30MS消抖动(晶振12MHZ) D2: MOV R6,#248 DJNZ R6,$ DJNZ R7,D2 D3: MOV A,P2; 读入P2值,判断换键是否松开 XRL A,R4; 与上次值XX比较 JZ D3; ACC=0表示未放 MOV A,R2 ; 按钮已松开,取码指针载入 MOV DPTR,#KEYSCAN_TAB MOVC A,@A+DPTR SETB FLAG_KEY; 键盘扫描一次有输入标志位置位 MOV KEYBUFF, A ;键盘码放入键盘存储器KEYBUFF RET ;=========================================== ; 键盘扫描码 KEYSCAN_TAB: DB 04H,08H,0BH ;A,B代表*,# DB 03H,07H,0AH DB 02H,06H,00H DB 01H,05H,09H ;----------------------------------- ;***************键盘扫描结束****************************
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服