版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章 输入输出接口输入输出接口 P0-P3P0-P3 计算机对外设进行数据操计算机对外设进行数据操作时,作时,只有通过接口才能完成只有通过接口才能完成与与外设数据外设数据的交换。的交换。 CPU输入接口输入接口输入设备输入设备输出接口输出接口输出设备输出设备 由于由于CPUCPU的数据线是外设或存贮器和的数据线是外设或存贮器和CPUCPU进行数据传输的唯一公共通进行数据传输的唯一公共通道,为了使道,为了使挂接在挂接在总线总线上上的的器件在数据传递时不发生器件在数据传递时不发生冲突,冲突,CPUCPU和外设之和外设之间必须有接口电路(简称接口或间必须有接口电路(简称接口或I/OI/O口)
2、口)。接口起着缓冲、锁存数据,地接口起着缓冲、锁存数据,地址译码、信息格式转换、传递状态(外设状态),发布命令等功能。址译码、信息格式转换、传递状态(外设状态),发布命令等功能。 I/OI/O接口种类:接口种类:I/OI/O接口有并行接口、串行接口、定时接口有并行接口、串行接口、定时/ /计数器、计数器、A/DA/D、D/AD/A等,根据等,根据不同的不同的外设选择不同的接口。单片机已将这些接口外设选择不同的接口。单片机已将这些接口集成到主集成到主芯片芯片内部,内部,所以一般所以一般无需无需再再外加接口外加接口。 本章介绍单片机的并行接口,用于和外设的并行数据通信。本章介绍单片机的并行接口,用
3、于和外设的并行数据通信。 51 51单片机有单片机有P0P0、P1P1、P2P2、P3P3四个四个8 8位双向位双向I/OI/O口,每个端口可以按字口,每个端口可以按字节输入或输出,也可以按位进行输入或输出,用作位控十分方便。节输入或输出,也可以按位进行输入或输出,用作位控十分方便。P0P0口口为三态双向口,能带为三态双向口,能带8 8个个TTLTTL电路;电路;P1P1、P2P2、P3P3口为准双向口,负载能力口为准双向口,负载能力为为4 4个个TTLTTL电路。电路。15 5.1 P0.1 P0P3P3端口的功能和内部结构端口的功能和内部结构 P0P0P3P3端口的功能如下:端口的功能如下
4、: POPO口口: 1.: 1.作为输入作为输入/ /输出口。输出口。 2.2.作为地址作为地址/ /数据总线数据总线 , ,接外围芯片时接外围芯片时POPO口分时输出低口分时输出低 8 8 位地址与数据信号。位地址与数据信号。 P1P1口口: 1.: 1.作为输入作为输入/ /输出口。输出口。 2. 2.在增强型在增强型(52(52系列系列) )和和ISPISP型型( (在系统编程型在系统编程型) )中中P1P1口还有口还有如下功能如下功能: : P1.0 T2P1.0 T2引脚引脚, ,定时定时/ /计数器计数器2 2外部计数脉冲输入外部计数脉冲输入 P1.1 T2EXP1.1 T2EX引
5、脚引脚, ,定时定时/ /计数器计数器2 2触发和触发和捕捉捕捉控制控制 P1.5 MOSIP1.5 MOSI引脚引脚, ,在系统编程在系统编程的的数据输入数据输入 P1.6 MISOP1.6 MISO引脚引脚, ,在系统编程在系统编程的的数据输出数据输出 P1.7 SCKP1.7 SCK引脚引脚, ,在系统编程在系统编程的的时钟输入时钟输入2P2P2口口: 1.: 1.作为输入作为输入/ /输出口。输出口。 2.2.作为高作为高8 8位地址总线。位地址总线。 P3P3口口: 1.: 1.作第一功能使用时,其功能为输入作第一功能使用时,其功能为输入/ /输出口。输出口。 2.2.作第二功能使用
6、时,每一位功能定义如下表所示作第二功能使用时,每一位功能定义如下表所示: : 端口引脚端口引脚第第 二二 功功 能能P3.0P3.0RXD RXD (串行输入线)串行输入线)P3.1P3.1TXD TXD (串行输出线)串行输出线)P3.2P3.2INT0INT0(外部中断外部中断0 0输入线)输入线)P3.3P3.3INT1INT1 (外部中断(外部中断1 1输入线)输入线)P3.4P3.4T0 T0 (定时器定时器0 0外部计数脉冲输入)外部计数脉冲输入)P3.5P3.5T1 T1 (定时器定时器1 1外部计数脉冲输入外部计数脉冲输入P3.6P3.6WRWR (外部数据存储器写选通信号入)
7、外部数据存储器写选通信号入)P3.7P3.7RDRD (外部数据存储器读选通信号入)外部数据存储器读选通信号入)3 5.1.2 5.1.2 端口的内部结构端口的内部结构 四个端口的某一位的结构见图四个端口的某一位的结构见图5.15.1,同一个端口的各位具有相同,同一个端口的各位具有相同的结构。由图可见,四个端口的结构有以下相同之处:的结构。由图可见,四个端口的结构有以下相同之处: 都有两个输入缓冲器,分别受都有两个输入缓冲器,分别受来自来自CPUCPU内部内部的的读锁存器和读引脚读锁存器和读引脚控制信号的控制。控制信号的控制。 都有锁存器都有锁存器( (即专用寄存器即专用寄存器POPOP3)P
8、3)。 都是场效应管输出驱动。都是场效应管输出驱动。 依据每个端口的不同功能,内部结构亦有不同之处,以下重依据每个端口的不同功能,内部结构亦有不同之处,以下重点介绍不同之处。点介绍不同之处。41.1.POPO口口 POPO口的输出驱动电路由上拉场效应管口的输出驱动电路由上拉场效应管T1T1和驱动场效应和驱动场效应T2T2组成,控制电组成,控制电路包括一个与门,路包括一个与门, 一个非门和一个模拟开关一个非门和一个模拟开关MUXMUX。P0.n锁存器DQQP0.nP0.nVccVcc&地址/数据控制输入缓冲输入缓冲读锁存器读引脚内部总线写锁存器P0口的位结构图MUXMUXT1T2T2CLCL 多
9、路选择开关的作用多路选择开关的作用:相当一个单刀双掷开关,:相当一个单刀双掷开关,用用来作为来作为普通普通I/OI/O口还是作为口还是作为数据数据/ /地址地址总线的选择开关。总线的选择开关。 5 当控制当控制=1 =1 时,时,MUX MUX 开关向上,作为总线,将地址开关向上,作为总线,将地址/ /数据分时地输数据分时地输出,完成总线的功能。如下图所示:出,完成总线的功能。如下图所示: 当控制当控制 =0 =0 时,时,MUXMUX 开关向开关向下,作为下,作为I/OI/O线,将锁存器的反相线,将锁存器的反相端与输出接通,此时如果端与输出接通,此时如果: : 作为输出时,是通过锁存器作为输
10、出时,是通过锁存器来完成的,由于来完成的,由于T1T1已经截止,所已经截止,所以此时以此时常常要外加上拉电阻常常要外加上拉电阻,否,否则得不到高电平。则得不到高电平。6 如果作为输入时,又分读引脚和读锁存器两种。如果作为输入时,又分读引脚和读锁存器两种。a) 51a) 51系列中有一些读系列中有一些读- -修改修改- -写指令,例如写指令,例如 INC P0 , INC P0 , 它的它的执行就是先读执行就是先读P0P0的锁存器,加的锁存器,加1 1后,再写入锁存器。如右图后,再写入锁存器。如右图所示:所示:b) b) 另外则是读引脚,在读引脚时,另外则是读引脚,在读引脚时,P0P0口的口的T
11、1T1已成高阻态,但已成高阻态,但T2T2口不定,口不定,所以一般都要先写所以一般都要先写1 1,再读入,再读入。如。如左图所示:左图所示: 以上两种读命令,已经在芯片设计中考虑了,遇到这两种指令(读引以上两种读命令,已经在芯片设计中考虑了,遇到这两种指令(读引脚和读存储器)会分别自动地进行,不需要用户担心。脚和读存储器)会分别自动地进行,不需要用户担心。7P1.n锁存器DQQP1.nVccR输入缓冲输入缓冲读锁存器读引脚内部总线写锁存器P1口的位结构图T12. P12. P1口口 通用通用I/OI/O端口,准双向、静态。(所谓准双向,是指在读入前,要先端口,准双向、静态。(所谓准双向,是指在
12、读入前,要先写写1 1,凡是这样的端口称之准双向口)。与,凡是这样的端口称之准双向口)。与P0P0口相比,它的结构比较简单,口相比,它的结构比较简单,直接用一个上拉电阻代替了直接用一个上拉电阻代替了MOSMOS管,输出有锁存,输入时为了能正确地读管,输出有锁存,输入时为了能正确地读入引脚的信号,一定要先写入引脚的信号,一定要先写1 1。 P1P1口是口是51 51 系列单片机中,系列单片机中,唯一一个单功能唯一一个单功能的端口,由于输的端口,由于输出信号锁存且无出信号锁存且无其他变化,所以其他变化,所以也称之静态口。也称之静态口。常常用作普通的常常用作普通的输入和输出。输入和输出。83 3、P
13、2P2口口 动态地址端口,主要用于存储器扩充时,输出寻找动态地址端口,主要用于存储器扩充时,输出寻找片外片外RAMRAM和和ROMROM单元单元的高的高8 8位地址。从结构图中可知,它比位地址。从结构图中可知,它比P1P1口增加了多路开关和反向器,当口增加了多路开关和反向器,当控制控制=0=0,开关与左边接通,则通过内部总线,输出执行,开关与左边接通,则通过内部总线,输出执行MOVXMOVX时的时的RAMRAM地址地址的高的高8 8位。当控制位。当控制=1=1时,开关与右边接通,输出执行时,开关与右边接通,输出执行MOVCMOVC时的时的ROMROM地址的高地址的高8 8位。当作普通的位。当作
14、普通的I/OI/O口时,多路开关与左边接通。也存在读锁存器和读引口时,多路开关与左边接通。也存在读锁存器和读引脚的不同。脚的不同。MUXRP0.n锁存器DQQP2.nVcc地址 控制输入缓冲输入缓冲读锁存器读引脚内部总线写锁存器P2口的位结构图TROMRAM94 4、P3P3口口 双功能静态双功能静态I/OI/O口,它既可以作一般的口,它既可以作一般的I/OI/O端口,也能作为具有控制端口,也能作为具有控制总线功能的端口。从结构图中可见,当作为普通静态总线功能的端口。从结构图中可见,当作为普通静态I/OI/O口输出时,第二口输出时,第二输出功能为输出功能为1 1,此时的电路结构与,此时的电路结
15、构与P1P1口相同。当作为第二功能输出时,锁口相同。当作为第二功能输出时,锁存器的存器的Q=1Q=1,输出第二功能的信号。当作为普通静态,输出第二功能的信号。当作为普通静态I/O I/O 口输入时,与其口输入时,与其他准双向口一样,先写他准双向口一样,先写1 1,再读入引脚的信号。,再读入引脚的信号。 RP0.n锁存器DQQP3.nVcc第二输出功能输入缓冲输入缓冲读锁存器读引脚内部总线写锁存器P3口的位结构图T第二输入功能10归纳四个并行口使用的注意事项如下:归纳四个并行口使用的注意事项如下:如果单片机内部有程序存储器,不需要扩展外部存贮器时,单片机如果单片机内部有程序存储器,不需要扩展外部
16、存贮器时,单片机的四个口均可作的四个口均可作I/OI/O口使用。口使用。四个口在作输入口使用时,均应先对其写四个口在作输入口使用时,均应先对其写“1 1”,以避免误读。,以避免误读。P0P0口作口作I/OI/O口使用时应外接口使用时应外接10 K10 K的上拉电阻。的上拉电阻。当当P2P2只有某几根线作地址使用时,剩下的线不能作只有某几根线作地址使用时,剩下的线不能作I/OI/O口线使用。口线使用。P3P3口的某些口线作第二功能时,剩下的口线可以单独作口的某些口线作第二功能时,剩下的口线可以单独作I/OI/O口线使用。口线使用。5.2 5.2 编程举例编程举例 例例5-1.5-1.设计一电路,
17、监视某开关设计一电路,监视某开关K K,用发光二极管用发光二极管LEDLED显示开关状态,如显示开关状态,如果开关合上,果开关合上,LED LED 亮、亮、 开关打开,开关打开,LEDLED熄灭。熄灭。 分析:设计电路如图分析:设计电路如图5.25.2如示。开关接在如示。开关接在P1.1P1.1,LEDLED接接P1.0P1.0,当开关断开,当开关断开时,时,P1.1P1.1为为+5+5V V,对应数字量为对应数字量为“1 1”,开关合上时,开关合上时P1.1P1.1电平为电平为0 0V V,对应对应数字量为数字量为“0 0”,这样就可以用,这样就可以用JBJB指令对开关状态进行检测指令对开关
18、状态进行检测,从而进入不,从而进入不同的程序段处理。同的程序段处理。 。11用汇编编程如下:用汇编编程如下: CLR P1.0 CLR P1.0 ;使发光二极管灭使发光二极管灭AGA:SETB P1.1 AGA:SETB P1.1 ;先对先对P1.1P1.1口写入口写入“1 1” JB P1.1JB P1.1,LIG LIG ;开关开,转开关开,转LIGLIG SETB P1.0 SETB P1.0 ;开关合上,二极管亮开关合上,二极管亮 SJMP AGASJMP AGALIG:CLR P1.0 LIG:CLR P1.0 ;开关打开,二极管灭开关打开,二极管灭 SJMP AGASJMP AGA
19、用用C C语言编程如下:语言编程如下: #include #include sbit p1_0=P10; sbit p1_0=P10; sbit p1_1=P11; sbit p1_1=P11; / /* * 定义位变量定义位变量 * */ / void main( ) void main( ) p1_0=0; p1_0=0; / /* * 使发光二极管灭使发光二极管灭 * */ / while(1) while(1) p1_1=1; p1_1=1; / /* * 对输入位对输入位P1.1P1.1写写“1 1” * */ / if (p1_1=0) p1_0=1; if (p1_1=0) p1
20、_0=1; / /* * 开关闭合二极管亮开关闭合二极管亮 * */ / else p1_0=0; else p1_0=0; / /* * 开关打开二极管灭开关打开二极管灭 * */ / +5+5V VP1.0P1.0LEDLEDP1.0P1.0+5+5V VLEDLED1为了提高为了提高LED的亮度,的亮度,可以接成灌电流形式:可以接成灌电流形式:或者加驱动电路:或者加驱动电路:12例例5-2.5-2.在图在图5.35.3中中P1.4P1.4P1.7P1.7接四个发光二极管接四个发光二极管,P1.0,P1.0P1.3P1.3接四个开关,接四个开关,编程将开关的状态反映到发光二极管上。编程将开
21、关的状态反映到发光二极管上。89C51/89S51+5V+5V1K4330 4P1.0EAP1.1P1.2P1.3P1.4P1.5P1.6P1.713用汇编语言编程:用汇编语言编程: ORG 0000H MOV P1,#0FFH ;高四位的高四位的LED全灭,全灭, 低四位输入线送低四位输入线送“1”, ABC: MOV A,P1 ;读读P1口引脚开关状态,并送入口引脚开关状态,并送入A SWAP A ;低四位开关状态换到高四位低四位开关状态换到高四位 ANL A,#0F0H ;保留高四位保留高四位 MOV P1,A ;从从P1口输出口输出 ORL P1,#0FH ;高四位不变,低四位送高四位
22、不变,低四位送“1”,准备下一轮读开关,准备下一轮读开关 SJMP ABC ;循环执行循环执行用用C C语言编程如下:语言编程如下: sfr P1=0 x90; main( ) P1=0 xff; / /* * P1 P1低四位置低四位置“1 1”,高四位灯全灭,高四位灯全灭 * */ / while(1) P1=P14; / /* * 读入读入P1P1引脚,左移四位后再从引脚,左移四位后再从P1P1口输出口输出 * */ / P1=P1|0 x0f; / /* * P1 P1高四位不变,低四位置高四位不变,低四位置“1 1”,再读开关,再读开关 * */ / 14例例5-3.5-3.用用P1
23、.0P1.0输出输出1 1KHzKHz和和500500HzHz的音频信号驱动扬声器作报警,要求的音频信号驱动扬声器作报警,要求1 1KHzKHz信号响信号响100100msms,500Hz500Hz信号响信号响200200msms,交替进行;交替进行;P1.7P1.7接一开关进行控制,接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。当开关合上响报警信号,当开关断开告警信号停止,编出程序。 200200* *500us500us200200* *1ms1ms用用C C语言编程如下:语言编程如下: #include sbit P10=P10; sbit P17=P17;m
24、ain( )unsigned char i,j;While (1)P171;While (P17=0) for (i=1; i=200; i+) / /* * 控制控制1KH1KH响响100100毫秒毫秒 * */ / P10=P10; for (j=0; j=50; j+); / /* * 软件软件延时延时500500微秒微秒* */ / for (i=1; i=200; i+) / /* * 控制控制500HZ500HZ响响200200毫秒毫秒 * */ / P10=P10; for (j=0; j=100; j+); / /* * 软件软件延时延时1 1毫秒毫秒 * */ / 165.3
25、 5.3 用并行口设计用并行口设计LEDLED数码显示器和键盘电路数码显示器和键盘电路 5.3.15.3.1用并行口设计用并行口设计LEDLED显示电路显示电路 1 1、 LEDLED显示器及其原理显示器及其原理 LEDLED有着显示亮度高,响应速有着显示亮度高,响应速度快的特点,最常用的是七段式度快的特点,最常用的是七段式LEDLED显示器,又称数码管。七段显示器,又称数码管。七段LEDLED显示器内部由七个条形和一显示器内部由七个条形和一个小圆点发光二极管组成,常见个小圆点发光二极管组成,常见LEDLED的管脚排列见右图,其中的管脚排列见右图,其中COMCOM为公共点,根据内部发光二极管为
26、公共点,根据内部发光二极管的接线形式,可分成共阴极型图的接线形式,可分成共阴极型图( (b)b)和共阳极型图和共阳极型图( (c)c)。 键盘和显示器是单片机应用系统中常用的输入输出装置。键盘和显示器是单片机应用系统中常用的输入输出装置。LEDLED数码显数码显示器是常用的显示器之一,下面介绍用单片机并行口设计示器是常用的显示器之一,下面介绍用单片机并行口设计LEDLED数码显示电数码显示电路和键盘电路的方法。路和键盘电路的方法。 17 LEDLED数码管的数码管的g ga a七个发光二极管因加正电压而发亮,因加零电压而七个发光二极管因加正电压而发亮,因加零电压而不能发亮,不同亮暗的组合就能形
27、成不同的字形,这种组合称之为字形码不能发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码( (段码段码) )。显示显示”0 0”, ,字形码为字形码为3fh.3fh.显示显示”1 1”, ,字形码为字形码为06h.06h.注意,在使用的时候与接口连接的顺序,习惯上按如图,注意,在使用的时候与接口连接的顺序,习惯上按如图,a a是是 LSBLSB。18 显然共阳极和共阴极的字形码是不同的显然共阳极和共阴极的字形码是不同的(互为反码)(互为反码),其字形码见,其字形码见表表5.25.2。LEDLED数码管每段需数码管每段需10102020mama的驱动电流,可用的驱动电流,可用TTLTT
28、L或或CMOSCMOS器件驱动。器件驱动。 字形码的控制输出可采用硬件译码方式,如采用字形码的控制输出可采用硬件译码方式,如采用BCD 7BCD 7段译码段译码/ /驱动驱动器器7474LS48LS48、74LS4974LS49、CD4511(CD4511(共阴极共阴极) )或或7474LS46LS46、74LS4774LS47、CD4513CD4513( (共阳极共阳极) ),也可用软件查表方式输出。,也可用软件查表方式输出。2 2、LEDLED数码管的接口数码管的接口 数码管的接口有静态接口和动态接口。数码管的接口有静态接口和动态接口。 静态接口静态接口:为固定显示方式,无闪烁:为固定显示
29、方式,无闪烁。它的原理就是采用锁存器来。它的原理就是采用锁存器来存储要显示的字形码,存储要显示的字形码,这种接法占用接口多,如果这种接法占用接口多,如果POPO口和口和P2P2口要用作数口要用作数据线和地址线,单片机据线和地址线,单片机就只剩就只剩P1P1口来连口来连接一个数码管。接一个数码管。目前也常用带串目前也常用带串口的锁存器来实现多口的锁存器来实现多个数码管个数码管的连接。的连接。 动态接口动态接口:采用各数码管轮流循环显示的方法,当循环显示频率较:采用各数码管轮流循环显示的方法,当循环显示频率较高时,利用人眼的视觉暂留特性,高时,利用人眼的视觉暂留特性,达到类似静态显示的效果达到类似
30、静态显示的效果,这种显示,这种显示需要用两个接口,一个用来完成字形码的输出需要用两个接口,一个用来完成字形码的输出( (字形选择字形选择) ),另一个完成,另一个完成各数码管的轮流点亮各数码管的轮流点亮( (数位选择数位选择) )。 19 例如图例如图5.55.5是接有五个共阴极数码管的动态显示接口电路,用是接有五个共阴极数码管的动态显示接口电路,用7474LS373LS373接成直通的方式作驱动电路,阴极用非门接成直通的方式作驱动电路,阴极用非门7474LS04LS04反相门驱动,字形选择由反相门驱动,字形选择由P1P1口提供,位选择由口提供,位选择由P3P3口控制。当口控制。当P3.0P3
31、.0P3.4P3.4轮流输出轮流输出1 1时,五个数码管轮时,五个数码管轮流显示。流显示。P1.7P1.7接开关,当开关打向位置接开关,当开关打向位置“1 1”时,时, 显示显示“1234512345”字样,当字样,当开关打向开关打向“2 2”时,显示时,显示“HELLOHELLO”字样。字样。 20 用汇编语言:用汇编语言: ORG 0000H MOV P3,#0 ;清显示清显示 TEST:SETB P1.7 JB P1.7,DIR1 ;检测开关检测开关 MOV DPTR,#TAB1 ; 开关置于开关置于1,取取12345字形表头地址字形表头地址 SJMP DIR DIR1:MOV DPTR
32、,#TAB2 ; 开关置于开关置于2,取取“HELLO”字形表头字形表头地址地址 DIR:MOV R0,#0 ;R0存字形表偏移量存字形表偏移量 MOV R1,#01 ;R1置数码表位选代码置数码表位选代码 NEXT:MOV A,R0 MOVC A,A+DPTR ; 查字形码表查字形码表1 MOV P1,A ;送送P1口输出口输出 MOV A,R1 MOV P3,A ;输出位选码输出位选码 ACALL DELAY ;延时延时 INC R0 ;指向下一位字形指向下一位字形 RL A ;指向下一位指向下一位 MOV R1,A CJNE R1,#20H,NEXT ; ;五个五个 数码管显示完数码管显
33、示完? ? SJMP TEST 21 DELAY: MOV R6,#20 ; ; 延时延时20ms20ms子程序子程序 DL2: MOV R7,#7DH DL1: NOP NOP DJNZ R7,DL1 DJNZ R6,DL2 RET TAB1:db 06H,5BH,4FH,66H,6DH ; ; “1 15 5”的字形码的字形码 TAB2:db 78H,79H,38H,38H,3FH ; ; “HELLOHELLO”的字形码的字形码 END22用用C C语言完成上述功能编程:语言完成上述功能编程: #include #define uint unsigned int #define ucha
34、r unsigned char sbit P17=P17; main( ) uchar code tab15=0 x86,0 xdb,0 xcf,0 xe6,0 xed; /* “1 15 5”的字形码,的字形码, 最高位送最高位送“1 1”* */ / uchar code tab25=0 xf8,0 xf9,0 xb8,0 xb8,0 xbf; / /* *“HELLOHELLO”的段码,最高的段码,最高 位送位送 “1 1”* */ / uchar i; uint j; while (1) P3=0 x01; for (i=0;i5;i+) if (P17=1) P1= tab1i; e
35、lse P1= tab2i; for (j=0;j=25000;j+); P3=1; 因为因为P1.7 P1.7 与开关连接,与开关连接,每次要读此引脚,所每次要读此引脚,所以要先写以要先写1 1。 分析程序可知,分析程序可知,C C语言的和汇编的略有不语言的和汇编的略有不同,用同,用C C编的程序当操作开关的速度足够快,编的程序当操作开关的速度足够快,可能会出现数字和字符混合显示的情况。可能会出现数字和字符混合显示的情况。235.3.2 5.3.2 用并行口设计键盘电路用并行口设计键盘电路 键盘是计算机系统中不可缺少的输入设备,当按键少时可接成线性键键盘是计算机系统中不可缺少的输入设备,当按
36、键少时可接成线性键盘盘( (如图如图5.35.3中的按键中的按键 ) ),当按键较多时,当按键较多时,常采用常采用矩阵矩阵式键盘式键盘的形式,的形式,这样这样可以节省可以节省I/OI/O线线。例如例如用用两个接口可接两个接口可接6464个按键个按键,每个按键有它每个按键有它唯一唯一的行值的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和分别通过两并行接口和 CPU CPU 通信。键盘通信。键盘电路电路的关键是如何识别按键而得到的关键是如何识别按键而得到相应按键的键值。相应按键的键值。 所以键
37、盘处理程序的任务是:所以键盘处理程序的任务是: 确定有无键按下;确定有无键按下; 判断是哪一个键按下,判断是哪一个键按下, 键的值或功能是什么;键的值或功能是什么; 还要还要设法设法消除按键在闭合或断开时的抖动。消除按键在闭合或断开时的抖动。 通常用并口来构成键盘电路,将并口分成两部分,一个输出扫描码,通常用并口来构成键盘电路,将并口分成两部分,一个输出扫描码, 使按键逐行动态接地使按键逐行动态接地( (称行扫描称行扫描) ),另一个输入按键状态,另一个输入按键状态( (称回馈信号,键称回馈信号,键盘的列值盘的列值) ), 由行扫描值和回馈信号共同形成键编码来识别按键、通过软由行扫描值和回馈信
38、号共同形成键编码来识别按键、通过软件查表,查出该键的功能。也可由硬件编码器完成键的编码。件查表,查出该键的功能。也可由硬件编码器完成键的编码。24 下图中,用下图中,用8 8XX51XX51的并行口的并行口P1P1接接4 44 4矩阵键盘,以矩阵键盘,以P1.0P1.0P1.3P1.3作输出线,作输出线,以以P1.4P1.4P1.7P1.7作输入线,键盘扫描程序的流程如图作输入线,键盘扫描程序的流程如图5.75.7所示。所示。EEDEBE7EEDDDBD7DEBDBBB7BE7D7B777+5VP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.78XX51P225Y返回键编码返回键
39、编码置行扫描初值置行扫描初值扫描位从扫描位从P1口输出口输出P1口的高四位和低四位口的高四位和低四位构成构成键编码键编码NN(有键按下)有键按下)N开始开始P1.0P1.3输出输出0延时去抖动延时去抖动P1.4P1.7全为全为1? ?P1.4P1.7全为全为1? ?YY(无键按下无键按下)11读读P1.4P1.7值值有键按下有键按下 ? ?更新扫描码更新扫描码扫到最后一行扫到最后一行? ?NY26对键盘的程序流程图对键盘的程序流程图5.75.7说明如下:说明如下: 当当P1.0P1.0P1.3P1.3输出输出0 0时,如无键按下,时,如无键按下,P1.4P1.4P1.7P1.7的输入值均为的输
40、入值均为“1 1”,如果其中有一个不是如果其中有一个不是 “1 1”,说明有键按下,再使,说明有键按下,再使P1.0P1.0P1.3P1.3逐个输出零逐个输出零( (行扫描行扫描) ),检查,检查P1.4P1.4P1.7P1.7的输入值有无零,从而查出是哪行哪列的键按的输入值有无零,从而查出是哪行哪列的键按下。在判断按键时,由于按键下。在判断按键时,由于按键时时会会产生抖产生抖动,动,一般采用:一般采用:1 1、软件、软件延时延时,编程编程跳过抖动时段后再重读跳过抖动时段后再重读来确认;来确认;2 2、硬件消抖硬件消抖,用用R-SR-S触发器闩锁电路触发器闩锁电路;但后者但后者电路电路较较复杂
41、,复杂,需要额外的硬件,需要额外的硬件,在矩阵键盘中在矩阵键盘中多多不采用。不采用。27汇编语言程序清单如下:汇编语言程序清单如下: ORG 0000HTEST: MOV P1,#0F0H ; P1.0P1.3输出输出0, P1.4P1.7 写写1,作输入位作输入位 MOV A,P1 ;读键盘,检测有无键按下;读键盘,检测有无键按下 ANL A,#0F0H ; 屏蔽屏蔽P1.0P1.3,检测,检测P1.4P1.是否全为是否全为1 CJNE A, #0F0H,AREAD ; P1.4P1.7不全为不全为1,有键按下,有键按下 SJMP TEST ;P1.4P1.7全为全为1,无键按下,重检测键盘
42、,无键按下,重检测键盘 AREAD: ACALL DELAY10MS ;延时去抖动延时去抖动 MOV P1,#0F0H ;读前先写读前先写1 MOV A,P1 ;再读键盘再读键盘 ANL A,#0F0H ; 屏蔽屏蔽P1.0P1.3,检测,检测P1.4P1.是否全为是否全为1 CJNE A, #0F0H,HAVE ; P1.4P1.7不全为不全为1,有键按下,有键按下 SJMP TEST ;P1.4P1.7全为全为1,无键按下,重检测键盘,无键按下,重检测键盘HAVE: MOV A,#0FEH ;有键按下,逐行扫描键盘,置扫描初值;有键按下,逐行扫描键盘,置扫描初值NEXT: MOV B,A
43、;扫描码暂存于扫描码暂存于B B(行码)(行码) MOV P1,A ;输出扫描码输出扫描码READ: MOV A,P1 ;读键盘读键盘 ANL A,#0F0H ; 屏蔽屏蔽P1.0P1.0P1.3P1.3,检测,检测P1.4P1.4P1.7P1.7是否全为是否全为1 1 CJNE A,0F0H,YES ;P1.4P1.4P1.7P1.7不全为不全为1 1,该行有键按下,该行有键按下 MOV A,B ;被扫行无键按下,准备查下一行被扫行无键按下,准备查下一行 RL A ;置下一行扫描码置下一行扫描码 CJNE A,#0EFH,NEXT ;未扫到到最后一行循环未扫到到最后一行循环1 1、判、判断有
44、无断有无键按下键按下2 2、消、消除抖动除抖动3 3、识、识别键值别键值28YES: MOV R2, A ; 暂存暂存列码列码(高(高4位)位) MOV A, B ;恢复行码恢复行码 ANL A,#0FH ;取行扫描码取行扫描码(低(低4位)位) ORL A,R2 ;行码、列码合并为键编码行码、列码合并为键编码 MOV B,A ;键编码存于键编码存于B B,为后面处理做准备,为后面处理做准备 MOV R0, 0FFH ;让让R0R0为为-1-1AGAIN: INC R0 ;R0R0加加1 1 MOV A,R0 ;准备查表准备查表1 1,从零开始,从零开始 MOV DPTR,#TAB1 MOVC
45、 A, A+DPTR CJNE A, B, AGAIN ;查得的结果与实际的键编码比较,不同则查下一个查得的结果与实际的键编码比较,不同则查下一个 MOV A,R0 ;相同,将键编码对应的序号存入相同,将键编码对应的序号存入A,A,准备显示准备显示 MOV DPTR,#TAB2 MOVC A,A+DPTR MOV P2, A ;送至端口送至端口2 2 显示,然后返回去处理下一按键显示,然后返回去处理下一按键 AJMP TESTTAB1: DB EEH,DEH,BEH,7EH.TAB2: DB 06H,5BH,4FH,66H,6DH.注:底层为红色的是增加按键序号显示的程序段。注:底层为红色的是
46、增加按键序号显示的程序段。29C语言程序清单如下语言程序清单如下: #include reg51.h#define uchar unsigned char#define uint unsigned intvoid dlms (void);uchar kbscan(void); / /* * 函数说明函数说明 * */ /void main (void) uchar key, i; uchar TAB1=0 x00,0 xEE,0 xDE,0 xBE,0 x7E,.; / /* * 键码表键码表 * */ / uchar TAB2=0 x00,0 x06,0 x5B,0 x4F,0 x66,.;
47、 / /* * 共阴极段码共阴极段码表表 * */ / while (1) key=kbscan( ); / /* * 调键扫描函数,返回键码送调键扫描函数,返回键码送keykey保存保存 * */ / for (i=0,i=16,i+) if (key=TAB1 i ) P2=tab2 i ; dlms( ); 注:底层为红色的是增加按键序号显示的程序段。注:底层为红色的是增加按键序号显示的程序段。30增加了一项,当无键按下增加了一项,当无键按下扫描返回为扫描返回为0时,无显示。时,无显示。void dlms (void) / /* * 延时延时 * */ / uchar i; for (i=200;i0;i- -) ;uchar kbscan (void ) / /* * 键盘扫描函数键盘扫描函数 * */ / uchar sccode, recode; P1=0 xf0; / /* * P1.0 P1.0P1.3P1.3发全发全0 0, P1.4P1.4P1.7P1.7输入输入 * */ / if(P1 & 0 xf0)!=0 xf0) / /* * 如如P1P1口高四位不全为口高四位不全为1 1,有键按下,有键按下 * */ / dlms ( ); / /* * 延时去抖动延时去抖动 * */ / if (P1 & 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《电气控制原理图》课件
- DB32T-建筑工程BIM规划报建数据规范编制说明
- 给予是快乐的课件公开课专用
- 《口腔洁治课件》课件
- 基因工程的基本操作程序课件
- 《TA沟通分析课程》课件
- 《伊犁河大桥》课件
- 生活处处有哲学课件
- 单位管理制度展示汇编【员工管理篇】
- 中国武都头风痛丸项目投资可行性研究报告
- (大洁王)化学品安全技术说明书
- 2022年科学道德与学术规范知识竞赛决赛题库(含答案)
- 智慧水库平台建设方案
- 市场调查与预测期末复习试题10套含答案
- 呼吸内科国家临床重点专科建设项目评分标准试行
- 粮食平房仓设计规范
- 煤炭质量分级及低位发热量计算
- 通用个人全年工资表模板
- 带电作业车库技术规范书
- 电镀工序FMEA
- 基坑总涌水量计算公式汇总(共5页)
评论
0/150
提交评论