690 likes | 874 Views
第十章 人机接口技术. 任务八 矩阵键盘控制数码管 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 ; 熄灭所有数码管
E N D
第十章 人机接口技术 • 任务八 矩阵键盘控制数码管 • 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 ;熄灭所有数码管 • MOV TMOD, #01 H;设置定时器为工作方式 下一页 返回
任务八 矩阵键盘控制数码管 • 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 ;开中断 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 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无按键返回 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 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 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 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行行值 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • LKP: ADD A,R3 ;计算键码 • PUSH ACC ;把键码推人堆栈保存 • LK4: LCALL DELAY ;延时 • LCALL KS1 ;判断键是否松开,若闭合再延时 • CPL A • JNZ LK3 ;键仍然闭合,继续延时 • POP ACC ;按键起,键码回送A • RET 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 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 ;返回 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 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 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 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;取要显示的数 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • MOVC A, @A+DPTP;取显示段码 • MOV PO,A ;输出段码,点亮正确的段 • MOV P2, R4 ;输出位控制,点亮正确的位 • MOV A,R4 ;位控制字右移,为下一个位点亮做准备 • RR A • MOV R4 ,A • POP ACC ;恢复现场 • RETI 中断返回 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 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 上一页 下一页 返回
任务八 矩阵键盘控制数码管 • 3.程序仿真及烧录 • 把这段程序在WAV6000中编辑、汇编,用软件仿真运行、调试无误,把得到bin格式或者hex格式的日标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。把单片机插人实验板插座里,上电运行,观察运行结果。 上一页 返回
10.1 LED数码管显示 • 为方便人们观察和监视单片机的运行情况,通常把数码显示器作为单片机的输出设备,用来显示单片一机的键输人值、中间信息及运算结果等。在单片机应用系统中,常用的显示器主要有LE D(发光二极管显示器)和LCD(液晶显示器)。这两种显示器具有耗电省、成本低廉、配置灵活、线路简单、安装方便、耐振动、寿命长等优点。但因其显示内容有限,且不能显示图形,因而其应用有局限性,近年来对某些要求较高的单片机应用系统开始配置简易形式的CRT接口。因为日前应用最广泛的还是数码显示器,所以本节将以LE D显示器为例进行介绍。 下一页 返回
10.1 LED数码管显示 • 10.1.1 LED显示器的结构与原理 • LE D显示器是由发光二极管显示字段的显示器件,也可称为数码管。其外形结构如图10-2(a)所示,由图可见它由8个发光二极管(以下简称字段)构成;通过不同的组合可用夹界示0一9,A一F及小数点“.”等字符 • 数码管通常有共阴极和共阳极两种结构接法,见图10-2(b)和(c)。图中电阻为外接的,一般共阳极数码管必须外接电阻,共阴极不一定外接电阻。共阴极数码管的发光二极管阴极共地,当某发光二极管的阳极为高电平(一般为+5V)时,此二极管点亮;共阳极数码管的发光二极管是阳极并接到高电平,对于需点亮的发光二极管使其阴极接低电平(一般为地)即可。 上一页 下一页 返回
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位字符(数字或部分英文字母)。 上一页 下一页 返回
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 ;送出显示 上一页 下一页 返回
10.1 LED数码管显示 • DL1 : JNB TI, DL1 ;输出完否? • CLR TI;完,清中断标志 • DEC RO; 再取下一个数 • DJNZ R7 ,DLO ;循环8次 • RET ;返回 上一页 下一页 返回
10.1 LED数码管显示 • 静态显示的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统在运行过程中,仅仅在需要更新显示内容时CPU才执行一次显示更新子程序,这样大大节省CPU的时间,提高CPU的效率;其缺点是位数较多时显示口随之增加。为厂节省I/O接口线,常采用另一种显示方式一动态显示方式。 • 2.动态显示方式 • 所谓动态显示,就是一位一位地轮流点亮各位显示器(扫描),对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参数,可实现亮度较高较稳定的显示。若显示器的位数不大于8位,则控制显示器公共极电位只需8位口(称为扫描口),控制各位显示器所显示的字形也需一 上一页 下一页 返回
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所示结构的 上一页 下一页 返回
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 上一页 下一页 返回
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 上一页 下一页 返回
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 上一页 返回
10.2 键盘接口技术 • 10.2.1 键盘结构与工作原理 • 键盘是一组按键的集合,它是最常用的单片机输人设备,操作人员可以通过键盘输人数据或命令,实现简单的人机通讯。键是一种常开型按钮开关,平时(常态)键的两个触点处于断开状态,按下键时它们才闭合(短路)。键盘分编码键盘和非编码键盘,闭合键的识别由专用的硬件译码实现,并能产生键编号或键值的称为编码键盘,如BCD码键盘、ASCII码键盘等;而缺少这种键盘编码电路要靠自编软件识别的称为非编码键盘。在单片机组成的电路系统及智能化仪器中,用得更多的是非编码键盘,本节将予以讨论。 下一页 返回
10.2 键盘接口技术 • 1.键盘操作特点 • 键盘中每个按键都是一个常开开关电路,如图10-7所示。当键K未被按下(即断开)时,P1.0输人高电平;当K闭合时,P1.0输人低电平。通常的按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如图10-8所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会马上断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如图10-8所示。抖动时间的长短由按键的机械特性决定,一般为5~10ms,这是一个很重要的时间参数,在很多场合都要用到。 上一页 下一页 返回
10.2 键盘接口技术 • 按键的闭合稳定时间的长短由操作人员的按键动作决定,一般为零点儿秒至数秒。键抖动会引起一次按键被误读多次,为厂确保单片机对键的一次闭合仅作一次处理,必须去除键抖动,在键闭合稳定时取键状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法消除。 • 通常在键数较少时,可用硬件方法消除键抖动。如图10-9所示的RS触发器为常用的硬件去抖电路。 • 图10-9中用两个与非门构成一个RS触发器,当键未按下时,输出为”1”;当键按下时,输出为“0"。此时即使由于按键的机械性能,使键因弹性抖动而产生瞬时断开(抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态将不改变,输出保持为“0",不会产生抖动的波形。也就是说,即 上一页 下一页 返回
10.2 键盘接口技术 • 使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波,这一点通过分析RS触发器的工作过程很容易得到验证。 • 如果按键较多,常用软件方法消除键抖动,即检测出键闭合后执行一个延时程序产生5~10 ms的延时,让前沿抖动消除后再一次检测键的状态,如果仍保持闭合状态电平则确认为真正有键按下。当检测到按键释放后,也要给5~10 ms的延时,待后沿抖动消失后才能转人该键的处理程序。 • 2.独立式键盘与工作原理 • 独立式按键是各按键互相独立地接通一条输人数据线,如图10-10所示。这是最简单的键盘结构,该电路为查询方式电路。 上一页 下一页 返回
10.2 键盘接口技术 • 当任何一个键按下时,与之相连的输人数据线即被置“o 0”(低电平),而平时该线为“I ”(高电平)。要判别是否有键按下,用单片机的位处理指令将十分方便。 • 这种键盘结构的优点是电路简单;缺点是当键数较多时,要占用较多的I/O线。 • 图10-10所示查询方式键盘的处理程序比较简单,程序中没有使用散转指令,省略厂软件的去抖动措施,只包括键查询、键功能程序转移。PO F一P7 F为功能程序人口地址标号,其地址间隔应能容纳JMP(通常用LJMP)指令字节,PROMO-PROM?分别为每个按键的功能程序。程序清单(设I/O为P1口): 上一页 下一页 返回
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号键按下转 上一页 下一页 返回
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:…… …… …… 上一页 下一页 返回
10.2 键盘接口技术 • …… …… …… • LJMP START • . . . • . . . • . . . • PROM7: …… …… …… • …… …… …… • LJMP START • END 上一页 下一页 返回
10.2 键盘接口技术 • 由此程序可以看出,各键的按下判断由软件设置厂优先级,优先级顺序依次为0一7。如图10-11行列式键盘与工作原理 • 3.矩阵式键盘与工作原理 • 为厂减少键盘与单片机接口时所占用I/O口线的数日,在键数较多时,通常都将键盘排列成行列矩阵式,如图10-11所示。 • 每一水平线(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通。利用这种行列矩阵结构只需N个行线和M个列线即可组成M×N个按键的键盘。 返回
10.2 键盘接口技术 • 在这种行列矩阵式非编码键盘的单片机系统中,键盘处理程序首先执行确认有无键按下的程序段,程序框图如图10-12所示。 • 当确认有稳定的键按下后,下一步就要识别哪一个按键被按下。对键的识别通常采用逐行(逐列)扫描查询法。 • 以图10-11所示的4 x4键盘为例说明扫描法识别哪一个键被按下的工作过程。 • 首先判别键盘中有无键按下。由单片机I/O口向键盘送(输出)扫描字,然后读人(输人)行线状态来判断。其方法是;向列线(图中垂直线)输出全扫描字OOH,即把全部列线置为低电平,然后将行线的电平状态读人累加器A中。如果有按键按下,总会有一根行线被拉至低电平,从而使行输人不全为“1" 上一页 下一页 返回
10.2 键盘接口技术 • 其次判断键盘中哪一个键按下,由列线逐列置低电平后,检查行输人状态。其方法是:依次给列线送低电平,然后查所有行线状态,如果全为“1”,则所按下之键不在此列。如果不全为“1”,则所按下的键必在此列,而且是在与低电平行线相交的交点上的那个键。 • 最后确定键盘上每个键的键值。键值赋值的最直接办法是将行、列线按二进 • 制顺序排列,当某一键按下时,键盘扫描程序执行到该列置“O”电平,读出各行状态为非全“1”状态,这时的行、列数据组合成键值。 上一页 下一页 返回
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键盘,使用也不容易,故在许多场合下,还需进一步的程序处理,以依次排列键值。 • 键盘扫描的控制方式如下: • 在单片机系统中,为厂节省硬件,通常采用行列矩阵式非编码键盘,单片机对它的控制通常有以下三种方式。 上一页 下一页 返回
10.2 键盘接口技术 • ①程序控制扫描方式。即利用程序连续地对键盘进行扫描。 • ②定时扫描方式。即单片机定时地对键盘进行扫描。 • ③中断扫描方式。即键的按下引起中断后,单片机对键盘进行扫描。 • 通常根据单片机系统的硬件结构与按键数日的多少来选择工作方式。下面着重介绍常用的程序控制扫描方式。 • 10.2.2 键盘的程序控制 上一页 下一页 返回
10.2 键盘接口技术 • 以图10-13所示的8155扩展I/O口组成的4 x8行列矩阵式键盘为例,介绍程序控制扫描工作方式的工作过程和扫描子程序。 • ①判断键盘上有无键按下。其方法为:PA口输出全扫描字OOH,读PC口状态,若PCO- PC3为全“1",则键盘无键按下,若不全为“1”则有键按下。 • ②去键的机械抖动影响:在判断有键按下后,软件延时一段时间(510 ms)再判断键盘状态,如果仍为有键按下状态,则认为有一个稳定的键按下,否则按键抖动处理。 • ③判别闭合键所对应的键号;对键盘的列线进行扫描,扫描口PAO一PA7一次输出的扫描字为 上一页 下一页 返回
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 上一页 下一页 返回
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为任意值): 上一页 下一页 返回
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 上一页 下一页 返回
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中的方法。 上一页 下一页 返回
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转逐列扫描 上一页 下一页 返回
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为 上一页 下一页 返回
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 上一页 下一页 返回
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 上一页 下一页 返回
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口 上一页 下一页 返回
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 上一页 下一页 返回
10.2 键盘接口技术 • RET • END • 10.2.3 通过串行口扩展键盘接口 • MCS-51系列单片机的串行口与并行I/)引脚配合可用来扩展键盘接口。在使用串口扩展键盘接口时,还需用到串一并转换器件,例如使用串行输人、并行输出的74 LS164芯片。 • 使用串口与并行I/)口线配合,扩展2行8列的键盘接口,键号为0一巧。下面给出其硬件连接和键盘查询子程序。 • 串口与并行I/)线配合扩展键盘接口的线路连接如图10-15所示。 上一页 下一页 返回
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 ;检查是否有键按下 上一页 下一页 返回
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 上一页 下一页 返回