单片机原理及应用 第3版 课件第5章 并行口及应用_第1页
单片机原理及应用 第3版 课件第5章 并行口及应用_第2页
单片机原理及应用 第3版 课件第5章 并行口及应用_第3页
单片机原理及应用 第3版 课件第5章 并行口及应用_第4页
单片机原理及应用 第3版 课件第5章 并行口及应用_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

17:441第5章并行口及应用3.7

80C51系列单片机内部并行口的结构5.180C51系列单片机并行口的应用5.2七段数码管显示器接口5.317:4425.180C51系列单片机内部并行口的结构

80C51系列单片机内部有4个8位双向的输入/输出口,分别为P0、Pl、P2和P3口。这4个端口的每一位都可以作为双向通用I/O口使用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。80C51单片机4个I/O口在结构上是基本相同的,但又各有特点。17:443多路开关功能:用于控制选通I/O方式还是地址/数据输出方式方式控制:由内部控制信号产生数据输出锁存器,用于数据位的锁存两个三态的数据输入缓冲器(BUF1和BUF2)。推拉式I/O驱动器:由两只场效应管(FET)组成,上面的场效应管构成上拉电路。5.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口1位的内部结构读锁存器读引脚锁存器内部总线写锁存器地址/数据P0.0多路开关10字节地址80H,位地址80H~87H。17:444BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读锁存器读引脚锁存器内部总线写锁存器地址/数据P00多路开关10说明:1、当CPU发出的控制信号为0时,P0口做双向I/O口,为漏极开路(三态)2、当CPU发出的控制信号为1时,P0口为地址/数据复用总线(用于口扩展)5.5.1P0端口17:4455.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读引脚锁存器内部总线写锁存器地址/数据P00多路开关103、P0作输入/输出口的使用(1)P0作输出口使用来自CPU的“写入”脉冲加在D锁存器的C端,内部总线上的数据写入D锁存器,并向端口引脚P0.x输出。注意:由于输出电路是漏极开路(因为这时上拉场效应管截止),必须外接上拉电阻才能有高电平输出。读锁存器17:4465.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读引脚锁存器内部总线写锁存器地址/数据P00多路开关103、P0作输入/输出口的使用(2)P0作输入口使用区分“读引脚”和“读锁存器”。“读引脚”信号把下方缓冲器打开,引脚上的状态经缓冲器读入内部总线;

读锁存器执行“MOVA,P0”时读引脚信号有效。说明:在执行输入操作时,如果锁存器原来寄存的数据Q=0。那么由于Q=1将使T1导通,引脚被始终箝拉在低电平上,不可能输入高电平。为此,用作输入前,必须先用输出指令置Q=1,使T1截止。单片机复位后,P0口线的状态都是高电平,可以直接用作输入。17:4475.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读引脚锁存器内部总线写锁存器地址/数据P00多路开关103、

P0作输入/输出口的使用(2)P0作输入口使用区分“读引脚”和“读锁存器”。“读引脚”信号把下方缓冲器打开,引脚上的状态经缓冲器读入内部总线;“读锁存器”信号打开上面的缓冲器把锁存器Q端的状态读入内部总线。读锁存器执行下列指令时均为读锁存器操作。ANLP0,#data;(P0)←(P0)∧dataORLP0,#data;(P0)←(P0)∨data;XRLP0,A;(P0)←(P0)⊕(A)INCP0;(P0)←(P0)+117:4485.1.2P1端口P1口内部结构如下图所示。输出部分有内部上拉电阻R*约为20K。其他部分与P0端口使用相类似(读引脚时先写入1)。写数据读端口字节地址90H,位地址90H~97H。17:449P1口只作通用的I/O口使用,在电路结构上与P0口有两点区别:(1)因为只传送数据,不再需要多路转接开关MUX。(2)由于P1口用来传送数据,因此输出电路中有上拉电阻,这样电路的输出不是三态的,所以P1口是准双向口。注意:(1)P1口作为输出口使用时,外电路无需再接上拉电阻。(2)P1口作为输入口使用时,应先向其锁存器先写入“1”,使输出驱动电路的FET截止。17:4410字节地址为A0H,位地址A0H~A7H。

5.1.3P2端口P2口的位结构的电路原理图说明:1、P2可以作为通用的I/O,也可以作为高8位地址输出输出。2、当控制信号为1时P2口输出地址信息,此时单片机完成外部的取指操作或对外部数据存储器16位地址的读写操作。3、当控制信号为0时,作为普通I/O口使用时用法和P1口类似。1017:4411P3口的字节地址为B0H,位地址为B0H~B7H

。5.1.4P3端口图5-4P3口的位结构的电路原理P3口有第二功能信号,且有输出和输入两类:(1)作通用的I/O输出,“第二输出功能”线应保持高电平,与非门开通,使锁存器Q端输出畅通。(2)作第二功能信号输出,锁存器预先置“1”,使与非门对“第二输出功能”信号的输出是畅通的。17:4412P3口的字节地址为B0H,位地址为B0H~B7H

