第5章单片机常用接口_第1页
第5章单片机常用接口_第2页
第5章单片机常用接口_第3页
第5章单片机常用接口_第4页
第5章单片机常用接口_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章MCS-51单片机常用接口

MCS-51单片机常用接口包括外部存储器接口、I/O口接口、键盘接口和显示接口等。5.1MCS-51单片机的最小系统所谓最小系统,是指一个真正可用的单片机最小配置系统。对于单片机内部资源已能满足系统需要的,可直接采用最小系统。MCS-51单片机根据片内有无程序存储器最小系统分两种情况。5.1.18051/8751的最小系统

8051/8751片内有4K的ROM/EPROM,因此,只需要外接晶体振荡器和复位电路就可构成最小系统。如图所示。XTAL1

XTAL2

8751

P0P1P2P3

8051

RESET

EA

GND

+5V

+5V8

8

88

该最小系统的特点如下:(1)由于片外没有扩展存储器和外设,P0、P1、P2、P3都可以作为用户I/O口使用。(2)片内数据存储器有128字节,地址空间00H~7FH,没有片外数据存储器。(3)内部有4KB程序存储器,地址空间0000H~0FFFH,没有片外程序存储器,EA应接高电平。(4)可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。5.1.18031最小应用系统

8031片内无程序存储器片,因此,在构成最小应用系统不仅要外接晶体振荡器和复位电路,还应外扩展程序存储器。P2ALE8031P0EAPSENG74LS373A15~A8A7~A0D7~D0OE2764CE高8位地址线P2ALEP0EAPSEN该最小系统特点如下:(1)由于P0、P2在扩展程序存储器时作为地址线和数据线,不能作为I/O线,因此,只有P1、P3作为用户I/O口使用。(2)片内数据存储器同样有128字节,地址空间00H~7FH,没有片外数据存储器。(3)内部有无程序存储器,但片外扩展了程序存储器,其地址空间随芯片容量不同而不一样。图6.2中使用的是2764芯片,容量为8K字节,地址空间为0000H~1FFFH。由于片内没有程序存储器,只能使用片外程序存储器,EA只能接低电平。(4)同样可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。5.2存储器扩展5.2.1存储器扩展概述一、MCS-51单片机的存储器扩展能力

