- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9.8键盘接口精要
* * §9.8 键盘接口 一、键盘工作原理??? 1. 单键输入原理 键盘——输入设备???? 按结构分:1)独立式:由I/O口线组成单键电路?????????????? 2)矩阵式:由排列成矩阵形式一系列按键组成???? 按编码分:1)全编码键盘???? 2)非编码键盘:软件查询 Kn:?? 0-7? 八个按键?????? P1.n=‘0’ 表示按键?????? P1.n=‘1’ 表示释放 T1,T3:为键抖动期(约5-10ms) ?? T2: 按键闭合稳定期????????? T0,T4:? 键释放期?? 在CPU查询键之前就消除抖动 T1??? t2??? t3 T0 T4 消抖法:1)软件延时10ms左右 ???????? 2)采用RS触发器 程序清单:START:MOV? A,#0FFH? MOV? P1,A?;? ???????????? MOV ??A,P1?;???????????? ?????????????JNB??? ACC.0,K0;? JNB??? ACC.1,K1;??? ????????????? ???????? .............................?????????????JNB??? ACC.7,K7; ??K0 :LJMP PROM0??????????K1 :LJMP PROM1???????? ................... K7 :LJMP PROM7????????????????? 缺点:一键占用一I/O线?键多时, 不经济 优点:简单?主要用于命令键场合 ?按键功能程序: PROM0:....... ?????????????LJMP? START???????????????????........ PROM7:LJMP? START????????? 行线与列线之间接入按键?? 以4*4为例(共16键)1)? 键结构 2.矩阵式键盘 ????行线 P1.0——P1.3为检测输入线?????列线 P1.4——P1.7为扫描输出线 ?????键盘无键闭合时,P1.0—P1.3检测输入线全部为高电平‘1’ 键盘有键按下时,如4号键按下,此时P1.0检测输入电平 由P1.7的扫描输出电平所决定 2)读键方式:扫描读键方式 输出 全为1,无按键 扫下一列 有0出现,由行列 决定键号 P1.7=1 P1.6=1 P1.5=1 P1.4=0 扫P1.4列 读行线 P1.0 P1.1 P1.2 P1.3 根据按下键之行,列号求键号,可采用计算法或查表法 二.单片机对非编码键盘的扫描 1. 程序扫描方式 单片机系统中,多在CPU闲时,方调用键盘扫描子程序,查询键盘情况 扫描键盘子程序有以下几个部分????? 1)判断有无键按下???????? ? 令所有列线为“0”,查行线有无“0”,有则有键按下, 接着去查出键号,为“1” 无键按下,转显示子程序 ????? 2)有键按下,消抖,软件方法。延时5-10ms ?????? 3)扫描键盘,得按键参数,即行列值 ????? 4)计算键号(用计算法) ????? 5)判断闭合键是否释放 ????? 6)执行键操作子程序 ???? 7)返回 程序流程图: Y N 键盘输入子程序 清单:??KEY:MOV? P1,#0FH;????????列全为0???????????? MOV? A ,P1;????? ???????读行???????????? ANL?? A,#0FH;??????? 保留行值???????????? CJNZ? A,#0FH,KEY1;? 判断有键闭否,有则转。???????????? LCALL? DIR;?????????? 无则调显示???????????? RET? KEY1:LCALL? DIR;????????????有调显示?????????????LCALL? DIR;???????????重复调用延时作用,以便消抖?????????????MOV? A,#0EFH;?????? 列扫描初值P1.4=0?????????????MOV? R2,A;??????????? 把列值存入R2?????????????MOV? R4,#00H;??????? 置该列首键号 ??? LK:? ?MOV? P1,A;???????????输出列值????????????? MOV? A,P1;??????????
文档评论(0)