第4章并行I/O口的应用与扩展本章学习目标掌握MCS-51单片机并行I/O口的应用掌握键盘与显示器的扩展原理及方法4.1单片机的并行接口P0~P3MCS-51单片机有P0、P1、P2、P3四个8位双向I/O口,每个端口可以按字节输入或输出,也可以按位进行输入或输出,四个口共32根口线,用作位控制十分方便。一、四个并行口使用的注意事项如下:如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个口均可作I/O口使用。四个口在作输入口使用时,均应先对其写“1”,以避免误读。P0口作I/O口使用时应外接10K的上拉电阻,其它口则可不必。P2可某几根线作地址使用时,剩下的线不能作I/O口线使用。P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用P0驱动8个TTL电路,P1,P2,P3可驱动4个TTL电路。3.读-修改-写:修改输出锁存器的内容。锁存器中的数据通过上三态门进入内部总线,修改后再写入到锁存器中。读-修改-写指令:并行口为目的操作数的指令:如:ANLP1,A1.输出锁存:输出将使数据写入输出锁存器。输出指令:MOVP1,AMOVP1.0,C2.输入三态:输入从I/O引脚上输入信号,读信号打开,引脚信号通过下三态门进入内部总线。为保证可靠输入,先写入“1”。MOVP1,#0FFH;使输出驱动器截止MOVA,P1;输入P0~P3的复位状态均为FFH,自动处于输入状态。二、并行接口的三种操作:首先,在应用设计中应理解,计算机内由数字电路组成只存在两种TTL电平,高电平3.5~5V和低电平0V,对应着的数字为“1”和“0”。外设的状态要通过电路转换成高、低电平,计算机才能识别(如开关电路)。计算机输出数据“1”即输出3.5V~5V,输出数据“0”即输出0V,根据外设需要的电平要求输出“1”或“0”数据,这就是程序控制外设的本质。4.2并行I/O口的直接应用P1.789C51P1.0P1.1P1.2P1.3P1.4P1.5P1.6K0K1K2K3LED0LED1LED2LED3+5V+5V41004k1.5从P1.0~P1.3输入开关状态,再经P1.4~P1.7输出去驱动发光二极管,使发光二极管显示开关的状态。接成灌电流形式,能增加驱动能力,使二极管更亮些。并行I/O口的直接应用举例控制程序如下:ORG0000HAJMPMAINORG0030HMAIN:MOVA,#0FFHMOVP1,A;熄灭发光二极管,;P1口低位写“1”MOVA,P1;读入开关状态SWAPA;A高低半字节交换MOVP1,A;开关状态输出AJMPMAINEND4.3LED显示器的扩展单片机应用系统中,常常使用发光二极管(LED)来指示系统运行状态,使用数码管显示检测参数和数据。显示程序涉及到硬件电路的连接,显示结果最为直观,所以,学习单片机显示程序编写有利于提高读者的学习兴趣,同时也为后续调试较大程序提供故障诊断的方法。单片机应用系统中,最常用的是七段式LED显示器,又称数码管。4.3.1LED数码显示器的结构与原理常见数码管的管脚排列如下图(a)所示,其中COM为公共点。根据内部发光二极管的接线形式,可分为共阴极型(图(b))和共阳极型(图(c))。d1234abcdpfecdpdegfbaGNDGNDabcdefgdpabcdefgdp+5v8R8Rg共阴极共阳极图(a)图(b)图(c)LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不能发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为段码(或称字型码),显然共阳极和共阴极的字形码是不同的,其字形码见下表。LED数码管每段需10~20ma的驱动电流,可用TTL或CMOS器件驱动。字形码的控制输出可采用硬件译码方式,如采用BCD7段译码/驱动器74LS48、74LS49、CD4511(共阴极)或74LS46、74LS47、CD4513(其阳极)也可用软件查表方式输出。十六进制数字形码表显示字符段符号十六进制代码dpgfedcba共阴共阳0123456789ABCDEFHP0000000000000000010011111011110111111000111011111011111010001010111111111011011011011110001101111111110100001111100111100100011011011111101011113FH06H5BH4FH66H6DH7DH07H7FH6FH77H7CH39H5EH79H71H76H73HC0HF9HA4HB0H99H92H82HF8H80H90H88H83HC6HA1H86H8EH89H8CH4.3.2LED接口电路:两种显示电路:静态显示和动态显示。特点:显示亮度高,硬件和软件都较简单;但占用口线多。1.静态显示:每位的段码线(a~dp)分别与一个8位的锁存器输出相连。显示字符一确定,相应锁存器的段码输出将维持不变,直到送入另一个段码为止。各位的公共端连接在一起(接地或+5V)。abcdefgdp.abcdefgdp.abcdefgdp.8255PC0~PC7PB0~PB7PA0~PA789C51COMCOMCOM+5V2.动态显示:所有位的段码线相应段并在一起,由一个8位I/O口控制,各位的公共端分别由相应的I/O线控制。分时轮流选通数码管的公共端,使得各数码管轮流导通,在选通的LED上得到显示字形码。一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(字位选择)。8155PB7共阴极LEDabcdefgdp+5V100Ω×87407×27406PB6PB5PB4PB3PB2PB1PB0PA5PA4PA3PA2PA1PA0去80C512.动态显示:动态显示采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象。特点:节省硬件资源,成本较低,但要保证显示器正常显示,CPU必需每隔一段时间执行一次显示子程序,降低了CPU的工作效率;同时显示亮度较静态显示低。例3-52单片机显示电路下图所示,试编写一个系统上电自检程序。要求使6个数码管从右到左轮流显示“8.”1秒后,再全部显示“8.”3秒,最后最右边的数码管显示“0”,其余全部熄灭。设时钟频率为11.0592MH。RSTC1510u+5+5+5R58K+5S2123U10ASN74AS00456U10BR111KR121K1324JP2Y111.0592MHzC1730PFC1630PFVcc40P0.039P0.138P0.237P0.336P0.435P0.534P0.633P0.732EA/Vpp31Vss20XTAL119XTAL218T0/P3.414INT0/P3.212RST9P1.78P1.67P1.56U1STC89c52A1B2C3G16G2A4G2B5Y015Y114Y213Y312Y411Y510Y69Y77U7SN74ALS138A02A13A24A35A46A57A68A79B018B117B216B315B414B513B612B711E19DIR1U674ALS245R610K+5+5abcdefgdpabcdefgdpabcdefgdp1098674123com15com2abcedfgdpDS1abcdefgdpabcdefgdp1098674123com15com2abcedfgdpabcdefgdpabcdefgdp1098674123com15com2abcedfgdpDS3abcdefgdpabcdefgdpabcdefgdpS1S2S3S4S5S6+5DS1DS2S1S2S3S4S5S6A02A13A24A35A46A57A68A79B018B117B216B315B414B513B612B711E19DIR1U874ALS245+54.4矩阵式键盘的扩展1.键盘输入的特点键盘:一组按键开关的集合。行线电压信号通过键盘开关机械触点的断开、闭合,输出波形如图。4.4.1键盘接口原理2.按键的确认检测行线电平高电平:断开;低电平:闭合,常用软件来消除按键抖动。基本思想:检测到有键按下,键对应的行线为低,软件延时10ms后,行线如仍为低,则确认该行有键按下。3.如何消除按键的抖动有键松开时,行线变高,软件延时10ms后,行线仍为高,说明按键已松开。采取以上措施,躲开了两个抖动期t1和t3的影响。4.4.2键盘接口的工作原理独立式按键接口和矩阵式键盘接口。1.独立式键盘接口各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可很容易判断哪个键被按下。此种接口适于键数较少或操作速度较高的场合。2.矩阵式键盘接口由行线和列线组成,按键位于行、列的交叉点上。如图所示。用于按键数目较多的场合,行列式键盘与独立式键盘相比,要节省很多的I/O口线。0123106759841114151312+5VX3X2X1X0Y3Y0Y2Y1按键输出(1)、行列式键盘工作原理无键按下,该行线为高电平,当有键按下时,行线电平由列线的电平来决定。由于行、列线为多键共用,各按键彼此将相互发生影响,必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。(2)、按键的识别方法常用的为扫描法图8-5中6号键被按下为例,来说明此键是如何被识别出来的。扫描法进行按键识别的方法,分两步进行:第1步:识别键盘有无键按下第2步:如有键被按下,识别出具体的按键。把所有列线置0,检查各行线电平是否有变化,如有变化,说明有键按下,如无变化,则无键按下。依次把某一列置低电平,其余各列为高电平,检查各行线电平的变化,如果某行线电平为低,可确定此行列交叉点处的按键被按下。扫描结果:列线Y2为低电平,行线X1为低电平可采用依次排列键号的方式对按键进行编码。以图8-5中的4×4键盘为例,可将键号编码为:0、1、2、…F等16个键号。编码相互转换可通过计算或查表的方法实现。计算法转换按键的键号:键号(值)=行号×每行的按键个数+列号对应的4×4矩阵键盘的按键键号,如表8-1所示。(3)键盘的编码(4)键盘的扫描方式通常,键盘扫描方式有3种,即编程扫描、定时扫描和中断扫描。1).编程扫描方式只有当单片机空闲时,才调用键盘扫描子程序,扫描键盘。键盘扫描程序一般应包括以下内容:判别有无键按下。有键按下,用软件延时的方法消除按键抖动的影响。键盘扫描取得闭合键的位置码,既行、列值。用计算法或查表法将键的位置码转换为键值(0、1、2…F)。返回闭合键的键值。特点:CPU需不停的扫描键盘,工作效率较低。2).定时扫描方式利用单片机内的定时器,产生10ms的定时中断,对键盘进行扫描。3).中断扫描方式只有在键盘有键按下时,才执行键盘扫描程序,如无键按下,单片机将不理睬键盘。4.4.3.键输入过程与软件结构键扫描有无键按下查键号JMP@A+DPTR00#按键应用程序01#按键应用程序NN#按键应用程序A=00HA=01HA=NNH...NY实验内容1、检查实验板电源及地电位是否正常;2、模拟调试实验板各模块电路(注意万用表的正确使用);2、自学课本相关内容完成以下实验实验二自学内容:P68-P74调试课本例程实验三自学内容:P236-P239调试课本例程END