。5.1.4P3端口图5-4P3口的位结构的电路原理(3)作第二功能信号输入,在口线引脚的内部增加了一个缓冲器,输入的信号就从这个缓冲器的输出端取得。而作为通用I/O输入,仍取自三态缓冲器的输出端。

P3口无论作哪种输入,锁存器输出和“第二输出功能”线都应保持高电平。17:4413表3-4P3口的第二功能定义

口引脚第二功能

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 INT0*

(外部中断0)

P3.3 INT1*

(外部中断1)

P3.4 T0(定时器0外部计数输入)

P3.5 T1(定时器1外部计数输入)

P3.6 WR*

(外部数据存储器写选通)

P3.7 RD*

(外部数据存储器读选通)

17:4414使用中应注意的问题:(1)P0~P3口都是并行I/O口,但P0口和P2口,还可用来构建系统的数据总线和地址总线,所以在电路中有一个MUX,以进行转换。

而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无需转接开关MUX。

由于P0口可作为地址/数据复用线使用,需传送系统的低8位地址和8位数据,因此MUX的一个输入端为“地址/数据”信号。而P2口仅作为高位地址线使用,不涉及数据,所以MUX的一个输入信号为“地址”。5.1.5P0~P3端口功能总结17:4415(2)在4个口中只有P0口是一个真正的双向口,P1~P3口都是准双向口。

原因:P0口作数据总线使用时,为保证数据正确传送,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。为此,P0口的输出缓冲器应为三态门。

在P0口中输出三态门是由两只场效应管(FET)组成,所以是一个真正的双向口。而P1~P3口,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的—准双向口。(3)P3口的口线具有第二功能,为系统提供一些控制信号。因此在P3口电路增加了第二功能控制逻辑。这是P3口与其它各口的不同之处。17:4416图3-880C51单片机对外三总线构成17:44175.280C51系列单片机并行口的应用

在单片机不外扩任何芯片的情况下,80C51系列单片机内部并行口可以作为输出口,直接与输出外设连接,常用的输出外设是发光二极管;80C51系列单片机内部并行口也可以作为输入口,直接与输入外设连接,常用的输入外设是开关。17:4418例5-1第二章2.3.2节对图2-30所示电路,已经编写了程序实现8个发光二极管单方向轮流点亮。但程序是采用顺序结构编写的,比较长,要求采用模块化的方式重新编写。解:将延时程序编成子函数的形式。用本征库函数_crol_来实现P1口数据的循环左移,实现发光二极管的轮流点亮。程序流程图如图5-5所示:图5-5流水灯单方向点亮的流程图

程序设计如下:#include<reg52.h>#include<intrins.h>#defineucharunsignedcharvoiddelay_ms(ucharms);

voidmain(){ucharled;//设置变量led,作为P1口赋值的变量

led=0xfe;//初值为11111110while(1){P1=led;//led值送入P1口

delay_ms(200);//延时200msled=_crol_(led,1);//led值循环左移1位

}}voiddelay_ms(ucharms)//延时子程序,最长255ms{uchari;while(ms--)for(i=0;i<124;i++);}17:4419例5-2对图2-30所示电路,编写程序实现8个发光二极管左右来回循环滚动点亮。解:流水灯左右来回循环滚动点亮的流程图如图5-6所示。图5-6流水灯左右来回循环滚动点亮的流程图17:4420例5-2程序设计如下:#include<reg51.h>#include<intrins.h>#defineucharunsignedcharoiddelay_ms(ucharms);//延时子程序voidmain(){ucharled,i;//设置变量

led=0xfe;//初值为11111110for(i=0;i<7;i++){P1=led;//led值送入P1口

delay_ms(100);//延时100msled=_crol_(led,1);//led值循环左移1位

}for(i=0;i<7;i++){P1=led;//led值送入P1口

delay_ms(100);//延时100msled=_cror_(led,1);//led值循环右移1位

}}

voiddelay_ms(ucharms)//延时子程序{uchari;while(ms--)for(i=0;i<124;i++);}17:4421例5-3用AT89C51单片机控制四个按键K1到K4和四个发光二极管D1到D4,要求当按下K1或K2键时D1或D2点亮,松开时对应的发光二极管熄灭,当按下K3或K4后按下时,D3或D4不停地闪烁。设计Proteus仿真电路,编写程序实现所要求的功能。解:Proteus仿真电路如图5-7所示。图5-7

Proteus仿真电路17:4422程序设计如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitD1=P1^0;sbitD2=P1^1;sbitD3=P1^2;sbitD4=P1^3;sbitK1=P3^4;sbitK2=P3^5;sbitK3=P3^6;sbitK4=P3^7;voidDelayMS(uintx)//延时子程序{ uchart; while(x--) { for(t=120;t>0;t--); }}voidmain()//主程序{P1=0xff;//四个二极管暗while(1){D1=K1;//D1反映K1开关的状态D2=K2;//D2反映K2开关的状态if(K3==0)//K3按下时,D3的状态不停地变反{while(K3==0){D3=~D3;}}if(K4==0)//K4按下时,D4的状态不停地变反{while(K4==0){D4=~D4;}}DelayMS(10);}}17:44235.3七段数码管显示器接口

