单片机系统的扩展•一、存储器的扩展•二、I/O端口的扩展8155引脚图1234567891011121314158155PB6IO/MPB7PC3PC016171819202122232425262728293031323334353637383940PC2VCCWRRDCEPC5RESETPC4TIMEROUTALEAD0AD1AD2AD3AD4AD5AD6AD7VSSPA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PC1TIMERIN2)用74LSTTL电路扩展并行I/O口利用74LS273和74LS244,将P0口扩展成简单的输入、输出口的电路。74LS273输出端接8个LED发光二极管,以显示8个按钮开关状态,某位低电平时二极管发光。74LS244是缓冲驱动器,扩展输入口,接8个按钮开关。•74ls273:是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。CPU的ALE信号必须经过反相器反相之后才能与74LS273的控制端CLK端相连。MOVX@DPTR,A;A中数据送输出口SJMPLP;反复连续执行编写程序把按钮开关状态通过图中的发光二极管显示出来。程序如下:DDIS:MOVDPTR,#0FEFFH;输入口地址→DPTRLP:MOVXA,@DPTR;按钮开关状态读入A3)用MCS-51的串行口扩展并行口用74LS165扩展并行输入口串行口控制寄存器SCONSCON9FH9EH9DH9CH9BH9AH99H98H(98H)SM0SM1SM2RENTB8RB8TIRI例:从16位扩展口读入5组数据(每组二个字节),节并把它们转存到内部RAM20H开始的单元中。MOVR7,#05H;设置读入组数MOVR0,#20H;设置内部RAM数据区首址START:CLRP1.0;并行置入数据,S/L*=0SETBP1.0;允许串行移位,S/L*=1MOVR1,#02H;设置每组字节数,即外扩;74LS165的个数RXDATA:MOVSCON,#10H;设串口方式0,允许接收,启动WAIT:JNBRI,WAIT;未接收完一帧,循环等待CLRRI;清RI标志,准备下次接收MOVA,SBUF;读入数据MOV@R0,A;送至RAM缓冲区INCR0;指向下一个地址DJNZR1,RXDATA;未读完一组数据,继续DJNZR7,START;5组数据未读完重新并行置入……;对数据进行处理用74LS164扩展并行输出口.74LS164:8位串入并出移位寄存器。下图是利用74LS164扩展二个8位并行输出口的接口电路。例编写将内部RAM单元30H、31H的内容经串行口由74LS164并行输出子程序。START:MOVR7,#02H;设置要发送的字节个数MOVR0,#30H;设置地址指针MOVSCON,#00H;设置串行口为方式0SEND:MOVA,@R0MOVSBUF,A;启动串行口发送过程WAIT:JNBTI,WAIT;1帧数据未发完,循环等待CLRTIINCR0;取下一个数DJNZR7,SEND;未完,发完从子程序返回键盘接口•键盘实际上是由排列成矩阵形式的一系列按键开关组成的,它是单片机系统中最常用的人机联系的一种输入设备。用户通过键盘可以向CPU输入数据、地址和命令。•键盘按其结构形式可分为编码式键盘和非编码式键盘两大类。••单片机系统中普遍使用非编码式键盘。这类键盘应主要解决以下几个问题:•(1)键的识别;•(2)如何消除键的抖动;•(3)键的保护。•在以上几个问题中,最主要的是键的识别。•非编码式键盘的结构与工作原理•1.非编码式键盘的结构•0123106759841114151312+5VX3X2X1X0Y3Y0Y2Y1•2.非编码式键盘的工作原理非编码式键盘识别闭合键通常有两种方法:一种称为行扫描法,另一种称为线反转法。•行扫描法:•所谓行扫描法,就是通过行线发出低电平信号,如果该行线所连接的键没有按下的话,则列线所连接的输出端口得到的是全“1”信号;如果有键按下的话,则得到的是非全“1”信号。•3.如何消除键的抖动•由于按键为机械开关结构,因此机械触点的弹性及电压突跳等原因,往往在触点闭合或断开的瞬间会出现电压抖动。•软件去抖:调用延迟子程序•硬件去抖:加锁存器•4.键的保护•键的保护问题指的是当有双键或多键同时按下时会出现什么问题以及如何加以解决。一旦出现这样情况,一般作为废键处理。键盘接口举例8RP0.0P0.2P0.7P0.6P0.5P0.4P0.3P0.18051B0B1B7B6B5B4B3B2A0A7A6A5A4A3A2A1P1.1P1.0P2.7RD174HC24501A98765432BFECDVCCDIRE键盘扫描的程序(采用查询方法)•KS:MOVDPTR,#7FFFH;键扫描程序•CLRP1.0;先扫描第1行•MOVXA,@DPTR;读入按键状态•MOV37H,A;暂存按键状态•CPLA;•JZKSK1;0~7号键没有键操作,则跳•LCALLDL20;0~7号键有操作,则延时去抖•MOVXA,@DPTR;再读键状态•XRLA,37H;和延时前的状态一样吗?•JZKS1;一样,则转去查询键号•KSK1:SETBP1.0;开始扫描第2行•CLRP1.1•MOVXA,@DPTR;读入按键状态•MOV37H,A;暂存按键状态•CPLA•JZKSK2;8~F号键没有键操作,则跳•LCALLDL20;8~F号键有操作,则延时去抖••MOVXA,@DPTR;再读键状态•XRLA,37H;和延时前的状态一样吗?•JZKS1;一样,则转去查询键号•KSK2:AJMPKS9;8~F键也不存在操作则跳•KS1:MOVXA,@DPTR;再读按键状态•CPLA•JNZKS1;按键没有松开,则等待松开•MOVA,37H;查询有键操作的键号•JBACC.0,KS2;不是第1个键,则跳•MOV37H,#00H;赋键初值•AJMPKS10•KS2:JBACC.1,KS3;不是第2个键,则跳•MOV37H,#01H;赋键初值•AJMPKS10•……•KS9:SETBACC.7•AJMPKS11•KS10:MOVA,37H•ANLA,#07H•JNBP1.0KS11•SETBACC.3•KS11:ORLP1,#03H•MOV37H,A•RETLED数码显示器接口•1.LED数码显示器的结构•LED数码显示器是一种由LED发光二极管组合显示字符的显示器件。它使用了8个LED发光二极管,其中7个用于显示字符,1个用于显示小数点,故通常称之为7段(也有称作8段)发光二极管数码显示器。7段LED数码显示器LED数码显示器有两种连接方法:(1)共阳极接法。把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。(2)共阴极接法。•把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。每个发光二极管的阳极通过电阻与输入端相连。•2.LED数码显示器的显示段码•为了显示字符,要为LED显示器提供显示段码(或称字形代码),组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED显示器的显示段码为1个字节。各段码位的对应关系如下:段码位D7D6D5D4D3D2D1D0显示段dpgfedcba七段码LED显示器字型码表•LED数码显示器的接口方法与接口电路1.LED数码显示器的接口方法单片机与LED数码显示器有以硬件为主以软件为主的两种接口方法。•1)以硬件为主的接口方法•以硬件为主的LED显示器接口电路•2)以软件为主的接口方法这种接口方法的电路,它是以软件查表代替硬件译码,不但省去了译码器,而且还能显示更多的字符。但是驱动器是必不可少的,因为仅靠接口提供不了较大的电流供LED显示器使用。以软件为主的LED显示器接口电路•LED数码显示器的显示方法•对于多位数码显示器来说,为了简化线路、降低成本,往往采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。•如前所述,由于各位数码管的显示段码是互相并联的,因此在同一时刻只能显示同一种字符。对于这种接口电路来说,其显示方法有静态显示和动态显示两种。••1.静态显示•所谓静态显示,就是在同一时刻只显示1种字符,或者说被显示的字符在同一时刻是稳定不变的。其显示方法比较简单,只要将显示段码送至段码口,并把位控字送至位控口即可。•2.动态显示•如果要在同一时刻显示不同的字符,从电路上看,这是办不到的。因此只能利用人眼对视觉的残留效应,采用动态扫描显示的方法,逐个地循环点亮各位数码管,每位显示1ms左右,使人看起来就好象在同时显示不同的字符一样。••LED数码显示器的接口电路