1 / 69

第十章 人机接口技术

第十章 人机接口技术. 任务八 矩阵键盘控制数码管 10.1 LED 数码管显示 10.2 键盘接口技术. 任务八 矩阵键盘控制数码管. 1. 电路原理图 矩阵键盘控制数码管电路原理图 见图 10-1 所示。 2. 参考程序 ORG 0000 H LJMP MAIN ORG OOORH LJMP DISP ORG 0050 H MATN: MOV SP , #60 H MOV P2 , #00 H ; 熄灭所有数码管

dragon
Download Presentation

第十章 人机接口技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十章 人机接口技术 • 任务八 矩阵键盘控制数码管 • 10.1 LED数码管显示 • 10.2 键盘接口技术

  2. 任务八 矩阵键盘控制数码管 • 1.电路原理图 • 矩阵键盘控制数码管电路原理图见图10-1所示。 • 2.参考程序 • ORG 0000 H • LJMP MAIN • ORG OOORH • LJMP DISP • ORG 0050 H • MATN: MOV SP, #60 H • MOV P2, #00 H ;熄灭所有数码管 • MOV TMOD, #01 H;设置定时器为工作方式 下一页 返回

  3. 任务八 矩阵键盘控制数码管 • MOV TLO, #OFOH;设置定时器初值 • MOV THO, #OD8H • MOV 40H, #10H;清显示缓冲区,10H为消隐 • MOV 41H,#10H • MOV 42H,#10H • MOV 43H,#10H • MOV R4,#3 FH;显示缓冲区指针赋初值 • EFTB TRO ;启动定时器 • SETB EA ;开中断 上一页 下一页 返回

  4. 任务八 矩阵键盘控制数码管 • M1 : LCALL KEY ;调用键盘子程序,返回键码 • CJNE A.#OFFH .M2;根据返回值判断是否有键按下 • SJMP M1 ;无键按下,循环 • M2: MOV 40H,41H;有键按下,显示内容依次左移 • MOV 41H,42H • MOV 42H,43H • MOV 43H,A ;键值存显示缓冲区 • SJMP M1;继续循环 • KFY: LCALL KSL;调用判断按键闭合子程序,检查是否 • ;有按键闭合 • JNZ LK1 A非0,说明有键按下 • LJMP KND无按键返回 上一页 下一页 返回

  5. 任务八 矩阵键盘控制数码管 • LK1: LCALL DELAY ;有键闭合时延时lOms,去抖动 • JNZ LK2;延时lOms以后,再次检查是否有按键 • ;闭合 • AJMP KND无按键返回 • LK2: MOV R2,#OF7H ;扫描初值送R2 • MOV R3_#00 H;回送初值送R3 • LK3: MOV A ,R2 • MOV P1,A ;扫描初值送P1口 • MOV A, P1 取回送线状态 • JM ACC.7,ONE;ACC.7=1,第0行无键闭合,转ONE 上一页 下一页 返回

  6. 任务八 矩阵键盘控制数码管 • MOV A,#0 ;装第0行行值 • LJMP LKP ;转计算键码 • ONE: JB ACC.6 TWO ;ACC.6 = 1,第0行无键闭合,转TWO • MOV A, #04 H ;装第1行行值 • LJMP LKP ;转计算键码 • TWO: JB ACC.5 THR ;ACC.5 = 1,第0行无键闭合,转THR • MOV A, #08H ;装第2行行值 • LJMP LKP ;转计算键码 • THR: JB ACC.4 NEXT;AC C.4=1,第0行无键闭合,转NEXT • MOV A, #0CH ;装第3行行值 上一页 下一页 返回

  7. 任务八 矩阵键盘控制数码管 • LKP: ADD A,R3 ;计算键码 • PUSH ACC ;把键码推人堆栈保存 • LK4: LCALL DELAY ;延时 • LCALL KS1 ;判断键是否松开,若闭合再延时 • CPL A • JNZ LK3 ;键仍然闭合,继续延时 • POP ACC ;按键起,键码回送A • RET 上一页 下一页 返回

  8. 任务八 矩阵键盘控制数码管 • NEST: INC R3;列号加1 • MOV A, R2 • JNB ACC.0, KND ;第0位为0,已经扫描完毕, 转KND • RR A ;未扫描完,循环右移一位 • MOV R2,A • LJMP LK3 ;转去扫描下一列 • KND: MOV A, #0FFH;无按键返回码 • RET ;返回 上一页 下一页 返回

  9. 任务八 矩阵键盘控制数码管 • KS1: MOV P1, #OFH;所有列置低电平 • MOV A, P1;读取P1口状态 • CPL A • ANL A, #0FH;屏蔽高4位,保留低4位信息 • RET • DELAY: MOV R7, #50;延时子程序 • D1: MOV R6 , #1OO • DJNZ R6, • DJNZ R7,D1 • RET 上一页 下一页 返回

  10. 任务八 矩阵键盘控制数码管 • DISP: MOV TL0, #OFOH;时间常数重新赋值 • MOV THO, #0D8H • PUSH ACC;保护中断现场 • MOV DPTR ,#TAR;取表格地址 • INC R0;指向下一个显示缓存 • CJNE RO, #44H,DIS1:判断是否所有显示缓存都已 经显示 • MOV RO, #3 FH;显示完毕,指针重新赋初值 • MOV R4,#80 H;设置显示位 • DIS1: MOV A, @R0;取要显示的数 上一页 下一页 返回

  11. 任务八 矩阵键盘控制数码管 • MOVC A, @A+DPTP;取显示段码 • MOV PO,A ;输出段码,点亮正确的段 • MOV P2, R4 ;输出位控制,点亮正确的位 • MOV A,R4 ;位控制字右移,为下一个位点亮做准备 • RR A • MOV R4 ,A • POP ACC ;恢复现场 • RETI 中断返回 上一页 下一页 返回

  12. 任务八 矩阵键盘控制数码管 • TAB: DB3FH,06H,5BH,4FH,66H,6DH • ;0,1,2,3,4,5, • DB 7DH,07 H,7FH,6FH,77 H,7CH • ;6,7,8,9,A,B, • DB 58H,SEH,7BH,71H,00 H • ;C,D,E,F, • END 上一页 下一页 返回

  13. 任务八 矩阵键盘控制数码管 • 3.程序仿真及烧录 • 把这段程序在WAV6000中编辑、汇编,用软件仿真运行、调试无误,把得到bin格式或者hex格式的日标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。把单片机插人实验板插座里,上电运行,观察运行结果。 上一页 返回

  14. 10.1 LED数码管显示 • 为方便人们观察和监视单片机的运行情况,通常把数码显示器作为单片机的输出设备,用来显示单片一机的键输人值、中间信息及运算结果等。在单片机应用系统中,常用的显示器主要有LE D(发光二极管显示器)和LCD(液晶显示器)。这两种显示器具有耗电省、成本低廉、配置灵活、线路简单、安装方便、耐振动、寿命长等优点。但因其显示内容有限,且不能显示图形,因而其应用有局限性,近年来对某些要求较高的单片机应用系统开始配置简易形式的CRT接口。因为日前应用最广泛的还是数码显示器,所以本节将以LE D显示器为例进行介绍。 下一页 返回

  15. 10.1 LED数码管显示 • 10.1.1 LED显示器的结构与原理 • LE D显示器是由发光二极管显示字段的显示器件,也可称为数码管。其外形结构如图10-2(a)所示,由图可见它由8个发光二极管(以下简称字段)构成;通过不同的组合可用夹界示0一9,A一F及小数点“.”等字符 • 数码管通常有共阴极和共阳极两种结构接法,见图10-2(b)和(c)。图中电阻为外接的,一般共阳极数码管必须外接电阻,共阴极不一定外接电阻。共阴极数码管的发光二极管阴极共地,当某发光二极管的阳极为高电平(一般为+5V)时,此二极管点亮;共阳极数码管的发光二极管是阳极并接到高电平,对于需点亮的发光二极管使其阴极接低电平(一般为地)即可。 上一页 下一页 返回

  16. 10.1 LED数码管显示 • 显然,要显示某字形就应使此字形的相应字段点亮,实际就是送一个用不同电平组合代表的数据至数码管。这种装人数码管中显示字形的数据称字形码。格式一七段LE D显示器字形代码见表10-1 • 10.1.2 显示器的工作方式 • LE D显示器的工作方式有静态显示和动态显示两种。3位静态显示器接口见图10-3所示。 • 1.静态显示方式 • 所谓静态显示,就是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。例如,七段显示器的a, b, c, d, e, f导通且b和·截止时显示“0”;。这种显示方式的每一个七段码显示器需要一个8位输出口控制。图10-3给出厂用8255的3个口控制3位七段码显示器的逻辑,程序中将相应的字形数据(常称之为段数据)写人8255的PA , PB , PC口,显示器就显示出3位字符(数字或部分英文字母)。 上一页 下一页 返回

  17. 10.1 LED数码管显示 • 作为MCS-51串行口方式0输出的应用,我们可以在串行口上扩展多片串行输人并行输人的移位寄存器74 LS164作为静态显示接口。图10-4给出厂8位静态显示器的接口逻辑。 • 下面列出更新显示器子程序清单: • DIR: MOV R7,#08H • MOV R0, #7FH ;7F ~78H为显示缓冲器 • DLO: MOV A,@R0 ;取出要显示的数 • ADD A,#OBH ;加上偏移量 • MOVC A,@A+PC;查表取出字形数据 • MOV SBUF ,A ;送出显示 上一页 下一页 返回

  18. 10.1 LED数码管显示 • DL1 : JNB TI, DL1 ;输出完否? • CLR TI;完,清中断标志 • DEC RO; 再取下一个数 • DJNZ R7 ,DLO ;循环8次 • RET ;返回 上一页 下一页 返回

  19. 10.1 LED数码管显示 • 静态显示的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统在运行过程中,仅仅在需要更新显示内容时CPU才执行一次显示更新子程序,这样大大节省CPU的时间,提高CPU的效率;其缺点是位数较多时显示口随之增加。为厂节省I/O接口线,常采用另一种显示方式一动态显示方式。 • 2.动态显示方式 • 所谓动态显示,就是一位一位地轮流点亮各位显示器(扫描),对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参数,可实现亮度较高较稳定的显示。若显示器的位数不大于8位,则控制显示器公共极电位只需8位口(称为扫描口),控制各位显示器所显示的字形也需一 上一页 下一页 返回

  20. 10.1 LED数码管显示 • 个8位口(成为段数据口),8位共阴极显示器和8155的接口逻辑如图10-5所示。8155的A口作为扫描口,经反向驭动器75452接显示器公共极,B口作为数据口,经同相驭动器7407接显示器的各个段。 • 对于图10-5中的8位显示器,在8031 RAM存储器中设置8个显示缓冲器单元78 } 7FH,分别存放8位显示器的显示数据。8155的A口扫描输出总是只有一位为高电平,即6位显示器中仅有一位公共阴极为低电平,其他位为高电平。8155的B口输出相应位(阴极为低)的显示数据,8位显示器就显示出由缓冲器中显示数据所确定的字符。下面是根据图10-5所示结构的 上一页 下一页 返回

  21. 10.1 LED数码管显示 • 显示子程序的程序框图(图10-6)和程序清单。 • 程序清单: • DIR: MOV OPTR ,#7FOOH • MOV A,#03H • MOVX @ DPYR,A • MOV RO,#78H • MOV R3,,01H • MOV A, R3 • LD0: MOV DPTE,#7F01H • MOVH @ DPTR,A • INC DPTR 上一页 下一页 返回

  22. 10.1 LED数码管显示 • MOV A,@ R0 • ADD A,#ODH • MOVC A, @A+PC • DIR1: MOVX @ DPTR,A • ACALL DL1 • INC RO • MOV A, R3 • JB ACC.7, LD1 • RL A • MOV R3 ,A • SJMP LDO 上一页 下一页 返回

  23. 10.1 LED数码管显示 • LD1: RET • DSEG:DB 3FH,06 H,SBH,4FH,66 H,6DH • DB 7DH,07 H,7FN,6FH,77H,7CH • DB 39H,SEH,79 H,71H,73H,3EH • DB 31H,6EH,1CH,23 H,40H,03 H • DB 18H,00 H,OOH,00 H • DL1: MOV R7,#O2H • DL: MOV R6,#FFOH • DL6 DJNZ R6,DL6 • D1N2 R7,DL • RET 上一页 返回

  24. 10.2 键盘接口技术 • 10.2.1 键盘结构与工作原理 • 键盘是一组按键的集合,它是最常用的单片机输人设备,操作人员可以通过键盘输人数据或命令,实现简单的人机通讯。键是一种常开型按钮开关,平时(常态)键的两个触点处于断开状态,按下键时它们才闭合(短路)。键盘分编码键盘和非编码键盘,闭合键的识别由专用的硬件译码实现,并能产生键编号或键值的称为编码键盘,如BCD码键盘、ASCII码键盘等;而缺少这种键盘编码电路要靠自编软件识别的称为非编码键盘。在单片机组成的电路系统及智能化仪器中,用得更多的是非编码键盘,本节将予以讨论。 下一页 返回

  25. 10.2 键盘接口技术 • 1.键盘操作特点 • 键盘中每个按键都是一个常开开关电路,如图10-7所示。当键K未被按下(即断开)时,P1.0输人高电平;当K闭合时,P1.0输人低电平。通常的按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如图10-8所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会马上断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如图10-8所示。抖动时间的长短由按键的机械特性决定,一般为5~10ms,这是一个很重要的时间参数,在很多场合都要用到。 上一页 下一页 返回

  26. 10.2 键盘接口技术 • 按键的闭合稳定时间的长短由操作人员的按键动作决定,一般为零点儿秒至数秒。键抖动会引起一次按键被误读多次,为厂确保单片机对键的一次闭合仅作一次处理,必须去除键抖动,在键闭合稳定时取键状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法消除。 • 通常在键数较少时,可用硬件方法消除键抖动。如图10-9所示的RS触发器为常用的硬件去抖电路。 • 图10-9中用两个与非门构成一个RS触发器,当键未按下时,输出为”1”;当键按下时,输出为“0"。此时即使由于按键的机械性能,使键因弹性抖动而产生瞬时断开(抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态将不改变,输出保持为“0",不会产生抖动的波形。也就是说,即 上一页 下一页 返回

  27. 10.2 键盘接口技术 • 使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波,这一点通过分析RS触发器的工作过程很容易得到验证。 • 如果按键较多,常用软件方法消除键抖动,即检测出键闭合后执行一个延时程序产生5~10 ms的延时,让前沿抖动消除后再一次检测键的状态,如果仍保持闭合状态电平则确认为真正有键按下。当检测到按键释放后,也要给5~10 ms的延时,待后沿抖动消失后才能转人该键的处理程序。 • 2.独立式键盘与工作原理 • 独立式按键是各按键互相独立地接通一条输人数据线,如图10-10所示。这是最简单的键盘结构,该电路为查询方式电路。 上一页 下一页 返回

  28. 10.2 键盘接口技术 • 当任何一个键按下时,与之相连的输人数据线即被置“o 0”(低电平),而平时该线为“I ”(高电平)。要判别是否有键按下,用单片机的位处理指令将十分方便。 • 这种键盘结构的优点是电路简单;缺点是当键数较多时,要占用较多的I/O线。 • 图10-10所示查询方式键盘的处理程序比较简单,程序中没有使用散转指令,省略厂软件的去抖动措施,只包括键查询、键功能程序转移。PO F一P7 F为功能程序人口地址标号,其地址间隔应能容纳JMP(通常用LJMP)指令字节,PROMO-PROM?分别为每个按键的功能程序。程序清单(设I/O为P1口): 上一页 下一页 返回

  29. 10.2 键盘接口技术 • DRG 1500H • START: MOV A,#OFFH;输入时先置P1口全1 • MOV P1,A • MOV A,P1;键状态输入 • JNE ACC.0, POF ;0号键按下转POF标号地址 • JNB ACC.1,P1F;1号键按下转 • JNB ACC.2,P2F; 2号键按下转 • JNB ACC.3, P3F; 3号键按下转 • JNB ACC.4, P4F ; 4号键按下转 • JNB ACC.5,P5F ; 5号键按下转 上一页 下一页 返回

  30. 10.2 键盘接口技术 • JNB ACC.6,P6F ; 6号键按下转 • JNB ACC.7,P7F ; 7号键按下转 • POF: JMP PROMO • P1F: JMP PROM1 • …… …… …… ;入口地址表 • P7F: JMP PROM7 • PROM0: …… …… …… • …… …… …… ;0号键功能程序 • LJMP START ;0号键执行完返回 • PROM1:…… …… …… 上一页 下一页 返回

  31. 10.2 键盘接口技术 • …… …… …… • LJMP START • . . . • . . . • . . . • PROM7: …… …… …… • …… …… …… • LJMP START • END 上一页 下一页 返回

  32. 10.2 键盘接口技术 • 由此程序可以看出,各键的按下判断由软件设置厂优先级,优先级顺序依次为0一7。如图10-11行列式键盘与工作原理 • 3.矩阵式键盘与工作原理 • 为厂减少键盘与单片机接口时所占用I/O口线的数日,在键数较多时,通常都将键盘排列成行列矩阵式,如图10-11所示。 • 每一水平线(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通。利用这种行列矩阵结构只需N个行线和M个列线即可组成M×N个按键的键盘。 返回

  33. 10.2 键盘接口技术 • 在这种行列矩阵式非编码键盘的单片机系统中,键盘处理程序首先执行确认有无键按下的程序段,程序框图如图10-12所示。 • 当确认有稳定的键按下后,下一步就要识别哪一个按键被按下。对键的识别通常采用逐行(逐列)扫描查询法。 • 以图10-11所示的4 x4键盘为例说明扫描法识别哪一个键被按下的工作过程。 • 首先判别键盘中有无键按下。由单片机I/O口向键盘送(输出)扫描字,然后读人(输人)行线状态来判断。其方法是;向列线(图中垂直线)输出全扫描字OOH,即把全部列线置为低电平,然后将行线的电平状态读人累加器A中。如果有按键按下,总会有一根行线被拉至低电平,从而使行输人不全为“1" 上一页 下一页 返回

  34. 10.2 键盘接口技术 • 其次判断键盘中哪一个键按下,由列线逐列置低电平后,检查行输人状态。其方法是:依次给列线送低电平,然后查所有行线状态,如果全为“1”,则所按下之键不在此列。如果不全为“1”,则所按下的键必在此列,而且是在与低电平行线相交的交点上的那个键。 • 最后确定键盘上每个键的键值。键值赋值的最直接办法是将行、列线按二进 • 制顺序排列,当某一键按下时,键盘扫描程序执行到该列置“O”电平,读出各行状态为非全“1”状态,这时的行、列数据组合成键值。 上一页 下一页 返回

  35. 10.2 键盘接口技术 • 加图10-11中键盘值从左至右、从上至下依次是77, 7B, 7D, 7E, B7, BB, BD, BE;…;E7 ,EB , ED , EE。这种负逻辑表示往往不够直观,因而采取行列线加反相器或软件求反的方法把键盘改成正逻辑,这时键值依次为88, 84, 82, 81, 48, 44, 42,41;…;18, 14, 12, 11。不论是正逻辑还是负逻辑,这种键盘的键值表示方式分散度大且不等距,用散转指令进人键处理程序不太方便。对于不是4 x4或8 x4, 8 x8键盘,使用也不容易,故在许多场合下,还需进一步的程序处理,以依次排列键值。 • 键盘扫描的控制方式如下: • 在单片机系统中,为厂节省硬件,通常采用行列矩阵式非编码键盘,单片机对它的控制通常有以下三种方式。 上一页 下一页 返回

  36. 10.2 键盘接口技术 • ①程序控制扫描方式。即利用程序连续地对键盘进行扫描。 • ②定时扫描方式。即单片机定时地对键盘进行扫描。 • ③中断扫描方式。即键的按下引起中断后,单片机对键盘进行扫描。 • 通常根据单片机系统的硬件结构与按键数日的多少来选择工作方式。下面着重介绍常用的程序控制扫描方式。 • 10.2.2 键盘的程序控制 上一页 下一页 返回

  37. 10.2 键盘接口技术 • 以图10-13所示的8155扩展I/O口组成的4 x8行列矩阵式键盘为例,介绍程序控制扫描工作方式的工作过程和扫描子程序。 • ①判断键盘上有无键按下。其方法为:PA口输出全扫描字OOH,读PC口状态,若PCO- PC3为全“1",则键盘无键按下,若不全为“1”则有键按下。 • ②去键的机械抖动影响:在判断有键按下后,软件延时一段时间(510 ms)再判断键盘状态,如果仍为有键按下状态,则认为有一个稳定的键按下,否则按键抖动处理。 • ③判别闭合键所对应的键号;对键盘的列线进行扫描,扫描口PAO一PA7一次输出的扫描字为 上一页 下一页 返回

  38. 10.2 键盘接口技术 • PA7 PA6 PA5 PA4 PA3 PA2 PA1 PAO • 1 1 1 1 1 1 1 0 FEH • 1 1 1 1 1 1 O 1 FDH • 1 1 1 1 1 O 1 1 FBH . . . • O 1 1 1 1 1 1 BFH O 1 1 1 1 1 1 1 7FH 上一页 下一页 返回

  39. 10.2 键盘接口技术 • 再相应地读人PC口的可能状态为: • PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 • × × × × 1 1 1 0 ×EH • × × × × 1 1 O 1 ×DH • × × × × 1 O 1 1 ×BH • × × × × O 1 1 1 ×7H • 即输出一个扫描字,紧接着读PC口状态,若PCO一PC3为全“1",则列线输出为“0”的这一列上没有键闭合,否则这一列上有键闭合。由图10-13中从左至右第0行、第1行,…、直至第7行,逐行查询有无键按下。这就是以键扫描的方式确定按键位置的方法。下一步要求出键号,按照行列式键盘工作原理,图10-13中32个键值应对应如下分布(按PA , PC口二进制码,x为任意值): 上一页 下一页 返回

  40. 10.2 键盘接口技术 • FF ×E Fn × E FR × E F7 × E FF × E DF × E RF × E 7F × E • FF xD Fn x D FR xD F7 XD FFx D DFx D RF x D 7F xD • FF x R Fn x R FR x R F7 XR FFxR DFxR RFxR 7F XR • FF X7 FD X7 FR X7 F7 X7 FF X7 DF X7 RF X7 7F X7 上一页 下一页 返回

  41. 10.2 键盘接口技术 • 而闭合键的键号等于低电平的列号加上低电平的行的首键号。例如PA口的输出为11111101时,读人PCO一PC3为1101,则1行1列相交的键处于闭合状态,第1行的首键号为8,列号为1,闭合的键号为: • N=行首键号+列号=8+1=9 • 在图10-13所示的行列矩阵中,每行的行首键号自上至下依次为0, 8, 16 (10H) , 24(18H),列号依列线顺序(自左至右)依次为0-7。在上述键值中,从零电平对应的位可以找出行首键号与相应的列号。 • ④单片机对键的一次闭合仅作一次处理,为此,采用厂等待键释放以后再将键号送人累加器A中的方法。 上一页 下一页 返回

  42. 10.2 键盘接口技术 • 下面的程序为实用子程序,可移植到类似的应用系统中去。图10-14为键扫描子程序枢图。 • 程序执行后,累加器A中的内容为键号。 • 8155的初始化包括置PA口为基本输出方式,PC口为基本输人方式等,这些都不包括在本程序之中。 • ORG 1000H • KEY1: ACALL KS1 ;调用判断有无键按下子程序 • JNZ LK1 ;有键按下时,A≠0转消抖延时 • RET ;无键按下返回 • LK1: ACALL T12ms :调12 ms延时子程序 • ACALL KS1 :杳有无键按下,若有则键为真实按下 • JNZ KL2;键按下A不为0转逐列扫描 上一页 下一页 返回

  43. 10.2 键盘接口技术 • LJMP KEY1;没有键按下返回 • LK2: MOV R2,#OFFH ;首列扫描字入R2 • MOV R4,#00H;首列号人R4 • LK4: MOV DPTR,#7F01H ;列扫描字送至8155PA口 • MOV R ,R2 ;第一列扫描 • MOVX@ DPTR ,A ;使第0列线为0 • INC DPTR;指向8155PC口 • INC DPTR • MOVX A, @DPTR; 8155PC口读人行状态 • JB ACC.0 ,LUCK;第0行无键按下转查第1行ACC.0 =0为 上一页 下一页 返回

  44. 10.2 键盘接口技术 • ;有键按下 • MOV A, #00H :第0行有键按下.该行首钟号#00 H-> A • AJMP LKP ;转求键号 • LONE: JB ACC.1,LTWO ;第1行无键按下,转查第2行 • MOV A, #08H ;第1行有键按下,该行首键号##08 H->A • LJMP LKP • LTWO:JB ACC.2 ,LTHR ;第2行无键按下,转查第3行 • MOV A ,#10H ;第2行有键按下,该行首键号#lOH->A • AJMP LKP 上一页 下一页 返回

  45. 10.2 键盘接口技术 • LTHR: JB ACC.3, NEXT ;第3行无键按下,改查下一列 • MOV A ,#18H ;第3行有键按下,该行首键号#18 H-> A • LKP: ADD A, R4 ;求键号,等于行首键号加列号 • PUSH ACC ;键号进栈保护 • LK3: ACALL KS1 ;等待键释放 • JNZ LK3 ;未释放则等待 • POP ACC :键释放,键号一A • RET 上一页 下一页 返回

  46. 10.2 键盘接口技术 • NEXT: INC R4;指向下一列,列号加1 • MOV A , R2 ;判断8列扫描完没有? • JNB ACC.7 ,LND ;8列扫描完,返回 • RL A ;扫描字左移一位转变为下一列扫描字 • MOV R2 ,A;扫描字入R2 • AJMP LK4 ;转下列扫描 • LKD: AJMP KEY1 • SK1: MOV DPTR,#7F01H指向PA口 • MOV A, #00H;全扫描字##00 H = 00000000B • MOVX @DPTR ,A全扫描字入PA口 上一页 下一页 返回

  47. 10.2 键盘接口技术 • INC DPTR ;指向PC口 • INC DPTR • MOVX A, DPTR;读人PC口行状态 • CPL A • ANL A, #OFH ;屏蔽高4位 • RET;出状态(A)≠o时有键按下 • T12ms: MOV R7 ,#18 ;延时12ms子程序 • TM: MOV R6 ,#0 FFH • DJNZ R6 , • DINZ R7,TM 上一页 下一页 返回

  48. 10.2 键盘接口技术 • RET • END • 10.2.3 通过串行口扩展键盘接口 • MCS-51系列单片机的串行口与并行I/)引脚配合可用来扩展键盘接口。在使用串口扩展键盘接口时,还需用到串一并转换器件,例如使用串行输人、并行输出的74 LS164芯片。 • 使用串口与并行I/)口线配合,扩展2行8列的键盘接口,键号为0一巧。下面给出其硬件连接和键盘查询子程序。 • 串口与并行I/)线配合扩展键盘接口的线路连接如图10-15所示。 上一页 下一页 返回

  49. 10.2 键盘接口技术 • 在扫描时,扫描信号从串口输出的顺序为先低位后高位,所以,从74 LS164的Q7引脚输出的信号是低位扫描线。 • 键盘的编码方式与前例类似:P1.1线上的8个键分别为00 H + (00 H-07 H) ; PL 0线上的8个键分另11为08H + (OOH-07H)。扫描线(00 H-07 H )的具体值采用R4存放。 • 程序清单如下: • KEY16: MOV SCON ,#OOH ;所有扫描线均为0 • MOV A ,#OOH ;键盘初始化,送00 H到列线上 • LCALL VARTO ;发送数据 • CHK: JNB P1.0 ,CHKO ;检查是否有键按下 • JNB P1.1 ,CHKO ;检查是否有键按下 上一页 下一页 返回

  50. 10.2 键盘接口技术 • AJMP CHK ;无键按下,继续查找 • CHK0: LCALL D10MS ;调用10ms延时子程序。去抖 • JNB P1.0 , CHEN ;确实有键按下,转CHEN • JNB P1.1 , CHEN • AJMP CHK ;无键按下。继续查找 • CHEN: MOV R2,#OFEH ;首列扫描字送R2杳键号,最低位为0 • MOV R4 , #OOH ;首列偏移值送R4 • CHEN: MOV A ,R2 ;发送列扫描字 • LCALL VARTO 上一页 下一页 返回

More Related