存储器扩展IO扩展[第章]2.ppt

  1. 1、本文档共103页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
K1: … … K7: … LOOP: SJMP LOOP ORG 0200H KEY: MOV DPTR, #4001H ; A口地址 MOVX A, @DPTR ; 读入A口状态 XRL A, #0FFH ;异或,取反值 JZ RETURN ; 无键转RETURN ACALL DEL ; 有键则延时消抖 MOVX A, @DPTR ; 再读入口状态 MOV R3, A ;按键原值 XRL A, #0FFH ;按键取反 JZ RETURN ; 无键转RETURN CJNE R3, #0FEH, NEXT1 ; 不是0#转NEXT1 MOV R4, #00H ; 将键号送入R4 SJMP COM ; 转到COM处执行 NEXT1: CJNE R3, #0FDH, NEXT2 ; 不是1#键转NEXT2 A1010 B1011 C1100 D1101 E1110 F1111 MOV R4, #01H ; 将键号送入R4 SJMP COM ; 转到COM处执行 NEXT2: CJNE … … NEXT8: CJNE R3, #7FH, RETURN ; 不是7#转RETURN MOV R4, #07H ; 将键号送入R4 COM: MOVX A, @DPTR ; 读入A口状态,等释放 XRL A, #0FFH ;键值取反 JNZ COM ; 等待,直到按键释放 MOV A, R4 ; 将R4内容送入A SJMP RETURN1 ; 返回 RETURN: MOV R4, #0FFH ; 将FFH送入R4 RETURN1: RET DEL: MOV R5, #18H ; 延时12ms DEL0: MOV R6, #0FFH DEL1: DJNZ R6, DEL1 DJNZ R5, DEL0 RET 行线 列线 键盘开关矩阵 按键处于行线和列线的交叉处,用于接通行线和列线 节省I/O口线 可以是扩充的I/O口 正逻辑、负逻辑(高电平有效、低电平有效) 先扫描(行)判断是否有键按下,再逐检查具体按键 列线输出00H,读入行线,若行线为全1,无按键输入;若行线不全为1,则有键输入 列扫描法 逐列给0值扫描,可判断列号和行号,从而得出按键位置 反转法 5.4.2 行列式非编码键盘的设计 使被扫描的列为低电平,其他所有的列均为高电平,然后检测各行线的状态 若各行线都为高电平,则被按下的键不在此列,继续扫描下一列; 若行线不全为高电平,则被按下的键在此列,而且是在与低电平行线相交的交点上,记录此时的列值和该行的首键号,即可知道被按下键的键号(被按键的键号=该键所处行的首键号+列值),然后再利用查表指令即可求得该按键的键值 例5-6 根据图5-38编制按键扫描子程序,若无键按下,则使(A)=FFH;若有键按下,则通过列扫描获得被按键的键值(图中标识的是各键的键号) 1.列扫描法 检测 是否 按键 A1010 B1011 C1100 D1101 E1110 F1111 准备 列值 扫描 行值 地址 地址 键值 先由行线输出全0信号,接着由列线读入表示按键状态的代码 当有键被按下时,则相应的列线状态一定为0 然后,将列线读入的代码由列线输出,然后读行线的状态,将先后两次读入的表示按键状态的代码组合,即为被按键的键值 2.反转法 保持被按下按键所在的列为0 本章结束 使用定时器/计数器前,要先向定时器/计数器高字节送入数值,再向低字节送入数值,最后再将命令字写入命令寄存器

文档评论(0)

taotao0a + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档