1、第第10章章 MCS-51与与键盘、显示器、拨键盘、显示器、拨盘、打印机的接盘、打印机的接 口设计口设计信息技术教研室信息技术教研室 温川雪温川雪输入外设:输入外设:键盘、键盘、BCDBCD码拨盘等;码拨盘等;输出外设:输出外设:LEDLED显示器、显示器、LCDLCD显示器、打印机等。显示器、打印机等。10.1 LED10.1 LED显示器接口原理显示器接口原理 LED LED(Light Emitting Diode):(Light Emitting Diode):发光二极管的缩写。发光二极管的缩写。显示器前面冠以显示器前面冠以“LED”LED”。10.1.1 LED10.1.1 LED显
2、示器的结构显示器的结构 常用的常用的LEDLED显示器为显示器为8 8段段(或(或7 7段段,8 8段比段比7 7段多了一段多了一个小数点个小数点“dp”dp”段)。段)。为使为使LEDLED显示不同的符号或数字显示不同的符号或数字,要为,要为LEDLED提供提供段码段码(或称(或称字型码字型码)。)。提供给提供给LEDLED显示器的段码显示器的段码(字型码字型码)正好是一个字正好是一个字节(节(8 8段)段)。各段与字节中各位对应关系如下:。各段与字节中各位对应关系如下:按上述格式,按上述格式,8 8段段LEDLED的段码如表的段码如表10-110-1所示。所示。显示字符显示字符共阴极共阴极
3、段码段码共阳极共阳极段码段码显示字符显示字符共阴极共阴极段码段码共阳极共阳极段码段码0 03FH3FHC0HC0Hc c39H39HC6HC6H1 106H06HF9HF9Hd d5EH5EHA1HA1H2 25BH5BHA4HA4HE E79H79H86H86H3 34FH4FHB0HB0HF F71H71H8EH8EH4 466H66H99H99HP P73H73H8CH8CH5 56DH6DH92H92HU U3EH3EHC1HC1H6 67DH7DH82H82HT T31H31HCEHCEH7 707H07HF8HF8Hy y6EH6EH91H91H8 87FH7FH80H80HH H
4、76H76H89H89H9 96FH6FH90H90HL L38H38HC7HC7HA A77FH77FH88H88H“灭灭”00H00HFFHFFHb b7CH7CH83H83H表表10-1 LED10-1 LED段码(段码(8 8段)段)表表10-110-1只列出了部分段码,只列出了部分段码,可根据实际情况选用可根据实际情况选用。另外,另外,段码是相对的段码是相对的,它由各字段在字节中所处的,它由各字段在字节中所处的位决定。例如表位决定。例如表10-110-1中中8 8段段LEDLED段码是按格式段码是按格式:而形成的,而形成的,“0”0”的段码为的段码为3FH3FH(共阴)。(共阴)。反
5、之,如反之,如 将格式改为下列格式:将格式改为下列格式:则则 “0”0”的段码为的段码为7EH7EH(共阴)(共阴)。字型及段码由设计者自行设定,字型及段码由设计者自行设定,习惯上还是以习惯上还是以“a”a”段对应段码的最低位。段对应段码的最低位。N N个个LEDLED显示块有显示块有N N位位选线位位选线和和8 8N N根段码线根段码线。10.1.2 LED10.1.2 LED显示器工作原理显示器工作原理图图10-210-2是是4 4位位 LEDLED显示器的结构原理图。显示器的结构原理图。段码线段码线控制控制显示的字型显示的字型,位选线位选线控制控制该显示位的亮或暗。该显示位的亮或暗。静态
6、显示静态显示和和动态显示动态显示两种显示方式。两种显示方式。1.1.静态显示方式静态显示方式各位的公共端连接在一起(接地或各位的公共端连接在一起(接地或+5V+5V)。)。每位的段码线(每位的段码线(a adpdp)分别)分别与一个与一个8 8位的锁存器位的锁存器输出相连。输出相连。显示字符一确定,相应锁存器的段码输出将维持显示字符一确定,相应锁存器的段码输出将维持不变,直到送入另一个段码为止。不变,直到送入另一个段码为止。显示的亮度高显示的亮度高。2.2.动态显示方式动态显示方式 所有位的段码线所有位的段码线相应段并在一起,由一个相应段并在一起,由一个8 8位位I/OI/O口控制口控制,形成
7、,形成段码线的多路复用,段码线的多路复用,各位的各位的公共端公共端分别由分别由相应的相应的I/OI/O线控制线控制.图图10-4:4位位8段段LED动态显示电路。其中段码动态显示电路。其中段码线占用一个线占用一个8位位I/O口,而位选线占用一个口,而位选线占用一个4位位I/O口。口。动态显示接口动态显示接口此时同时向此时同时向6 6位位LEDLED灯管输出相同的字符,如何灯管输出相同的字符,如何能实现显示多个不同字符?能实现显示多个不同字符?扫描显示方式扫描显示方式(Scan Display Mode):Scan Display Mode):某一时刻只选通一盏灯(其他某一时刻只选通一盏灯(其他
8、5 5位是熄灭的),同时,位是熄灭的),同时,段选线上输出相应要显示的字符的段码。段选线上输出相应要显示的字符的段码。下一时刻,位选信号选通下一位下一时刻,位选信号选通下一位LEDLED,同时,段选线,同时,段选线上输出相应要显示的字符的段码。上输出相应要显示的字符的段码。0 0 0 0 0 10 0 0 0 0 11 1段码段码39H39H字符字符C C1 11 11 11 11 1位选位选信号信号3EH3EH字符字符U U7FH7FH字符字符8 83FH3FH字符字符0 040H40H字符字符-73H73H字符字符P P位选信号轮流选中每位位选信号轮流选中每位LEDLED灯,同时段码输出对
9、应显示器灯,同时段码输出对应显示器要显示的字符。要显示的字符。只要实现间隔足够短,由于只要实现间隔足够短,由于LEDLED显示器的余辉和人眼视觉显示器的余辉和人眼视觉残留作用,造成多位同时点亮的假象。残留作用,造成多位同时点亮的假象。1 1段码段码0000 无显示无显示39H39H 字符字符C C73H73H字符字符P P3EH3EH字符字符U U1 11 11 11 11 1位控位控信号信号图图10-510-5为为8 8位位LEDLED动态显示动态显示2003.10.102003.10.10的过程的过程。10.2 10.2 键盘接口原理键盘接口原理1.1.键盘输入的特点键盘输入的特点键盘:一
10、组按键开关的集合键盘:一组按键开关的集合。行线电压信号通过键盘开关机械触点的断开、闭合,行线电压信号通过键盘开关机械触点的断开、闭合,输出波形如图输出波形如图10-610-6。2.2.按键的确认按键的确认 检测检测行线行线电平电平 高电平:高电平:断开;断开;低电平低电平:闭合,:闭合,常用常用软件来消除按键抖动。软件来消除按键抖动。基本思想基本思想:检测到有键按下,键对应的行线为低,软:检测到有键按下,键对应的行线为低,软件延时件延时10ms10ms后,行线如仍为低,则确认该行有键按下。后,行线如仍为低,则确认该行有键按下。3.3.如何消除按键的抖动如何消除按键的抖动 当键松开时当键松开时,
11、行线变高,软件延时,行线变高,软件延时10ms10ms后,行线仍后,行线仍为为高,说明按键已松开。高,说明按键已松开。采取以上措施,采取以上措施,躲开了两个抖动期躲开了两个抖动期t1t1和和t3t3的影响的影响。10.2.2 10.2.2 键盘接口的工作原理键盘接口的工作原理独立式独立式按键接口和按键接口和行列式行列式键盘接口。键盘接口。1.1.独立式键盘接口独立式键盘接口 各键相互独立,每个按键各接一根输入线,通过各键相互独立,每个按键各接一根输入线,通过检检测输入线的电平状态测输入线的电平状态可很容易判断那个键被按下。可很容易判断那个键被按下。此种接口此种接口适于键数较少适于键数较少或或操
12、作速度较高操作速度较高的场合。的场合。图图10-710-7(a a)为)为中断方式的独立式中断方式的独立式键盘工作电路键盘工作电路图图10-710-7(b b)为)为查询方式的独立式查询方式的独立式键盘工作电路键盘工作电路。图图10-8为为8255A扩展扩展I/O口的独立式按键接口电路。口的独立式按键接口电路。图图10-9用三态缓冲器扩展的用三态缓冲器扩展的I/O口的按键接口的按键接口电路。口电路。对图对图10-910-9独立式键盘编程,软件消抖,查询方式检独立式键盘编程,软件消抖,查询方式检测键的状态。仅有一键按下时才有效才处理。测键的状态。仅有一键按下时才有效才处理。KEYIN:MOV D
13、PTR,#0BFFFHKEYIN:MOV DPTR,#0BFFFH;键盘端口地址;键盘端口地址BFFFHBFFFHMOVX A,DPTRMOVX A,DPTR;读键盘状态;读键盘状态ANL A,#1FHANL A,#1FH;屏蔽高三位;屏蔽高三位MOV R3,AMOV R3,A;保存键盘状态值;保存键盘状态值LCALL DELAY10LCALL DELAY10;延时;延时10ms10ms去键盘抖动去键盘抖动MOVX A,DPTRMOVX A,DPTR;再读键盘状态;再读键盘状态ANL A,#1FHANL A,#1FH;屏蔽高三位;屏蔽高三位 CJNE A,R3,RETURN CJNE A,R3
14、,RETURN;两次不同,抖动引起转;两次不同,抖动引起转RETURNRETURNCJNE A,#1EH,KEY2 CJNE A,#1EH,KEY2;相等,有键按下,不等转;相等,有键按下,不等转KEY2KEY2LJMP PKEY1LJMP PKEY1;是是K1K1键按下,转键按下,转K1K1键处理键处理 ;子程序;子程序PKEY1PKEY1KEY2:CJNE A,#1DH,KEY3;S2KEY2:CJNE A,#1DH,KEY3;S2键未按下,转键未按下,转KEY3KEY3LJMP PKEY2LJMP PKEY2 ;S2 ;S2键按下,转键按下,转PKEY2PKEY2处理处理KEY3:KEY
15、3:CJNE A,#1BH,KEY4CJNE A,#1BH,KEY4;S3;S3未按下,转未按下,转KEY4KEY4LJMP PKEY3 ;S3LJMP PKEY3 ;S3按下,转按下,转PKEY3PKEY3处理处理KEY4:CJNE A,#17H,KEY5;S4KEY4:CJNE A,#17H,KEY5;S4键未按下,转键未按下,转KEY5KEY5LJMP PKEY4 ;S4LJMP PKEY4 ;S4按下,转按下,转PKEY4PKEY4处理处理KEY5:KEY5:CJNE A,#0FH,PASS;S5CJNE A,#0FH,PASS;S5未按下,转未按下,转RETURNRETURNLJMP
16、 PKEY5 ;S5LJMP PKEY5 ;S5按下,转按下,转PKEY5PKEY5处理处理RETURN:RET ;RETURN:RET ;重键或无键按下,从子程序返回重键或无键按下,从子程序返回识别和编程简单,识别和编程简单,用在按键数较少的场合。用在按键数较少的场合。2.行列式行列式(矩阵式矩阵式)键盘接口键盘接口 用于按键数目较多的场合,用于按键数目较多的场合,由由行线和列线组成行线和列线组成,按键位于行、列的交叉点上。如图按键位于行、列的交叉点上。如图10-1010-10所示。所示。无键按下无键按下当有键按下时,行线电平由列线的电平来决定当有键按下时,行线电平由列线的电平来决定 无键按
17、下,该行线为高电平无键按下,该行线为高电平。0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 1列输出列输出行输入行输入逐列置低电平,其余各列置为高逐列置低电平,其余各列置为高电平电平检查各行电平变化检查各行电平变化如检查出在某行线电平为低,对如检查出在某行线电平为低,对应此时列线低电平出现位置,交应此时列线低电平出现位置,交叉点处为按键按下处叉点处为按键按下处v 按键数目较多的场合,行列式键盘与独立式键盘按键数目较多的场合,行列式键盘与独立式键盘相比,要节省很多的相比,要节省很多的I/O口线。口线。10.2.3 10.2.3 键盘的工作方式键盘的工作方式 单片机在忙于各项工作任务时
18、,如何兼顾键盘的输单片机在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。入,取决于键盘的工作方式。原则:原则:即要保证能及时响应按键操作,又不要过多占即要保证能及时响应按键操作,又不要过多占用用CPUCPU的工作时间。的工作时间。通常,通常,键盘工作方式有键盘工作方式有3 3种种,即编程扫描、定时扫,即编程扫描、定时扫描和中断扫描。描和中断扫描。1.1.编程扫描方式编程扫描方式 只有当单片机空闲时,才调用键盘扫描子程序,只有当单片机空闲时,才调用键盘扫描子程序,扫描键盘。扫描键盘。工作过程:工作过程:(1 1)在键盘扫描子程序中,先判断有无键按下。)在键盘扫描子程序中,先判断有
19、无键按下。方法:方法:PAPA口口8 8位输出全位输出全0 0,读,读PCPC口低口低4 4位状态,若位状态,若PC0PC0PC3PC3为全为全1 1,则说明键盘无键按下;若不全为,则说明键盘无键按下;若不全为1 1,则说明,则说明键盘可能有键按下。键盘可能有键按下。(2 2)用软件来消除按键抖动的影响。如有键按下,则)用软件来消除按键抖动的影响。如有键按下,则进行下一步。进行下一步。(3 3)求按下键的键号。)求按下键的键号。(4 4)等待按键释放后,再进行按键功能的处理操作。)等待按键释放后,再进行按键功能的处理操作。2.2.定时扫描工作方式定时扫描工作方式 利用单片机内的定时器,产生利用
20、单片机内的定时器,产生10ms10ms的定时中断,对的定时中断,对键盘进行扫描。键盘进行扫描。3.3.中断工作方式中断工作方式 只有在键盘有键按下时,才执行键盘扫描程序,如只有在键盘有键按下时,才执行键盘扫描程序,如无键按下,单片机将不理睬键盘。无键按下,单片机将不理睬键盘。键盘所做的工作分为三个层次键盘所做的工作分为三个层次,如图,如图10-1310-13。第第1 1层:层:单片机如何来监视键单片机如何来监视键盘的输入。三种工作方盘的输入。三种工作方 式:式:编程扫描编程扫描定定时扫描时扫描中断扫描。中断扫描。第第2 2层:层:确定具体按键的键号。确定具体按键的键号。体现在按键的识别方体现在
21、按键的识别方 法上就是:法上就是:扫描法;扫描法;线反转法。线反转法。第第3 3层:层:执行键处理程序。执行键处理程序。10.3 10.3 键盘键盘/显示器接口设计实例显示器接口设计实例10.3.1 10.3.1 利用利用8155H8155H芯片实现键盘芯片实现键盘/显示器接口显示器接口 8031 8031外扩一片外扩一片8155H8155H。RAMRAM地址:地址:7E00H7E00H7EFFH7EFFH。I/OI/O口地址:口地址:7F00H7F00H7F05H7F05H。PAPA口口为输出口,控制键盘为输出口,控制键盘列线的扫描列线的扫描,同时又是,同时又是6 6位共阴极显示器的位共阴极
22、显示器的位扫描口位扫描口。PBPB口口作为显示器段码输出口,作为显示器段码输出口,PCPC口作为键盘的行口作为键盘的行线状态的输入口。线状态的输入口。75452 75452:反相驱动器,反相驱动器,74077407:同相驱动器。同相驱动器。1 1动态显示程序设计动态显示程序设计 8031 8031内部内部RAM 6RAM 6个显示缓冲单元:个显示缓冲单元:79H79H7EH7EH,存,存放要显示的放要显示的6 6位数据。位数据。8155H 8155H的的PBPB口输出相应位的段码,口输出相应位的段码,依次改变依次改变PAPA口口输出为输出为高高的位的位使某一位显示某一字符,其它位为暗。使某一位
23、显示某一字符,其它位为暗。动态地显示出由缓冲区中显示数据所确定的字符。程动态地显示出由缓冲区中显示数据所确定的字符。程序流程如图序流程如图10-15 10-15。位码位码PA口口查表取段码查表取段码段码段码PB口口位码左移位码左移移完一遍?移完一遍?结束结束参考程序参考程序:DIRDIR:MOV R0,MOV R0,79H79H;置缓冲器指针初值;置缓冲器指针初值MOV R3,MOV R3,01H01H;位选码的初值送;位选码的初值送R3R3MOV A,R3MOV A,R3LD0LD0:MOV DPTR,MOV DPTR,7F01H7F01H;位选码;位选码PAPA口(口(PA.0PA.0位)
24、位);最左边最左边LEDLED亮亮MOVX DPTR,AMOVX DPTR,AINC DPTRINC DPTR ;数据指针指向;数据指针指向PBPB口口MOV A,R0 MOV A,R0 ;显示数据;显示数据AAADD A,ADD A,0DH 0DH ;加偏移量(下条指令到表首间;加偏移量(下条指令到表首间 ;所有指令占的单元数);所有指令占的单元数)MOVC A,AMOVC A,APC PC ;根据显示数据来查表取段码;根据显示数据来查表取段码DIR1DIR1:MOVX DPTR,AMOVX DPTR,A ;段码;段码8155HPB8155HPB口口ACALL DL1ms ACALL DL1
25、ms ;该位显示;该位显示1ms1msINC R0INC R0 ;指针指向下一个数据单元;指针指向下一个数据单元MOV A,R3MOV A,R3 ;位选码送入;位选码送入A A中中JB Acc.5,LD1 JB Acc.5,LD1 ;判断是否扫描到最右边的;判断是否扫描到最右边的 ;LEDLED,如到最右边则返回,如到最右边则返回RL A RL A ;位选码向左移一位,准备让;位选码向左移一位,准备让 ;右边的下一位右边的下一位LEDLED亮亮MOV R3,AMOV R3,A ;位选码位选码送送R3R3中保存中保存AJMP LD0 ;AJMP LD0 ;LD1LD1:RET ;RET ;DSE
26、GDSEG:DB 3FH,06H,5BH,4FH,66H,6DH DB 3FH,06H,5BH,4FH,66H,6DH;共阴极段码表;共阴极段码表 DB 7DH,07H,7FH,6FH,77H,7CHDB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,79H,71H,73H,3EH DB 39H,5EH,79H,71H,73H,3EHDB 31H,6EH,1CH,23H,40H,03HDB 31H,6EH,1CH,23H,40H,03HDB 18H,00HDB 18H,00HDL1msDL1ms:MOV R7,MOV R7,02H02H;延时延时1ms1ms子程序子程序
27、DLDL:MOV R6,MOV R6,0FFH0FFHDL6DL6:DJNZ R6,DL6DJNZ R6,DL6DJNZ R7,DLDJNZ R7,DLRETRET2 2键盘程序设计键盘程序设计(1 1)判别键盘上有无键闭合)判别键盘上有无键闭合(2 2)去除键的机械抖动)去除键的机械抖动 (3 3)判别闭合键的键号)判别闭合键的键号(4 4)使)使CPUCPU对键的一次闭合仅作一次处理对键的一次闭合仅作一次处理(1 1)判别键盘上有无键闭合)判别键盘上有无键闭合PA07输出全输出全“0”,读,读PC口的状态,若口的状态,若PC0PC3为全为全“1”,则键盘上没有,则键盘上没有闭合键,若闭合键
28、,若PC03不全为不全为“1”,则有键处于闭合状态。,则有键处于闭合状态。(2 2)去除键的机械抖动)去除键的机械抖动 延迟一定时间再判别键盘状态,仍有闭合,则处于稳定闭合期,否则是抖动延迟一定时间再判别键盘状态,仍有闭合,则处于稳定闭合期,否则是抖动(3 3)判别闭合键的键号)判别闭合键的键号PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PC3 PC2 PC1 PC0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1.v 闭合的键号:
29、N=行首键号+列号=8+1=9(4 4)使)使CPUCPU对键的一次闭合仅作一次处理对键的一次闭合仅作一次处理处理方法:等待闭合键释放以后再作处理。处理方法:等待闭合键释放以后再作处理。键盘子程序如下:键盘子程序如下:KEYIKEYI:ACALL KS1ACALL KS1 ;调用判有无键闭合子程序;调用判有无键闭合子程序JNZ LK1 JNZ LK1 ;有键闭合,跳;有键闭合,跳LK1LK1NINI:ACALL DIRACALL DIR ;无键闭合,调用显示子程序;无键闭合,调用显示子程序,延延 ;迟;迟6ms6ms后,跳后,跳KEYIKEYIAJMP KEYIAJMP KEYILK1LK1:
30、ACALL DIRACALL DIR ;可能有键闭合,软件延迟;可能有键闭合,软件延迟12ms12ms去抖去抖ACALL DIRACALL DIRACALL KS1 ACALL KS1 ;调用判有无键闭合子程序;调用判有无键闭合子程序JNZ LK2JNZ LK2 ;经去抖,判键确实闭合,跳;经去抖,判键确实闭合,跳LK2LK2ACALL DIRACALL DIR;调用显示子程序延迟;调用显示子程序延迟6ms6msAJMP KEYIAJMP KEYI;抖动引起,跳;抖动引起,跳KEYIKEYILK2LK2:MOV R2,MOV R2,0FEH0FEH;列选码;列选码R2R2MOV R4,MOV
31、R4,00H00H;R4R4为列号计数器为列号计数器LK4LK4:MOV DPTR,MOV DPTR,7F01H 7F01H;列选码;列选码8155H8155H的的PAPA口口MOV A,R2 ;MOV A,R2 ;MOVX DPTR,A ;MOVX DPTR,A ;INC DPTRINC DPTR ;数据指针增;数据指针增2 2,指向,指向PCPC口口INC DPTR ;INC DPTR ;MOVX A,DPTRMOVX A,DPTR ;读;读8155H PC8155H PC口口JB Acc.0,LONEJB Acc.0,LONE ;0 0行线为高,无键闭合,跳行线为高,无键闭合,跳 LON
32、ELONE,转判,转判1 1行行MOV A,MOV A,00H00H ;0 0行有键闭合行有键闭合,首键号首键号0A0AAJMP LKPAJMP LKP ;跳;跳LKPLKP,计算键号,计算键号LONELONE:JB Acc.1,LTW0 JB Acc.1,LTW0 ;1 1行线为高,无键闭合,跳行线为高,无键闭合,跳LTW0LTW0,;转判;转判2 2行行MOV A,MOV A,08H 08H ;1 1行有键闭合行有键闭合,首键号首键号8A8AAJMP LKPAJMP LKPLTW0LTW0:JB A.2,LTHR JB A.2,LTHR ;2 2行线为高,无键闭合,跳行线为高,无键闭合,跳
33、 ;LTHRLTHR,转判,转判3 3行行MOV A,MOV A,10H 10H ;2 2行有键闭合行有键闭合,首键号首键号10HA10HAAJMP LKPAJMP LKP;跳;跳LKPLKP,计算键号,计算键号LTHRLTHR:JB Acc.3,NEXT JB Acc.3,NEXT ;3 3行线为高,无键行线为高,无键;闭合,跳;闭合,跳NEXTNEXT,准备下一列扫描,准备下一列扫描MOV A,MOV A,18H18H;3 3行有键闭合行有键闭合,首键号首键号18HA18HALKPLKP:ADD A,R4 ADD A,R4 ;计算键号:首键号列号;计算键号:首键号列号=键号键号PUSH A
34、 PUSH A ;键号进栈保护;键号进栈保护LK3LK3:ACALL DIRACALL DIR;调用显示子程序,延时;调用显示子程序,延时6ms6msACALL KS1ACALL KS1;调用判有无键闭合子程序,延时;调用判有无键闭合子程序,延时;6ms6msJNZ LK3 JNZ LK3 ;判键释放否,未释放,则循环;判键释放否,未释放,则循环POP A POP A ;键已释放,键号出栈;键已释放,键号出栈AARETRETNEXTNEXT:INC R4 INC R4 ;列计数器加;列计数器加1 1,为下一列扫描作准备,为下一列扫描作准备MOV A,R2 MOV A,R2 ;判是否已扫到最后一
35、列(最右一列);判是否已扫到最后一列(最右一列)JNB Acc.7,KND JNB Acc.7,KND ;键扫描已扫到最后一列,跳;键扫描已扫到最后一列,跳KNDKND,;重新进行整个键盘扫描;重新进行整个键盘扫描RL A RL A ;键扫描未扫到最后一列,位选码左移;键扫描未扫到最后一列,位选码左移;一位;一位MOV R2,A MOV R2,A;位选码;位选码R2R2AJMP LK4 ;AJMP LK4 ;KNDKND:AJMP KEYI;AJMP KEYI;KS1KS1:MOV DPTR,#7F01HMOV DPTR,#7F01H;判有无键闭合子程序,全;判有无键闭合子程序,全“0”0”;
36、扫描口(;扫描口(PAPA口)口)MOV A,MOV A,00H00H ;即列线全为低电平;即列线全为低电平MOVX DPTR,A ;MOVX DPTR,A ;INC DPTRINC DPTR ;DPTRDPTR增增2 2,指向,指向PCPC口口INC DPTRINC DPTR ;指针增;指针增1 1,指向,指向PCPC口口MOVX A,DPTR MOVX A,DPTR ;从;从PCPC口读行线的状态口读行线的状态CPL A CPL A ;行线取反,如无键按下,则;行线取反,如无键按下,则A A为为0 0;ANL A,ANL A,0FH 0FH ;屏蔽无用的高;屏蔽无用的高4 4位位RETRE
37、T10.3.2 10.3.2 利用利用80318031的串行口实现键盘的串行口实现键盘/显示器接口显示器接口 串口未作它用,可用来外扩键盘串口未作它用,可用来外扩键盘/显示器。显示器。串口为方式串口为方式0 0输出,串口外接移位寄存器输出,串口外接移位寄存器74LS16474LS164。接口电路如图接口电路如图10-1710-17。74LS164(0)74LS164(0)74LS164(7):74LS164(7):作为作为8 8位位LEDLED的段码输出,的段码输出,8031 8031的的P3.4P3.4、P3.5P3.5:两行键的行状态输入两行键的行状态输入 P3.3 P3.3(TXDTXD
38、):):同步移位脉冲输出控制线,同步移位脉冲输出控制线,优点:优点:亮度大亮度大,容易做到,容易做到显示不闪烁显示不闪烁,且,且CPUCPU不必不必频繁的为显示服务频繁的为显示服务,从而使单片机有更多的时间处理,从而使单片机有更多的时间处理其它事务。其它事务。显示子程序:显示子程序:DIRDIR:SETB P3.3 SETB P3.3 ;P3.3=1P3.3=1允许允许TXDTXD脚同步移位脚同步移位 ;脉冲输出;脉冲输出MOV R7,MOV R7,08H 08H ;送出的段码个数,;送出的段码个数,R7R7为段为段 ;码个数计数器;码个数计数器MOV R0,MOV R0,7FH 7FH ;7
39、FH7FH78H78H为显示数据缓冲区为显示数据缓冲区DL0DL0:MOV A,R0MOV A,R0 ;取出要显示的数送;取出要显示的数送A AADD A,ADD A,0DH 0DH ;加上偏移量;加上偏移量MOVC A,AMOVC A,APC PC ;查段码表;查段码表SEGTAGSEGTAG,取出段码,取出段码MOV SBUF,A MOV SBUF,A ;将段码送;将段码送SBUFSBUF DL1DL1:JNB TI,DL1JNB TI,DL1;输出段码,查询;输出段码,查询TITI状态,状态,1 1个字节个字节;的段码输出完否?;的段码输出完否?CLR TI CLR TI ;1 1个字节
40、的段码输出完个字节的段码输出完,清清TITI标志标志DEC R0DEC R0;指向下一个显示数据单元;指向下一个显示数据单元 DJNZ R7,DL0DJNZ R7,DL0;段码个数计数器;段码个数计数器R7R7是否为是否为0,0,如不如不;为为0 0,继续送段码,继续送段码CLR P3.3 CLR P3.3 ;8 8个段码输出完毕,关显示器输出个段码输出完毕,关显示器输出RET RET ;返回;返回SEGTABSEGTAB:DB 0C0H,0F9H,0A4H,0B0H,99HDB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极段码表,;共阳极段码表,;0,1,2,3,40,1,2,3
41、,4DB 92H,82H,0F8H,90HDB 92H,82H,0F8H,90H;5,6,7,8,95,6,7,8,9DB 88H,83H,0C6H,0A1H,86HDB 88H,83H,0C6H,0A1H,86H;A,B,C,D,EA,B,C,D,EDB 8FH,0BFH,8CH,0FFH,0FFHDB 8FH,0BFH,8CH,0FFH,0FFH;F,F,P,P,暗暗 键盘扫描子程序:键盘扫描子程序:KEYIKEYI:MOV A,MOV A,00H00H;判有无键按下,使所有列线为;判有无键按下,使所有列线为0 0;的编码送;的编码送A AMOV SBUF,AMOV SBUF,A;扫描键盘
42、的(;扫描键盘的(8 8)号)号74LS16474LS164输输 ;出为;出为00H,00H,使所有列线为使所有列线为0 0KL0KL0:JNB TI,KL0JNB TI,KL0;串行输出完否?;串行输出完否?CLR TICLR TI;串行输出完毕,清;串行输出完毕,清TITIKL1KL1:JNB P3.4,PK1JNB P3.4,PK1;第;第1 1行有闭合键吗?如有,跳行有闭合键吗?如有,跳;PK1PK1进行处理进行处理JB P3.5,KL1JB P3.5,KL1;在第;在第2 2行键中有闭合键吗?无闭行键中有闭合键吗?无闭;合键跳;合键跳KL1KL1PK1PK1:ACALL DL10AC
43、ALL DL10;调用延时;调用延时10ms10ms子程序子程序DL10DL10,软,软;件消除抖动;件消除抖动JNB P3.4,PK2JNB P3.4,PK2;判是否抖动引起的?;判是否抖动引起的?JB P3.5,KL1JB P3.5,KL1PK2PK2:MOV R7,MOV R7,08H 08H ;不是抖动引起的;不是抖动引起的MOV R6,MOV R6,0FEH0FEH;判别是哪一个键按下,;判别是哪一个键按下,FEHFEH为最为最;左一列为低;左一列为低MOV A,R6MOV A,R6 ;KL5KL5:MOV SBUF,AMOV SBUF,A;列扫描码从串行口输出;列扫描码从串行口输出
44、KL2KL2:JNB TI,KL2JNB TI,KL2;等待串行口发送完;等待串行口发送完CLR TICLR TI;串行口发送完毕,清;串行口发送完毕,清TITI标志标志JNB P3.4,PKONEJNB P3.4,PKONE;读第;读第1 1行线状态,第行线状态,第1 1行有键闭行有键闭;合,跳;合,跳PKONEPKONE处理处理JB P3.5,NEXT JB P3.5,NEXT ;读第;读第2 2行状态,是第行状态,是第2 2行某键否?行某键否?MOV R3,#00H ;扫描的列序号初始值为扫描的列序号初始值为0MOV R4,MOV R4,08H08H;第;第2 2行键中有键被按下,行首键
45、行键中有键被按下,行首键;号;号08H08H送送R4R4AJMP PK3 ;AJMP PK3 ;PKONEPKONE:MOV R4,MOV R4,00H 00H ;第;第1 1行有键按下,行首键号行有键按下,行首键号00H00H送送R4R4PK3PK3:MOV SBUF,MOV SBUF,00H 00H;等待键释放,发送;等待键释放,发送00H00H使所有列使所有列 ;线为低;线为低KL3KL3:JNB TI,KL3 ;JNB TI,KL3 ;CLR TICLR TI ;发送完毕,清标志;发送完毕,清标志KL4KL4:JNB P3.4,KL4 JNB P3.4,KL4 ;判行线状态;判行线状态
46、JNB P3.5,KL4 ;JNB P3.5,KL4 ;MOV A,R4MOV A,R4 ;两行线均为高,说明键已释放;两行线均为高,说明键已释放 ADD A,R3ADD A,R3 ;计算得到键码;计算得到键码AARETRETNEXTNEXT:MOV A,R6MOV A,R6 ;列扫描码左移一位,判下列键;列扫描码左移一位,判下列键RL A ;RL A ;MOV R6,AMOV R6,A ;记住列扫描码于;记住列扫描码于R6R6中中DJNZ R7,KL5DJNZ R7,KL5 ;列计数器;列计数器R7R7减减1 1,8 8列键都检查列键都检查 ;完?;完?AJMP KEYIAJMP KEYI ;8 8列键扫描完毕,开始下一个键列键扫描完毕,开始下一个键;盘扫描周期;盘扫描周期作业:现有现有8031单片机,单片机,74LS373锁存器,锁存器,1片片2764EPROM和两片和两片6116RAM,请使用它们组成请使用它们组成1个单片机应用系统。个单片机应用系统。