AT89C51与输入外设与输出外设接口新设计.ppt

AT89C51与输入外设与输出外设接口新设计.ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图10-4:4位8段LED动态显示电路。其中段码线占用一个8位I/O口,而位选线占用一个4位I/O口。 图10-8为82C55扩展I/O口的独立式按键接口电路。 ADD A,#0DH ; 加上偏移量 MOVC A,@A+PC ; 查段码表SEGTAG, 取出段码 MOV SBUF ,A ; 将段码送SBUF DL1: JNB TI,DL1 ; 输出段码, 查询TI状态, 1个字节的段码 ;输出完否? CLR TI ; 1个字节的段码输出完, 清TI标志 DEC R0 ; 指向下一个显示数据单元 DJNZ R7,DL0 ; 段码个数计数器R7是否为0, 如不为0, 继 ;续送段码 CLR P3.3 ; 8个段码输出完毕, 关闭显示器输出 RET ; 返回 SEGTAB:DB 0C0H,0F9H,0A4H,0B0H,99H ; 共阳极段码表, 0,1,2,3,4 DB 92H,82H,0F8H,90H ; 5,6,7,8,9 DB 88H,83H,0C6H,0A1H,86H ; A,B,C,D,E DB 8FH,0BFH,8CH,0FFH,0FFH ; F,-,P, 暗 键盘扫描子程序: KEYI: MOV A,#00H ; 判断有无键按下,所有列线为0的编码送A MOV SBUF,A ; 扫描键盘的(8)号74LS164输出为00H, ;使所有列线为0 KL0: JNB TI,KL0 ; 串行输出完否? CLR TI ; 串行输出完毕, 清TI KL1: JNB P3.4,PK1 ; 第一行有闭合键吗?如有, 跳PK1进行处理 JB P3.5,KL1 ; 在第二行键中有闭合键吗?无闭合键跳KL1 PK1: ACALL DL10 ; 调用延时10ms子程序DL10, 软件消除抖动 JNB P3.4,PK2 ; 判断是否由抖动引起? JB P3.5,KL1 PK2: MOV R7,#08H ; 不是抖动引起的 MOV R6,#0FEH ; 判别是哪一个键按下, FEH为最左一列为低 MOV R3,#00H ; R3为列号寄存器 MOV A,R6 KL5: MOV SBUF,A ; 列扫描码从串行口输出 KL2: JNB TI,KL2 ; 等待串行口发送完 CLR TI ; 串行口发送完毕, 清TI标志 JNB P3.4,PKONE ; 读第一行线状态, 第一行有键闭合, 跳 ;PKONE JB P3.5,NEXT ; 读第二行线状态, 是第二行某键否? MOV R4,#08H ; 第二行键中有键被按下, 行首键号08H ; 送R4 AJMP PK3 PKONE: MOV R4,#00H ; 第一行键中有键按下, 行首键号00H送 ; R4 PK3: MOV SBUF,#00H ; 等待键释放, 发送00H使所有列线为低 KL3: JNB TI,KL3 CLR TI ; 发送完毕, 清标志 KL4: JNB P3.4,KL4 ; 判行线状态 JNB P3.5 MOV A,R4 ; 两行线均为高, 说明键已释放 ADD A,R3 ; 计算得键码→A RET NEXT: MOV A,R6 ; 列扫描码左移一位, 判下一列键是否按下 RL A MOV R6,A ; 记住列扫描码于R6中 INC R3 ; 列号增1 DJNZ R7,KL5 ; 列计数器R7减1, 8列键都检查完否? AJMP KEYI ; 8列键扫描完毕, 开始下一个键盘扫描周期 DL10: MOV R7,#0AH ; 延时10ms子程序 DL: MOV R6,#0FFH DL6: DJNZ R

文档评论(0)

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

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

1亿VIP精品文档

相关文档