七段数码管是一种常用的数字显示元件,可以用来显示数字0~9及相关符号,它具有功耗低、亮度高、寿命长、尺寸小等优点,在家电及工业控制中有着广泛的应用。17:44245.3.1七段数码管简介外形:由7个条状的发光二极管排列而成,可实现数字“0~9”及少量字符的显示。为了显示小数点,增加了1个点状的发光二极管,因此数码管实际由8个LED组成,分别把这些发光二极管命名为“a、b、c、d、e、f、g、dp”,

图5-87段数码管的外形与结构(a)7段数码管的外形(b)数码管引脚图(c)共阳极数码管结构图(d)共阴极数码管结构图17:4425共阳极数码管是指将所有发光二极管的阳极接到一起,应用时,公共极COM应该接到+5V。当某一字段发光二极管的阴极为低电平时,相应字段就点亮;当某一字段的阴极为高电平时,相应字段就不亮。共阳极数码管的结构图如图5-8(c)所示。图5-87段数码管的外形与结构(b)数码管引脚图(c)共阳极数码管结构图17:4426

图5-87段数码管的外形与结构(b)数码管引脚图

(d)共阴极数码管结构图共阴极数码管是指将所有发光二极管的阴极接到一起,在应用时,公共极COM应该接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮;当某一字段的阳极为低电平时,相应字段就不亮。共阴极数码管的结构图如图5-8(d)所示。17:4427一般称a~g端电平的组合值为段码,也称字形码。

a字段与单片机数据线P0.0对应,b字段与P0.1对应……依此类推。如使用共阳极数码管,则某根数据线为1表示对应字段暗,数据为0表示对应字段亮;

如使用共阴极数码管,某根数据线为1,则表示对应字段亮,数据为0表示对应字段暗。如要显示“0”,共阳极数码管的字型编码应为:11000000B(即C0H);共阴极数码管的字型编码应为:00111111B(即3FH)。依此类推,可求得数码管字形编码如表5-1所示。(c)共阳极数码管(d)共阴极数码管数码管要正常显示,就要用驱动电路来驱动数码管的各个字段,从而显示出要求的数字。17:4428表5-1LED显示器的字形编码表(段码表)17:44295.3.2LED显示器工作原理N个LED显示块有N位位选线和8×N根段码线。4位LED显示器的结构原理图如图5-9所示。

图5-94位LED显示器的结构原理图根据对段选线和位选线的控制方法的不同,LED显示器的显示方法有静态显示和动态显示两种。控制显示的字型控制该显示位的亮或暗17:44301.静态显示方式各位的公共端(位选端)连接在一起(接地或+5V),每位的段码线(a~dp)分别与一个8位的锁存器输出相连,显示字符一确定,相应锁存器的段码输出将维持不变,直到送入另一个段码为止。4位LED静态显示电路如图5-10所示。图5-104位LED静态显示电路17:44312.动态显示方式动态显示是将所有数码管的8个段选码“a、b、c、d、e、f、g、dp”的同名端连在一起,另外为每个数码管的公共端COM增加位选通控制电路,位选通由各自独立的I/O线控制。4位LED动态显示电路如图5-11所示。图5-114位LED动态显示电路17:4432例5-4用AT89C51单片机驱动1个数码管,开始时显示0;以后每过1s,显示内容加1,显示内容从0~9不断循环,即实现1位秒表的功能。试设计Proteus仿真电路,编写程序,并在Proteus仿真电路中验证。解:Proteus仿真电路如图5-12所示。图5-121位秒表的仿真电路与效果图分析:1个数码管与单片机连接时,可以采用静态驱动方式,即将数码管的a、b、c、d、e、f、g端分别与一条I/O口线连接;也可以将它们与BCD码—七段码译码器的输出端连接,而BCD码—七段码译码器的输入端分别与一条I/O口线连接。这里选择第一种方法。考虑到单片机I/O口线的驱动能力,用74HC573作为驱动器。图中的数码管为共阴极数码管,它与单片机P0口相连。数码管的公共端接地,段码线分别接P1口的8个端口,P1口用470Ω×7的上拉排电阻接+5V。17:4433程序设计如下:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极段码voidDelayMS(uintxms)//延时子程序{ uinti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}voidmain()//主程序{uchari=0;P0=0x00;//P0口开始输出00H,数码管暗while(1){ P0=DSY_CODE[i]; i=(i+1)%10;/*显示0-9*/ DelayMS(880);//延时1s}}为了实现0~9的循环显示,可以通过查表的方式,得到段码,然后再通过P1口送出,每隔1s循环一次,周而复始。17:4434例5-5用单片机设计0~99计数器,具体说,就是用手按动按键,每按一次,单片机计数一次,并实时将按键次数在两位数码管上显示出来。试设计Proteus仿真电路,编写程序,并在Proteus仿真电路中验证。解:Proteus仿真电路如图5-13所示。分析:两位数码管与单片机相连时,可以采用静态显示方式,也可以采用动态显示方式。这里采用动态显示方式,将两个数

温馨提示

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

评论

0/150

提交评论