MCS-51单片机地址总线宽度为16位,片外可扩展的存储器最大容量为64KB,地址为0000H~FFFFH。因为程序存储器和数据存储器是通过不同的控制信号和指令进行访问,允许两者的地址空间重叠,所以片外可扩展的程序存储器与数据存储器分别都为64KB。二、存储器扩展的一般方法不论何种存储器芯片,其引脚都呈三总线结构,与单片机连接都是三总线对接。另外,电源线接电源线,地线接地线。1.控制线:对于程序存储器,一般来说,具有输出允许控制线OE,它与单片机的PSEN信号线相连。对于数据存储器,一般都有输出允许控制线OE和写控制线WE,它们分别与单片机的读信号线RD和写信号线WR相连。2、数据线:存储器芯片的数据线的数目由芯片的字长决定。连接时,存储器芯片的数据线与单片机的数据总线(P0.0~P0.7)按由低位到高位的顺序顺次相接。3、地址线:存储器芯片的地址线的数目由芯片的容量决定。容量(Q)与地址线数目(N)满足关系式:Q=2N。存储器芯片的地址线与单片机的地址总线(A0~A15)按由低位到高位的顺序顺次相接。一般来说,存储器芯片的地址线数目总是少于单片机地址总线的数目,因此连接后,单片机的高位地址线总有剩余。剩余地址线一般作为译码线,译码输出与存储器芯片的片选信号线CS相接。片选信号线与单片机系统的译码输出相接后,就决定了存储器芯片的地址范围。译码有两种方法:部分译码法和全译码法。部分译码:所谓部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线仅用一部分参加译码。部分译码使存储器芯片的地址空间有重叠,造成系统存储器空间的浪费。如下图,存储器芯片容量为2K,地址线为11根,与地址总线的低11位A0~A10相连,用于选中芯片内的单元。地址总线的A11、A12、A13、A14根地址线参加译码的选中芯片,设这四根地址总线的状态为0100时选中该芯片。地址总线A15不参加译码,当地址总线A15为0、1两种状态都可以选中该存储器芯片。A15A140A130A121A110A10A9A8A7A6A5A4A3A2A1A0地址译码线与存储器芯片连接的地址线当A15=0时,芯片占用的地址是0001000000000000~0001011111111111,即1000H~17FFH。当A15=1时,芯片占用的地址是1001000000000000~1001011111111111,即9000H~97FFH。部分译码法的一个特例是线译码。所谓线译码就是直接用一根剩余的高位地址线与一块存储器芯片的片选信号CS相连。全译码:所谓全译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线全部参加译码。这种译码方法存储器芯片的地址空间是唯一确定的,但译码电路相对复杂。3.扩展存储器所需芯片数目的确定存储器芯片容量系统扩展容量芯片数目=若所选存储器芯片字长与单片机字长一致,则只需扩展容量。所需芯片数目按下式确定:若所选存储器芯片字长与单片机字长不一致,则不仅需扩展容量,还需字扩展。所需芯片数目按下式确定:存储器芯片字长系统字长存储器芯片容量系统扩展容量芯片数目´=5.2.2程序存储器扩展一.单片程序存储器的扩展P2.6P2.4P2.3P2.2P2.1P2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P2.7P2.5P0.0ALEVcc8031PSENEAVss+5VA12A11A10A9A8A7A6A5A4A3A2A1A0D7D5D4D3D2D1D0OED6CEGNDVff+5V8D7D6D5D4D3D2D1DGOE8Q7Q6Q5Q4Q3Q2Q1QVcc74LS373二.多片程序存储器的扩展其8个重叠的地址范围为如下:0000000000000000~0001111111111111,即0000H~1FFFH;0010000000000000~0011111111111111,即2000H~3FFFH;0100000000000000~0101111111111111,即4000H~5FFFH;0110000000000000~0111111111111111,即6000H~7FFFH;1000000000000000~1001111111111111,即8000H~9FFFH;1010000000000000~1011111111111111,即A000H~BFFFH;1100000000000000~1101111111111111,即C000H~DFFFH;1110000000000000~1111111111111111,即E000H~FFFFH。P2.6P2.5P2.4~P2.0ALE8031PSENEAGP2.774LS373OEA0~A7A8~A12CED0~D7OE2764(1)A0~A7A8~A12CE2764(2)D0~D7OEP0588885885上图是通过线选法实现的两片2764扩展成16KB程序存储器。两片2764的地址线A0~A12与地址总线的A0~A12对应相连,2764的数据线D0~D7与数据总线A0~A7对应相连,两片2764的输出允许控制线连在一起与8031的PSEN相连。第一片2764的片选线CS与8031地址总线的P2.7直接相连,第二片2764的片选线CS与8031地址总线的P2.7取反后相连。其两片的地址空间分别为:第一片:00000000000000000~0001111111111111,即0000H~1FFFH;00100000000000000~0011111111111111,即2000H~3FFFH;01000000000000000~0101111111111111,即4000H~5FFFH;01100000000000000~0111111111111111,即6000H~7FFFH;第二片:10000000000000000~1001111111111111,即8000H~9FFFH;10100000000000000~1011111111111111,即A000H~BFFFH;11000000000000000~1101111111111111,即C000H~DFFFH;11100000000000000~1111111111111111,即E000H~FFFFH。P2.6P2.5P2.4~P2.0ALE8031PSENEAGP2.774LS373OEA0~A7A8~A12CED0~D7OE2764(1)A0~A7A8~A12CE2764(2)OEP0588885885CBAD0~D7GG1G2AG2BY3Y2Y1Y08D0~D7OE2764(3)A0~A7A8~A12CE8D0~D7OECEA8~A12A0~A72764(4)8585Vcc74LS138上图为采用全译码法实现的4片2764扩展成32KB程序存储器。8031剩余的高3位地址总线P2.7、P2.6、P2.5通过74LS138译码器形成4个2764的片选信号由于采用全译码,每片2764的地址空间都是唯一的。它们分别是:00000000000000000~0001111111111111,即0000H~1FFFH;00100000000000000~0011111111111111,即2000H~3FFFH;01000000000000000~0101111111111111,即4000H~5FFFH;01100000000000000~0111111111111111,即6000H~7FFFH。5.2.3数据存储器扩展数据存储器扩展与程序存储器扩展基本相同,只是数据存储器控制信号一般有输出允许信号OE和写控制信号WE,分别与单片机的片外数据存储器的读控制信号RD和写控制信号WR相连,其它信号线的连接与程序存储器完全相同。下图是两片数据存储器芯片6264与8051单片机的连接。6264是8K8的静态数据存储器芯片,有13根地址线,数据线8根,一根输出允许信号OE和一根写控制信号WE,两根片选信号CE1和CE2,使用时都应为低电平。P2.6P2.5P2.4~P2.0ALE8051RDEAGP2.774LS373OEA0~A7A8~A12CE1D0~D7OE2764(1)A0~A7A8~A12CE12764(2)D0~D7OEP058885885WRWEWE88CE2CE2P2.7为低电平0,两片6264芯片的地址空间为:第一片:01000000000000000~0101111111111111,即4000H~5FFFH;第二片:00100000000000000~0011111111111111,即2000H~3FFFH;P2.7为高电平1,两片6264芯片的地址空间为:第一片:11000000000000000~1101111111111111,即C000H~DFFFH;第二片:10100000000000000~1011111111111111,即A000H~BFFFH;5.3输入/输出口扩展5.3.1简单I/O口扩展通常通过数据缓冲器、锁存器来扩展简单I/O接口。例如:74LS373、74LS244、74LS273、74LS245等芯片都可以作简单I/O扩展。实际上,只要具有输入三态、输出锁存的电路,就可以用作I/O口扩展。下图是利用74LS373和74LS244扩展的简单I/O口,其中74LS373扩展并行输出口,74LS244扩展并行输入口。74LS373是一个带输出三态门的8位锁存器,8个输入端D0~D7,8个输出端Q0~Q7,G为数据锁存控制端,G为高电平,则把输入端的数据锁存于内部的锁存器,OE为输出允许端,低电平时把锁存器中的内容通过输出端输出。74LS244是单向数据缓冲器,带两个控制端1G和2G,当它们为低电平时,输入端D0~D7的数据输出到Q0~Q7。P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.08051EAD0D1D2D3D4D5D6D7GOEQ0Q1Q2Q3Q4Q5Q6Q774LS373P2.0RDQ0Q1Q2Q3Q4Q5Q6Q71G2G74LS244++L1L2L3L4L5L6L7L0+5VD0D1D2D3D4D5D6D7K1K2K3K4K5K6K7K0图中,扩展的输入口接了K0~K78个开关,扩展的输出口接了L0~L78个发光二极管,如果要实现K0~K7开关的状态通过L0~L7发光二极管显示,则相应的汇编程序为:LOOP:MOVDPTR,#0FEFFHMOVXA,@DPTRMOVX@DPTR,ASJMPLOOP如果用C语言编程,相应程序段为:#include<absacc.h>//定义绝对地址访问#defineucharunsignedchar……uchari;i=XBYTE[0xfeff];XBYTE[0xfeff]=i;……5.3.2可编程I/O扩展(8255A)一.8255A的结构与功能数据总线缓冲器读/写控制部件双向数据总线

