网站大量收购闲置独家精品文档,联系QQ:2885784924

南京师范大学电气与自动化工程学院单片机原理与接口技术课件第十章 键盘显示器接口及AD、DA.ppt

南京师范大学电气与自动化工程学院单片机原理与接口技术课件第十章 键盘显示器接口及AD、DA.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.3.2 DAC0832接口 * 10 单片机典型外围接口技术 10.1 键盘接口 图10-4 独立式键盘接口电路 KEYSCAN:MOV P1,#0FFH ;置P1口为输入态 MOV A,P1 ;读入键值 LCALL D10ms ;延时10ms MOV B,P1 ;再读键值 CJNE A,B,GORET ;两次键值不一致,直接返回 JNB ACC.0,KEY0 ;0号键按下,转 0号键功能程序 JNB ACC.1,KEY1 ;1号键按下,转1号键功能程序 JNB ACC.2,KEY2 ;2号键按下,转2号键功能程序 GORET:RET ;从键盘服务子程序返回 KEY0: LCALL FUNC0 ;执行0号键功能服务程序 RET ;从键盘服务子程序返回 KEY1: LCALL FUNC1 ;执行1号键功能服务程序 RET ;从键盘服务子程序返回 KEY2: LCALL FUNC2 ;执行2号键功能服务程序 RET 10.1.1 按键去抖动 10.1.3 矩阵式键盘 ① 判别是否有键按下 首先使所有行线为低电平,当键盘上没有键按下时,所有列线为高电平;当有任一键被按下时,总有一根列线为低电平。 ② 识别按键位置(行扫描法) ③ 键值的计算 设键盘为KH×KL矩阵键盘,其中KH为行数,KL列数。如果由行扫描法得按下按键的行号和列号分别为m和n,则所按下按键的键值为:m×KL+n。 图10-5 4×4矩阵键盘电路图 图10-4其键盘扫描程序如下: KEYSCAN: ACALL KSCAN ;查有没有键按下 JZ GORET ;(A)=0表示没有键按下,返回 LCALL D10ms ;有键按下,延时10ms ACALL KSCAN ;再查有没有键按下 JZ GORET ;(A)=0表示没有键按下,返回 ACALL KEYNUM ;有键按下,行扫描法确定键值 CLR C RLC A RLC A ;键值×4 MOV DPTR,#FTAB ; JMP @A+DPTR;散转,执行所按键相应功能子程序 GORET: RET FTAB:LCALL FUNC0 ;调用0号键功能子程序 RET LCALL FUNC1 ;调用1号键功能子程序 RET ┇ LCALL FUNC15 ;调用15号键功能子程序 RET LCALL ERRSUB ;键值为16,异常处理 RET DONE: SJMP $ SJMP DONE SJMP DONE SJMP DONE SJMP DONE ;KSCAN为判有无键按下子程序,(A)≠0表示有键按下 KSCAN: MOV P1,#0F0H ;行线置低电平,列线置输入态 MOV A,P1 ;读列线数据 CPL A ;A取反 ANL A,#0F0H ;屏蔽行线 RET ;KEYNUM为求键值子程序,键值在累加器A中 KEYNUM:MOV R6,#00H ;键初值赋0,R6存放每行最左键的键值 MOV R7,#0FEH ;准备扫描第0行 LOOP: MOV P1,R7 ;逐行输出0扫描 MOV A,P1 ;读列线数据 SWAP A ;A的高4位和低4位互换 JB ACC.0,COL1 ;第0列无键按下,转查第1列 MOV A,#0 ;第0列有键按下,0→(A) SJMP KSOLVE ;转求键值 COL1: JB ACC.1,COL2 MOV A,#1 SJMP KSOLVE COL2: JB ACC.2,COL3 MOV A,#2 SJMP KSOLVE COL3: JB ACC.3,NEXT ;4列均无键按下,本行扫描结束 MOV A,#3 ;第3列有键按下,3→(A) SJMP KSOLVE NEXT:MOV A,R7 ;准备扫描下一行 JNB ACC.3,ERR ;扫描完,未读到键值,异常处理 RL A ;R7循环左移一位 MOV R7,A ;得下一行行扫描字 ADD R6,#4 ;得下一行首键键值,因每行有4个按键 SJMP LOOP ;转LOOP,扫描下一行 ERR: MOV A,#16 ;键值赋16表示出错! RET KSOLVE:ADD A,R6 ;得键值 PUSH ACC ;键值压栈 WATT:ACALL KSCAN ;查按键释放否? JNZ WATT ;没有释放,等待 POP ACC RET D10ms:MO

文档评论(0)

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

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

1亿VIP精品文档

相关文档