单片机i/o口扩展_单片机i/o串口扩展 - CSDN
  • 51单片机I/O必看

    2020-07-30 23:30:48
    不了解51系列单片机I/O口用法,必须看,是做普通输入还是做总线输入输出,或者是数据,地址总线信号输入输出,要求电压驱动是多少,上拉电阻下拉电阻的理解。
  • 单片机扩展IO

    2016-11-27 19:47:28
    单片机如何扩展IO? 首先我们先讲讲为什么要扩展IO。在我们使用51单片机的时候,有时候会出现IO不够用的情况。比如键盘!这个时候IO的资源就十分有限了。 按键是我们常用的器件,做某些东西的时候又不能缺少...

    单片机如何扩展IO口?

    首先我们先讲讲为什么要扩展IO口。在我们使用51单片机的时候,有时候会出现IO口不够用的情况。比如键盘!这个时候IO口的资源就十分有限了。

    按键是我们常用的器件,做某些东西的时候又不能缺少按键。如果一个按键对应一个IO口,那么可想而知,按键所占的IO口的数量是很大的。单片机IO口的资源是有限的,因此我们要采取一些方法来扩展单片机的IO口,控制按键所占的单片机IO口。

    下面有几种方法可以扩展单片机的IO口:

    1. 通过数据缓存器、锁存器来扩展单片机IO口。

    这里采用74HC164来扩展单片机IO口。



    2. 采用可编程I/O接口扩展芯片。

    8255A是Intel公司生产的8位可编程并行接口芯片。内部有3个可编程的并行I/O口:PA口、PB口、PC口。



    3. 采用矩阵键盘也可以减少IO口的使用。

    矩阵键盘是常用的一种方式。可以根据扫描的方法来得到按键按下的位置



    4. 采用A/D获取按键的位置。

    因为每个按键按下时,获得的电压不同。因此启动AD采样,根据得到的电压值的不同,判断按键的位置。



    展开全文
  • 我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率...比如利用单片机显示数码管单纯的显示一个数码管如果仅仅是为了显示 那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么...

       我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来),有并入串出的(相对前者而言)。具体用哪种类型要根据我们得实际情况。比如利用单片机显示数码管单纯的显示一个数码管如果仅仅是为了显示 那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么,当然这里我说的数码管是8段的(如果利用BCD类型 16进制数码管那么只需四个即可)就拿51类型的单片机来说,总共32个I/O口,一般如果不是做太大的工程是完全够用的,但有些时候你会恨单片机怎么不多长几条“腿”,怎么省还是不够用。这个时候就需要用到并转串或者串转并芯片来进行IO口的扩展,74HC595就是一种串行转并行的芯片。

     74HC595芯片特点

     8位串行输入 
    8位串行或并行输出 
    存储状态寄存器,三种状态 
    输出寄存器可以直接清除 
    100MHz的移位频率 

    输出能力

    串行输出:标准 中等规模集成电路

    并行输出:总线驱动

    应用 
    串行到并行的数据转换 
    Remote control holding register.,远程控制保持寄存器
    描述 
    595是高速的硅结构的CMOS器件, 
    兼容低电压TTL电路,遵守JEDEC标准。 
    595是具有8位移位寄存器和一个存储器,IO口有三态输出功能,即IO口电平有高电平、低电平、高阻态三态。 
    移位寄存器和存储器使用各自的时钟。 

    芯片引脚定义图

    引脚说明:

    QA--QH(1-7,15引脚):8个并行输出引脚

    GND(8引脚):地引脚

    Q'H(9引脚):串行输出引脚

    /SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。
    SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。) 
    RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
    /G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。

    SER(14引脚):串行输入引脚

    芯片真值表:

    芯片时序图:

    芯片功能介绍:

        74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器使用分别的时钟。
    数据在SCK的上升沿输入,在RCK的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 
       移位寄存器有一个串行移位输入(SER),和一个串行输出(QH’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能/G时(为低电平),存储寄存器的数据输出到总线。 

    补充说明:

        74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。另外,据网上报价,贴片164每只1元钱,贴片595 0.8元/只。 

    74HC595电路图:

    实际物理电路接线图:

    74HC595旁边的短接片一定要接上,不然74HC595无法正常工作。

    示例程序如下:

     

       #include "reg52.h"
       #include "intrins.h"
     
    
       typedef unsigned char u8;
       typedef unsigned int u16;
    
       #define GPIO_LED P0
       
       sbit SRCLK = P3^6;//SCK引脚
       sbit RCLK1 = P3^5;//RCK引脚
       sbit SER = P3^4;//SER引脚
    
    void delay(u16 i) //延时函数
    {
     while(i --);
    }
    
      void Hc595SendByte(u8 dat) //595芯片将串行数据转换为并行数据
      {
       u8 a;
       for(a = 0; a < 8; a ++) //8位数据依次转换
       {
       SER = dat >> 7; //先将最高位转换
       dat <<=1;  //然后数据左移,次高位成为最高位,循环操作,将8位数据依次传入芯片串行输入
    
       SRCLK = 0;//移位时钟低电平
       _nop_();
       _nop_();
       SRCLK = 1;//移位时钟高电平,数据会在移位时钟上升沿进行移位
    
       }
    
       RCLK1 = 0; //存储时钟低电平
       _nop_();
       _nop_();
       RCLK1 = 1;//存储时钟高电平,数据会在存储时钟上升沿进行存储
      }
    
      
    
    
       void main()
       {
       u8 ledNum;
       ledNum = 0x01;//初始串行数据
       while(1)
       {
       Hc595SendByte(ledNum); //将串行数据发送给595芯片,595芯片并行数据与8位发光二极管相连,会点亮相应的发光二极管
       ledNum = _crol_(ledNum, 1);//将串行数据进行左移,变换串行数据。
       delay(50000);
       }
      
       }

     

    展开全文
  • (1)之所以用IO口扩展,是因为节省IO引脚(设想假如控制LED就需要八个引脚,那么如果需要很多功能实现的话,IO引脚定是不够的).。 (2)如果定义位变量 sbit RCLK=P3^5;时候会出现error C231: ‘RCLK’: ...

    首先注意几个问题:
    (1)之所以用IO口扩展,是因为节省IO引脚(设想假如控制LED就需要八个引脚,那么如果需要很多功能实现的话,IO引脚定是不够的).。
    (2)如果定义位变量 sbit RCLK=P3^5;时候会出现error C231: ‘RCLK’: redefinition。要把RCLK换成其他任意的即可,或者把头文件由#include"reg52.h"换成#include"reg51.h"即可。(因为reg52.h里面已经定义过RCLK这个变量了)。

    大家都知道74HC165与74HC595两个芯片的基本作用,在这里只讲595芯片,因为这里会遇到。
    74HC595此芯片是串入并出,即串行的输入数据,并行的输出数据(一个输入端SER,八个输出端QA~QH)。
    讲一下大致实现过程:
    (1)595芯片读取一个字节的数据(可以通过函数调用实现);
    (2)由于一个字节是八位,由于引脚14(SER)只能输入一位的数据,可以知道对于该芯片读取的八位数据(一个字节)进行移位依次输入。如下图
    00
    11
    (3)并行的输出数据通过QA~QH引脚,进而控制LED。
    000
    如上图为芯片引脚图
    其中写GND的,VCC的可以忽略不管。(用最简洁的语言教大家如何理解595芯片以及写出流水灯程序)。
    其中①引脚11SRCLK)是移位寄存器时钟,(提醒你开始移动数据了)。
    ②引脚12RCLK)是存储寄存器时钟,即数据将从移位寄存器移到存储寄存器中。(提醒你开始存储移动好的数据了)
    ③引脚9可以用作级联。作为下一个595芯片的输入。
    下面附上代码:

    #include"reg52.h"
    #include"intrins.h"
    typedef unsigned char u8;
    typedef unsigned int u16;
    #define IO_led P0
    #define IO_key P1
    void delay(unsigned int);
    void keydown();
    u8 code smgduan[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
    u8 keyvalue;
    sbit SRCLK=P3^6;//移位寄存器时钟(上升沿有效)
    sbit CLK=P3^5;//存储寄存器时钟(上升沿有效)
    sbit SER=P3^4;//数据输入端
    u8 hc595sendbyte(u8 dat)
    {
    	u8 i;
    	for(i=0;i<8;i++)
    	{
    		SER=dat>>7;//比如数据1101 1101右移七位则成为0000 0001则最后一位就是SER所取的位,最高位
    		dat<<=1;//左移一位是为了取得刚刚所读取位的紧挨着的位
    		SRCLK=0;
    		_nop_();
    		_nop_();
    		SRCLK=1;
    	}
    	  CLK=0;
    		_nop_();
    		_nop_();
    		CLK=1;//一个上升沿(如若不知道可以看此文章的图一)
    }
    
    void delay(unsigned int i)
    {
      unsigned int j;
    	for(;i>0;i--)
    	 for(j=0;j<124;j++)
    	{}
    }
    void main()
    {
    	u8 lednum;
    	lednum=0x01;
    	while(1)
    	{
    		hc595sendbyte(lednum);//595芯片读取一个字节
    		delay(500);
    		lednum=_crol_(lednum,1);//对于lednum变量进行左移操作
    	}
    }
    

    何为上升沿,上升沿是一个瞬间,电平从0到1的瞬间。图3
    以上为IO口扩展,用595芯片控制LED的情况。若对于该芯片还不了解可以百度其详细资料引脚功能,若有不懂或者错误的地方,欢迎留言_

    展开全文
  • I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0、P2用作地址总线和数据总线,此时能用的I/O口就只有P1和P3,如果再使用串行通信,I/O口就不够使用了,需要扩展I/O口 两种方式: ① 采用普通...

    并行I/O口扩展实例

    //51单片机原理及应用(第二版)——基于Keil C与Proteus》第四章例4.4

    I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0、P2口用作地址总线和数据总线,此时能用的I/O口就只有P1和P3口,如果再使用串行通信,I/O口就不够使用了,需要扩展I/O口

    两种方式:

    ① 采用普通锁存器、三态门等芯片来进行简单的扩展(如74LS373或74LS244等)

    采用可编程的I/O芯片来扩展(如8255或8155等)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    要求:用4个开关控制4个LED的亮灭状态,其中采用74LS244控制开关的输入,采用74LS373控制LED输出

    代码:

    电路图:

    过程分析:

    过程://右键点击图片"在新标签页中打开图片"即可放大

    1. #18 P0=0xff; 通过拉高P0口置为1111 1111,即关闭LED灯;
    2. #19 com=0; CD4071 U2.A1CD4071 U2.B5输入一个0
    3. #20 rd = 0; CD4071 U2.A2输入一个0
    4. 由于CD4071的功能是执行逻辑或运算,12分别输入0,则3输出074LS244OE口;
    5. 74LS244缓冲驱动器的OE为使能端,低电平是有效的,高电平时输出为三态,此时通过CD4071传给OE低电平,使开关的电平可以通过74LS244传入P0
    6. 开关状态传入P0
    7. #21 temp = P0; 通过定义的unsigned char temp来存放P0的状态
    8. #22 rd = 1; CD4071 U2.A2输入一个1
    9. 1=02=1;此时或门输出为1
    10. 74LS244OE端高电平时输出为三态,关闭74LS244
    11. #23 wr = 1;CD4071 U2.B6输入一个1
    12. 此时5=06=1CD4071 U2.B7输出一个1
    13. 74LS343OE为低电平时,用作地址锁存器;LE为高电平时,输出Q0-Q7状态与D0-D7状态相同;当LE发生负跳变(1->0)时,输入端的D0-D7锁入Q0-Q7
    14. #24 P0 = temp; temp中的数据存入P0,传送到74LS343D端;
    15. #25 wr = 0; CD4071 U2.B6输入一个0
    16. 此时5=06=0CD4071 U2.B7输出一个0
    17. LE的状态从1->0,发生负跳变,输出Q0-Q7
    18. LED等接受到开关的情况,发生亮灭。

         

    实验结果

    转载于:https://www.cnblogs.com/hughdong/p/6734899.html

    展开全文
  • 51单片机I/O口

    2017-08-27 15:02:10
    51单片机I/O口1,51单片机I/O类型为准双向通用I/O。 2,[准双向I/O口] 在用作输入前,必须先用输出指令置锁存器的置为1。 3,[准双向I/O口] 准双向I/O口输出类型可用作输出和输入功能时,不需要重新配置线...

    51单片机的I/O口

    1,51单片机的I/O类型为准双向通用I/O。
    2,[准双向I/O口] 在用作输入前,必须先用输出指令置锁存器的置为1。
    3,[准双向I/O口] 准双向I/O口输出类型可用作输出和输入功能时,不需要重新配置口线输出状态。
    4,[准双向I/O口] 当I/O引脚悬空时,该引脚被上拉为高电平。
    5,[准双向I/O口] 当I/O口线寄存器为1,且引脚本身为1时,为了把引脚拉低,需要足够的灌电流能力使引脚上的电压降到门槛电压以下。
    6,[准双向I/O口] 当I/O口线由0到1跳变时,只需约2个时钟就能够将引脚上拉到高电平。
    7,[开漏输出] P0口上电复位后处于开漏输出,当P0管脚作I/O时,需外加10K-4.7K的上拉电阻(I/O口通过一电阻连接到VCC)。
    8,[开漏输出]  当外部有上拉电阻,开漏的I/O口还可以读外部状态。
    9,对I/O口的设置,在软件设置由低变高后,加1-2个空操作指令延时,再读取数据。
    10,驱动LED发光二极管,应当加上1000欧姆的限流电阻(470欧姆以上)。

    展开全文
  • 单片机I/O扩展

    2015-02-26 22:46:15
    由于单片机I/O和有限则免不了需要做一些外部的I/O扩展,下面对其进行一些总结。对I/O扩展的方法有很多,现从74HC595和74HC165两种芯片来做一些说明。 74HC595是一个串入转并出的芯片,数据通过一个I/O串行...
  • 51单片机P0/P1/P2/P3的区别: P0要作为低8位地址总线和8位数据总线用,...P2除了作为普通I/O口之外,在扩展外围设备时,要用作高8位地址线; P3除了作为普通I/O口之外,其每个引脚都有第二功能。 I/O端...
  • 单片机实验报告 (P1实验 I/O扩展实验)
  • 单片机I/O口知多少

    2010-03-26 00:47:00
    单片机的学习和开发中,I/O往往是大家接触最多的,故把它们比作心灵的窗口一点都不为过,日常应用中发现很多人对其不甚了解,有些很重要的知识含混不清,这对我们的后续的开发和更高级的处理器学习显然是不利的,...
  • 80c51单片机通用I/O口

    2017-01-18 18:21:29
     80C51单片机含有4 个8位并行I/O口P0、P1、P2和P3。每个有8个引脚,如图2-1所示,共有32个I/O引脚,每一个并行I/O口都能用作输入或输出。各的第 一、第二功能如下:  I/O口 引脚 第一功能 第二功能  P0...
  • 单片机I/O口使用

    2016-09-16 11:58:56
    其中P0和P2通常用于对外部存储器的访问,在具有片外扩展存储器的系统中,P2作为高8位地址线,P0分时作为低8位地址线和双向数据总线P1P1是用户专用 8 位准双向I/O口, 具有通用输入/输出功能, 每一位都能独立...
  • 1.什么是源型漏型?什么是上拉电阻?下拉电阻?什么是线驱动输出集电极开路输出,推挽式输出? 我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做...
  • 8051单片机I/O口

    2017-01-19 09:11:58
     80C51单片机含有4 个8位并行I/O口P0、P1、P2和P3。每个有8个引脚,如图2-1所示,共有32个I/O引脚,每一个并行I/O口都能用作输入或输出。各的第 一、第二功能如下:  I/O口 引脚 第一功能 第二功能  P0...
  • 单片机 通用I/O口

    2017-01-18 18:21:08
    8051单片机的4个I/O口主要有P0、P1、P2、P3。 P0下拉能力较强;P3有较多的复用功能; P0、P1当访问外部存储器时可做为DB和AB,P2一般做为通用IO使用。P1,P2,P3具有内部上拉双向输出IO,P0无内部上...
  • 有个产品的如图的电路模型,接线处的I/O口在开机后是高电平,怀疑是上拉输入之类的功能,但是在闭合的时候加休眠,漏电电流约等于0,松开的时候又可以产生上升沿脉冲。这是为什么呢?据我实验,如果保持上拉输入下,...
  • 目前普遍采用的MCS51 和PIC 系列单片机通常只有...8250 通用同步/异步接收发送芯片(USART),需额外占用单片机I/O 资源。本文介绍一种用单片机普通I/O 实现串行通信的方法,可在单片机的最小应用系统中实现与两个以
  • 74LS273扩展I/O口实验

    2020-07-30 23:31:19
    使用汇编语言编写程序,以74LS273作为I/O口,控制8个单色LED灯,使8个LED灯依次闪烁。I/O端口号为168H。
  • I/O口控制实验

    2020-07-28 23:32:31
    1.P1做输出口,接8只发光二极管,编写程序使发光二极管循环点亮。
  • 关于51单片机I/O口及外部拉电阻 对于51单片机I/O口及外部拉电阻,常见到一些模糊认识。稍微总结一下,或许有点用处。▲ P1, P2,P3:对地有一个晶体管做的开关,对电源是内部有个集成电阻(大约几十K~...
1 2 3 4 5 ... 20
收藏数 6,072
精华内容 2,428
关键字:

单片机i/o口扩展