单片机原理与应用(第九章)

上传人:20****03 文档编号:169688467 上传时间:2021-02-27 格式:DOC 页数:8 大小:90.50KB
返回 下载 相关 举报
单片机原理与应用(第九章)_第1页
第1页 / 共8页
单片机原理与应用(第九章)_第2页
第2页 / 共8页
单片机原理与应用(第九章)_第3页
第3页 / 共8页
单片机原理与应用(第九章)_第4页
第4页 / 共8页
单片机原理与应用(第九章)_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《单片机原理与应用(第九章)》由会员分享,可在线阅读,更多相关《单片机原理与应用(第九章)(8页珍藏版)》请在金锄头文库上搜索。

1、第九章 MCS51单片机与键盘、显示器(LED)的接口9.1 MCS51单片机与键盘的接口9.1.1 键盘的工作原理及0按纽在按下和松开的瞬间(10ms内),都会产生电平的快速波动(抖动)。见P212的图9-1。1. 硬件消抖:添加电路。 采用双稳态的RS触发器(见P213的图9-2),但需使用三个接点的按键。 采用RC积分电路(见P213的图9-3)。 2. 软件消抖:当检测到有电平变化时,延时一段时间(10ms),跳过电平的抖动,再进行识别处理。在单片机的应用中都是使用软件消抖的方法,不添加电路。扳键式开关 9.1.2 扳键开关、拨盘开关与单片机的接口 扳键开关和拨盘开关一般用在不太需变换

2、状态的输入位识别中,最终变为另一稳定状态,一般不需消抖。常见的接口电路有:1. 直接P口输入单个扳键开关例:针对下图电路编程实现:当K闭合,LED持续闪动(每200ms一次);当K断开则关闭LED。设:Delay300为延时300ms的子程序。KBIT P1.1Main: SETB K ;P口作为输入的位,在测试前必须先置为“1”。JB K,LB ;测试开关的电平,为“1”则转移到LB。LA: SETB P1.0 ;输出高电平,闪亮 LEDLCALL Delay200 ;延时200ms P1.0CLR P1.0 ;输出低电平,闪灭 +5V LCALL Delay200 ; 延时200ms 80

3、51LJMP Main ;循环测试开关 RLB: CLR P1.0 ;输出低电平,熄灭 K SJMP Main ;循环测试开关 P1.1 多个拨盘开关(排键) +5V多个拨盘开关一般用于静态的状态位输入,在程序的初始 8051段中识别。 P1.0 对应的控制程序: P1.1 MOVP1,#0FFH P1.2 MOVA,P1 P1.3 P1.4 P1.5 P1.6 P1.7 2. 扩展I/O口输入 +5V 8051P0.0 1Y1 1A1 P0.1 1Y2 1A2 P0.2 1Y3 1A3 P0.3 1Y4 1A4 P0.4 2Y1 2A1 P0.5 2Y2 2A2 P0.6 2Y3 2A3 P

4、0.7 2Y4 2A4 ALE 1EN P2.7 2EN RD OR 74LS244 对应的控制程序:MOVDPTR,#7FFFHMOVXA,DPTR按纽式按键按钮式按键在按下和松开的瞬间会产生电位的抖动,识别的软件需加以处理,运行的结果才不会异常。9.1.3 独立式键盘接口设计 +5V 8051 P1.0 P1.1 P1.2 K2 K1 K0 按纽式按键的识别(程序段):按下后还得有键释放的处理。K0EQUP1.0K1EQUP1.1K2EQUP1.2Main: AN0:SETBK0JBK0,AN1;P1.0=1表示按键K0没按下,转处理其他按键。 LCALLDelay10;P1.0=0表示按

5、键按下,延时10ms(消除抖动)SETBK0 JBK0,AN1;再测,P1.0=1是按键抖动,转处理其他按键。LCALLFUN_K0 ; K0键的处理子程序LA:SETBK0;键释放处理。JNBK0,LA ;P1.0=0表示按键K0没松开,转键释放处理。 LCALLDelay10;P1.0=1表示按键松开,延时10ms(消除抖动)SETBK0 JNBK0,LA ;再测,P1.0=0是按键抖动,转键释放处理。LJMPMainAN1:SETBK1JBK1,AN2;P1.1=1表示按键K1没按下,转处理其他按键 例1:单个7段码LED显示器倒计数程序。KBITP2.0SEQU20HORG0000HM

6、ain:MOVS, #09HMOVP3, #0FFH ; 显示空L1:SETBKJBK, L1 ; K=1, 无键入L2: MOVA, S ; K键按下的处理:显示数值S(90) ,SS-1MOVDPTR, #TAB MOVCA, A+DPTR ; 取出数值S对应的LED显示段码MOVP3, A ; 显示数值S(09)LCALDelay ; 延时1sMOVA, SJZMainDECSSJMPL2TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0C0HDelay:MOVR3, #5 ; 5*200ms=1000ms=1sDe0:MOVR4,

7、#200 ; 200*1ms=200msDe1:MOVR5, #250 ; 250*4us=1msDe2:DJNZR5, De2 ; 4us,设 f = 6MHzDJNZR4, De1DJNZR3, De0RETEND例2:按键计数程序。(有异常的程序,按键没有消抖处理)KBITP2.0SEQU20HORG0000HMain:MOVS, #00H ; S置初值0MOVP3, #0C0H ; 显示0L1:SETBKJBK, L1 ; K=1, 无键入INCS ; K键按下的处理:SS+1, 显示数值S(09)MOVA, SMOVDPTR, #TAB MOVCA, A+DPTR ; 取出数值S对应

8、的LED显示段码MOVP3, A ; 显示数值S(09)MOVA, SCJNEA, #10, L1SJMPMainTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0C0HEND(正确的程序,按键进行消抖处理)KBITP2.0SEQU20HORG0000HMain:MOVS, #00H ; S置初值0MOVP3, #0C0H ; 显示空L1:SETBKJBK, L1 ; K=1, 无键入LCALLDelay10 ; 消抖处理JBK, L1 ; K=1, 是抖动INCS ; K键按下的处理:SS+1, 显示数值S(09)MOVA, SMOVDP

9、TR, #TAB MOVCA, A+DPTR ; 取出数值S对应的LED显示段码MOVP3, A ; 显示数值S(09)L2:SETBK JNBK, L2 ; K=0, 键没有松开LCALLDelay10 ; 消抖处理JNBK, L2 ; K=0, 是抖动MOVA, SCJNEA, #10, L1SJMPMainTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0C0HDelay10:MOVR4, #10 ; 10*1ms=10msDe1:MOVR5, #250 ; 250*4us=1msDe2:DJNZR5, De2 ; 4us,设 f = 6MHzDJNZR4, De1RETEND例3:按一下按钮K,LED点亮;再按一下K则关闭LED。设:Delay10为延时10ms的子程序。程序段1:(会异常)K BIT P1.1LED BIT P1.0L1: SETBK LEDJBK,L1 ; 判键按下 P1.0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号