D0~D7

RD

WR

A1

A0RESETCSB组控制部件A组控制部件A组端口AA组端口CB组端口CB组端口BA组B组PA7~PA0PC7~PC4PC3~PC0PB7~PB08位内部总线

8255A内部有3个可编程的并行I/O端口:PA口、PB口和PC口。其中C口又可分为两个独立的4位端口:PC0~PC3和PC4~PC7。A口和C口的高四位合在一起称为A组,通过图中的A组控制部件控制;B口和C口的低四位合在一起称为B组,通过图中的B组控制部件控制。

A口有三种工作方式:无条件输入/输出方式、选通输入/输出方式和双向选通输入/输出方式。B口有两种工作方式:无条件输入/输出方式和选通输入/输出方式。当A口和B口工作于选通输入/输出方式或双向选通输入/输出方式时,C口当中的一部分线用作A口和B口输入/输出应答信号线。数据总线缓冲器是一个8位双向三态缓冲器,是8255A与系统总线之间的接口,8255A与CPU之间传送的数据信息、命令信息、状态信息都通过数据总线缓冲器实现传送。读写控制部件接收CPU送来的控制信号、地址信号,经译码选中内部的端口寄存器,并指挥从这些寄存器中读出信息或向这些寄存器写入相应的信息。8255A有4个端口寄存器:A寄存器、B寄存器、C寄存器和控制口寄存器,通过控制信号和地址信号对这4个端口寄存器的操作如表所示。CSA1A0RDWRI/O操作00001读A口寄存器内容到数据总线00101读B口寄存器内容到数据总线01001读C口寄存器内容到数据总线00010数据总线上内容写到A口寄存器00110数据总线上内容写到B口寄存器01010数据总线上内容写到C口寄存器01110数据总线上内容写到控制口寄存器二.8255A的引脚信号8255A共40引脚,采用双列直插式封装,如下图所示,各引脚信号功能如下:D7~D0:三态双向数据线,与单片机的数据总线相连,用来传送数据信息。CS:片选信号线,低电平有效,用于选中8255A芯片。RD:读信号线,低电平有效,用于控制从8255A端口寄存器读出信息。WR:写信号线,低电平有效,用于控制向8255A端口寄存器写入信息。PA7~PA0:A口的8根输入/输出信号线,用于与外部设备连接。PB7~PB0:B口的8根输入/输出信号线,用于与外部设备连接。PC7~PC0:C口的8根输入/输出信号线,用于与外部设备连接。RESET:复位信号线。VCC:+5V电源线。GND:地信号线。8255A12345678910111213141516171819204039383736353433323130292827262524232221PA3PA2PA1RDCSGNDA1A0PC7PC6PC5PC4PC0PC1PC2PC3PB0PB1PB2PA0PA4PA5PA6PA7WRRESETD0D1D2D3D4D5D6D7VccPB7PB6PB5PB4PB3三.8255A的控制字8255A有两个控制字:工作方式控制字和C口按位置位/复位控制字。1.工作方式控制字端口A0:输出1:输入端口C高4位0:输出1:输入端口B0:输出1:输入特征位1A组工作方式位00:方式001:方式11X:方式2B组工作方式位0:方式01:方式1端口C低4位0:输出1:输入D7D6D5D4D3D2D1D0D7位为特征位。D7=1表示为工作方式控制字。D6、D5用于设定A组的工作方式。D4、D3用于设定A口和C口的高4位是输入还是输出。D2用于设定B组的工作方式。D1、D0用于设定B口和C口的低4位是输入还是输出。2.C口按位置位/复位控制字特征位0这三位不用位选择位000:C口0位001:C口1位……111:C口7位0:复位1:置位D7D6D5D4D3D2D1D0D7位为特征位。D7=0表示为C口按位置位/复位控制字。D6、D5、D4这三位不用D3、D2、D1这三位用于选择C口当中的某一位。D0用于置位/复位设置,D0=0则复位,D0=1则置位。四.8255A的工作方式1.方式0方式0是一种基本的输入/输出方式。在这种方式下,三个端口都可以由程序设置为输入或输出,没有固定的应答信号。方式0特点如下:(1)具有两个8位端口(A、B)和两个4位端口(C口的高4位和C口的低4位)。(2)任何一个端口都可以设定为输入或者输出。(3)每一个端口输出时是锁存的,输入是不锁存的。方式0输入/输出时没有专门的应答信号,通常用于无条件传送。例如:下图是8255A工作于方式0的例子,其中A口输入,B口输出。8051系统总线8255APA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7+5V+5VK0K7L0L72.方式1方式1是一种选通输入/输出方式。在这种工作方式下,端口A和B作为数据输入输出口,端口C用作输入/输出的应答信号。A口和B口既可以作输入,也可作输出,输入和输出都具有锁存能力。方式1输入:无论是A口输入还是B口输入,都用C口的三位作应答信号,一位作中断允许控制位。INTE&PC4PC5PC3PC6、PC7PA0~PA7STBAIBFAI/OINTRAB口输入INTE&A口输入PC2PC1PC088IBFBSTBBPB0~PB7INTRB各应答信号含义如下:STB:外设送给8255A的“输入选通”信号,低电平有效。IBF:8255A送给外设的“输入缓冲器满”信号,高电平有效。INTR:8255A送给CPU的“中断请求”信号,高电平有效。INTE:8255A内部为控制中断而设置的“中断允许”信号。INTE由软件通过对PC4(A口)和PC2(B口)的置位/复位来允许或禁止。方式1输出:无论是A口输出还是B口输出,也都用C口的三位作应答信号,一位作中断允许控制位。INTE&PC7PC6PC3PC4、PC5PA0~PA7ACKAOBFAI/OINTRAB口输出INTE&A口输出PC2PC1PC088OBFBACKBPB0~PB7INTRB2应答信号含义如下:OBF:8255A送给外设的“输出缓冲器满”信号,低电平有效。ACK:外设送给8255A的“应答”信号,低电平有效。INTR:8255A送给CPU的“中断请求”信号,高电平有效。INTE:8255A内部为控制中断而设置的“中断允许”信号,含义与输入相同,只是对应C口的位数与输入不同,它是通过对PC4(A口)和PC2(B口)的置位/复位来允许或禁止。3.方式2方式2是一种双向选通输入/输出方式。只适合于端口A。这种方式能实现外设与8255A的A口双向数据传送,并且输入和输出都是锁存的。它使用C口的5位作应答信号,两位作中断允许控制位。&INTE1INTE2&1PC5PC4PC6PC7PC3PA0~PA7ACKAOBFAINTRASTBAIBFA五.8255A与MCS-51单片机的接口1.硬件接口8255A与MCS-51单片机的连接包含数据线、地址线、控制线的连接.VccWRRDP2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.08051ALEEAGNDD7D6D5D4D3D2D2D1DOGQ7Q6Q5Q4Q3Q2Q1Q0WRRDCSA1A0D7D6D5D4D3D2D1GNDVcc+5V+5VPA7-PA0PB7-PB0PC7-PC0OED0图中,8255A的数据线与8051单片机的数据总线相连,读、写信号线对应相连,地址线A0、A1与单片机的地址总线的A0和A1相连,片选信号CS与8051的P2.0相连。则8255A的A口、B口、C口和控制口的地址分别是:FEFCH,FEFDH,FEFEH,FEFFH。2.软件编程如果设定8255A的A口为方式0输入,B口为方式0输出,则初始化程序为:汇编程序段:MOVA,#90HMOVDPTR,#0FEFFHMOVX@DPTR,AC语言程序段:#include<reg51.h>#include<absacc.h>//定义绝对地址访问……XBYTE[0xfeff]=0x90;……5.4MCS-51单片机与LED显示器接口5.4.1LED显示器的结构与原理在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,如图所示。abcdefgdpcomabcdefgdpcomabcdefgdp10987612345gfcomabedcomcdp(a)(b)(c)其中:(a)为共阴极结构。(b)为共阳极结构。(c)图为管脚图,从a~g管脚输入不同的8位二进制编码,可显示不同的数字或字符。共阴极和共阳极的字段码互为反码。显示字符共阴极字段码共阳极字段码显示字符共阴极字段码共阳极字段码03FHC0HC39HC6H106HF9HD5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8HY6EH91H87FH80HL38HC7H96FH90H8.FFH00HA77H88H“灭”00FFHB7CH83H………………5.4.2LED数码管显示器的译码方式一.硬件译码方式译码方式是指由显示字符转换得到对应的字段码的方式硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换,这样的硬件电路有很多,比如MOTOTOLA公司生产的MC14495芯片就是其中的一种,MC14495是共阴极一位十六进制数——字段码转换芯片,能够输出用四位二进制表示形式的一位十六进制数的七位字段码,不带小数点。它的内部结构如图。4锁存器地址译码和字段码ROM阵列ABCDLE569107VssVDD816abcdefgh+iVCR11121314151234二.软件译码方式软件译码方式就是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。5.4.3LED数码管的显示方式一.LED静态显示

LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与I/O口线相连。要显示字符,直接在I/O线送相应的字段码。abcdefgdpI/O(1)abcdefgdpI/O(2)二.LED动态显示方式

LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制。D3D2D1D0I/O(1)I/O(2)设数码管为共阳极,它的工作过程为:第一步使右边第一个数码管的公共端D0为1,其余的数码管的公共端为0,同时在I/O(1)上送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管的公共端D1为1,其余的数码管的公共端为0,同时在I/O(1)上送右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,依此类推,直到最后一个,这样四个数码管轮流显示相应的信息,一个循环完后,下一循环又这样轮流显示,从计算机的角度看是一个一个的显示,但由于人的视觉滞留,只要循环的周期足够快,看起来所有的数码管都是一起显示的了。这就是动态显示的原理。而这个循环周期对于计算机来说很容易实现。所以在单片机中经常用到动态显示。5.4.4LED显示器与单片机的接口

LED显示器从译码方式上有硬件译码方式和软件译码方式。从显示方式上有静态显示方式和动态显示方式。在使用时可以把它们组合起来。在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。一.硬件译码静态显示下图是一个两位数码管硬件译码静态显示的接口电路图。abcdefgMC14495abcdefgabcdefgABCDLEMC14495abcdefgABCDLEP1.0P1.1P1.2P1.3P1.4P1.58051二.软件译码动态显示下图是一个8位软件译码动态显示的接口电路图。图中用8255A扩展并行I/O口接数码管,数码管采用动态显示方式,8位数码管的段选线并联与8255A的A口通过74LS373相连,8位数码管的公共端通过74LS373分别与8255A的B口相连。也即8255A的B口输出位选码选择要显示的数码管,8255A的A口输出字段码使数码管显示相应的字符,8255A的A口和B口都工作于方式0输出。A口、B口、C口和控制口的地址分别为7F00H、7F01H、7F02H和7F03H。D0D1D2D7Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7CSWRRD74LS373P2.7WRRDALEP0.0~P0.78051D0~D7A1A0GA1A08255软件译码动态显示汇编语言程序为:(设8个数码管的显示缓冲区为片内RAM的57H~50H单元)DISPLAY:MOVA,#10000000B;8255初始化MOVDPTR,#7F03H;使DPTR指向8155控制寄存器端口MOVX@DPTR,AMOVR0,#57H;动态显示初始化,使R0指向缓冲区首址MOVR3,#7FH;首位位选字送R3MOVA,R3LD0:MOVDPTR,#7F00H;使DPTR指向PA口MOVX@DPTR,A;选通显示器低位(最右端一位)INCDPTR;使DPTR指向PB口MOVA,@R0;读要显示数ADDA,#0DH;调整距段选码表首的偏移量MOVCA,@A+PC;查表取得段选码MOVX@DPTR,A;段选码从PB口输出ACALLDL1;调用1ms延时子程序DECR0;指向缓冲区下一单元MOVA,R3;位选码送累加器AJNBACC.0,LD1;判断8位是否显示完毕,显示完返回RRA;未显示完,把位选字变为下一位选字MOVR3,A;修改后的位选字送R3AJMPLD0;循环实现按位序依次显示LD1:RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;字段码表DB:7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1:MOVR7,#02H;延时子程序DL:MOVR6,#0FFHDL0:DJNZR6,DL0DJNZR7,DLRET软件译码动态显示C语言程序为:#include<reg51.h>#include<absacc.h>//定义绝对地址访问#defineucharunsignedchar#defineuintunsignedintvoiddelay(uint);//声明延时函数voiddisplay(void);//声明显示函数uchardisbuffer[8]={0,1,2,3,4,5,6,7};//定义显示缓冲区voidmain(void){XBYTE[0x7f03]=0x80;//8255A初始化while(1){display();//设显示函数}}//************延时函数************voiddelay(uinti)//延时函数{uintj;for(j=0;j<i;j++){}}//***********显示函数voiddisplay(void)//定义显示函数{ucharcodevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F的字段码表ucharchocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选码表uchar

i,p,temp;for(i=0;i<8;i++){p=disbuffer[i];//取当前显示的字符temp=codevalue[p];//查得显示字符的字段码XBYTE[0x7f00]=temp;//送出字段码temp=chocode[i];//取当前的位选码XBYTE[0x7f01]=temp;//送出位选码delay(20);//延时1ms}}5.5MCS-51单片机与键盘接口5.5.1键盘的工作原理键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如图所示。P1.1VCCGND断开闭合断开P1.1(a)(b)键盘的处理主要涉及三个方面:1.按键的识别2.抖动的消除消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。硬件消抖是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用R—S触发器或单稳态电路。如图。断开闭合+5V+5V输出软件消抖是利用延时来跳过抖动过程3.键位的编码通常有两种方法编码。(1)用连接键盘的I/O线的二进制组合进行编码。如(a)图(2)顺序排列编码。如(b)图,处理方法如下:编码值=行首编码值X+列号Y。P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.788848281484442412824222118141211P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7FEDCBA9876543210(a)(b)5.5.2独立式键盘与单片机的接口键盘的结构形式一般有两种:独立式键盘与矩阵式键盘。独立式键盘就是各按键相互独立,每个按键各接一根I/O口线,每根I/O口线上的按键都不会影响其它的I/O口线。GNDVCCGNDVCC或(b)8051(a)INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7图(a)为中断方式工作的独立式键盘的结构形式,(b)为查询方式工作的独立式键盘的结构形式下面是针对图7.4(b)图查询方式的汇编语言形式的键盘程序。总共有8个键位,KEY0~KEY7为8个键的功能程序。START:MOVA,#0FFH;MOVP1,A;置P1口为输入状态MOVA,P1;键状态输入CPLAJZSTART;没有键按下,则转开始JBACC.0,K0;检测0号键是否按下,按下转JBACC.1,K1;检测1号键是否按下,按下转JBACC.2,K2;检测2号键是否按下,按下转JBACC.3,K3;检测3号键是否按下,按下转JBACC.4,K4;检测4号键是否按下,按下转JBACC.5,K5;检测5号键是否按下,按下转JBACC.6,K6;检测6号键是否按下,按下转JBACC.7,K7;检测7号键是否按下,按下转JMPSTART;无键按下返回,再顺次检测K0:AJMPKEY0K1:AJMPKEY1……K7:AJIMPKEY7KEY0:……;0号键功能程序JMPSTART;0号键功能程序执行完返回KEY1:……;0号键功能程序JMPSTART;1号键功能程序执行完返回……KEY7:……;7号键功能程序JMPSTART;7号键功能程序执行完返回5.5.3矩阵键盘与单片机的接口矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,键位设置在行列的交点上。例如4×4的行、列结构可组成16个键的键盘,比一个键位用一根I/O口线的独立式键盘少了一半的I/O口线。矩阵键盘的连接方法有多种,可直接连接于单片机的I/O口线;可利用扩展的并行I/O口连接;也可利用可编程的键盘、显示接口芯片(如8279)进行连接等等。其中,利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。下图就是通过8255A芯片扩展的并行I/O口连接48的矩阵键盘。PA7PA6PA5PA4PA3PA2PA1PA0PC0PC1PC2PC30123456789101112131415316171819202122232425262728293031CS74LS373WRRDA1A0P2.7WRRDALEP0.0~P0.7D0~D7RESET1K20F+5V+5V82555.1K48051一.矩阵键盘的工作过程对矩阵键盘的工作过程可分两步:第一步是CPU首先检测键盘上是否有键按下;第二步是再识别是哪一个键按下。1.检测键盘上是否有键按下处理方法是:将列线送入全扫描字,读入行线的状态来判别。其具体过程如下:PA口输出00H,即所有列线置成低电平,然后将行线电平状态读入累加器A中。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为"1"。2.识别键盘中哪一个键按下处理方法是:将列线逐列置低电平,检查行输入状态,称为逐列扫描。其具体过程如下:从PA0开始,依次输出“0”,置对应的列线为低电平,然后从PC口读入行线状态,如果全为“1”,则按下的键不在此列;如果不全为“1”,则按下的键必在此列,而且是该列与“0”电平行线相交的交点上的那个键。为求取编码,在逐列扫描时,可用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的首键码加列号得到当前按键的编码。二.矩阵键盘的工作方式1.查询工作方式这种方式是直接在主程序中插入键盘检测子程序,主程序每执行一次则键盘检测子程序被执行一次,对键盘进行检测一次,如果把没有键按下,则跳过键识别,直接执行主程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值,然后根据编码值进行相应的处理,处理完后再回到主程序执行。键盘扫描子程序流程如图。开始有键按下否?调用6ms延时子程序?调用12ms延时子程序?有键按下否?判闭合键,编码入栈保护闭合键释放否?编码A返回否否否是是是键盘扫描子程序如下:(硬件线路如图7.4,8255A的A口、B口、C口和控制口地址分别为7F00H、7F01H、7F02H、7F03H,设8255A已在主程序中初始化。已设定为A口方式0输出,C口的低4位方式0输入。)KEY1:ACALLKS1;调用判断有无键按下子程序JNZLK1;有键按下时,(A)≠0转消抖延时KEY2:ACALLTM6msAJMPKEY1;无键按下返回LK1:ACALLTM12ms;调12ms延时子程序ACALLKS1;查有无键按下,若有则真有键按下JNZLK2;键(A)≠0逐列扫描AJMPKEY2;不是真有键按下,返回LK2:MOVR2,#0FEH;初始列扫描字(0列)送入R2MOVR4,#00H;初始列(0列)号送入R4LK4:MOVDPTR,#7F00H;DPTR指向8155PA口MOVA,R2;列扫描字送至8155PA口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论