扩展io口_扩展io口,选用什么芯片好 - CSDN
精华内容
参与话题
  • IO口扩展芯片,主要是解决单片机IO口太少。 74HC165:数据从并转串 74HC595:数据从串转并 两种芯片,都是通过时序电路,加上移位功能,进行数据传输   74HC165:数据从并转串。以下实例,实现8个独立按键,...

    IO口扩展芯片,主要是解决单片机IO口太少。

    74HC165:数据从并转串

    74HC595:数据从串转并

    两种芯片,都是通过时序电路,加上移位功能,进行数据传输

     

    74HC165:数据从并转串。以下实例,实现8个独立按键,控制数码管的8段

     

    #include <reg52.h>
    #include <intrins.h>
    
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    void delay( u16 i ){
        while( i-- );
    }
    
    #define GPIO_DIG    P0
    
    sbit IN_SG = P1^6;
    sbit IN_DATA = P1^7;
    sbit IN_CLK = P3^6;
    
    u8 read_74HC165(){
        u8 indata;
        u8 i;
        IN_SG = 0; //先置入数据
        _nop_(); //等待一个机器周期
        IN_SG = 1; //芯片切入 移位功能
        _nop_();
        
        indata = 0;
        for( i = 0; i < 8; i++ ){ //在时序电路作用下,移动8次,得到一个字节数据
            indata = indata << 1;
            IN_CLK = 0;
            _nop_();
            
            indata |= IN_DATA;
            IN_CLK = 1;    
        }
        return indata;
    }
    
    void main (){
        u8 hc165_data;
        GPIO_DIG = 0x0;
        while( 1 ) {
            hc165_data = read_74HC165();
            if( hc165_data != 0xFF ) {
                GPIO_DIG = ~hc165_data;
            }
        }   
    }

    74HC595:数据从串转并,以下程序,实现流水灯效果

    #include <reg52.h>
    #include <intrins.h>
    
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    void delay( u16 i ){
        while( i-- );
    }
    
    #define GPIO_DIG    P0
    
    sbit SRCLK = P3^6; //移位寄存器时钟
    sbit STORE_RCLK = P3^5; //存储寄存器时钟
    sbit SER = P3^4; //串口输入数据
    
    void hc595_send_data( u8 input_data ) {
        u8 i;
        SRCLK = 1;
        STORE_RCLK = 1;
        for( i = 0 ; i < 8; i++ ){
            SER = input_data >> 7; //从最高位开始传送
            input_data <<= 1; //把次高位移到最高位
    
            SRCLK = 0; //时序脉冲
            _nop_();
            _nop_();
            SRCLK = 1;
        }
        STORE_RCLK = 0; //时序脉冲
        _nop_();
        _nop_();
        STORE_RCLK = 1; //把寄存器的数据 送到输出口
    }
    
    void main (){
        u8 led_num;
        led_num = 0x01; //先让D11点亮
        while( 1 ) {
            hc595_send_data( led_num );
            led_num = _crol_( led_num, 1 );
            delay( 50000 );
            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的情况。若对于该芯片还不了解可以百度其详细资料引脚功能,若有不懂或者错误的地方,欢迎留言_

    展开全文
  • AD扩展按键IO口

    2020-05-04 14:45:21
  • 扩展IO---74HC595小结

    千次阅读 2013-08-23 18:23:39
    74HC595  74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。 数据在SHcp(移位寄存器时钟输入)的...

     

    74HC595

      74HC595

                 74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。 数据在SHcp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在STcp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
    8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。
    将串行输入的8位数字,转变为并行输出的8位数字,例如控制一个8位数码管,将不会有闪烁。
     
      
     

    常见应用场景:
    1、扩展IO口,例如驱动CMOS的74HC595 驱动LED点阵屏没有问题;
    2、串转并,非常节约资源,从而可以降低对处理器的GPIO的需求量,一般点阵屏都需要串转并的IC
    3、具有三态输出锁存
    4、多个级联,可以很方便的用于更大的LED点阵屏驱动 

     

     

    74HC595同数据相关的引脚可以分为三类:

    • DS:串行数据输入,接Arduino的某个数字I/O引脚。
    • Q0~Q7:8位并行数据输出,可以直接控制8个LED,或者是七段数码管的8个引脚。
    • Q7′:级联输出端,与下一个74HC595的DS相连,实现多个芯片之间的级联。

    74HC595同控制相关的引脚一共有四个:

    • SH_CP:移位寄存器的时钟输入。上升沿时移位寄存器中的数据依次移动一位,即Q0中的数据移到Q1中,Q1中的数据移到Q2中,依次类推;下降沿时移位寄存器中的数据保持不变。
    • ST_CP:存储寄存器的时钟输入。上升沿时移位寄存器中的数据进入存储寄存器,下降沿时存储寄存器中的数据保持不变。应用时通常将ST_CP置为低点平,移位结束后再在ST_CP端产生一个正脉冲更新显示数据。
    • MR:重置(RESET),低电平时将移位寄存器中的数据清零,应用时通常将它直接连高电平(VCC)。
    • OE:输出允许,高电平时禁止输出(高阻态)。引脚不紧张的情况下可以用Arduino的一个引脚来控制它,这样可以很方便地产生闪烁和熄灭的效果。实际应用时可以将它直接连低电平(GND)。

    对于一个最简单的74HC595应用来讲,可以用Arduino的三个数字I/O端口分别控制DS、SH_CP和ST_CP,然后将MR和OE分别接VCC和地。下面是利用74HC595来控制8个LED。

     
    应用举例1:
     
     
     
    应用举例2:
     
    应用举例3:
     
     
     
     
     
    主要是要理解595的接收和输出机制,充分利用它的特点。
     
    展开全文
  • GPIO 总线扩展 IO接口

    千次阅读 2011-03-18 10:18:00
    当芯片组没有足够的IO接口时,GPIO提供了额外IO口的控制和监视功能。   二、其他  GPIO的引脚可以供使用者灵活使用,它可以是GPI(输入)、GPO(输出)、GPIO(输入输出)。  GPI:用寄存器...
  • 单片机扩展IO口

    万次阅读 2016-11-27 19:47:28
    单片机如何扩展IO口? 首先我们先讲讲为什么要扩展IO口。在我们使用51单片机的时候,有时候会出现IO口不够用的情况。比如键盘!这个时候IO口的资源就十分有限了。 按键是我们常用的器件,做某些东西的时候又不能缺少...
  • 学习在微机接口系统中扩展简单 I/O 设备的基本方法。 二、实验设备 PC 计算机一台, Dais-86PRO+或 Dais-PRO163C 实验系统一套。 三、实验内容及步骤 8 位 I/O 扩展 本实验用 74LS244 作为缓冲输入接口、 ...
  • 利用CD4051模拟开关芯片实现IO口扩展

    千次阅读 2019-04-17 11:25:22
    利用CD4051模拟开关芯片实现IO口扩展 1、CD4051介绍 详细信息参考:TI CD4051 Datasheet 可将其理解为单刀8掷开关,原理如图: 用三个IO控制A,B,C地址脚,可实现3脚与0-7这8个脚的连接。真值表如图: 2、典型...
  • Arduino几种扩展IO或PWM引脚的方法

    千次阅读 2019-07-27 21:12:19
    只是简单介绍一下目前知道的方法。 1、74HC595,移位寄存器,输入3个IO引脚,输出8个...在软件层次将不是PWM输出的IO口转为PWM输出。最多可以创建20个不同的通道,即 https://github.com/Palatis/arduino-softpwm ...
  • I/O扩展芯片CH423使用总结

    万次阅读 2018-07-26 09:29:16
     CH423 是两线串行接口的通用远程 I/O 扩展芯片。CH423 提供 8 个双向输入输出引脚和 16 个通用输出引脚,支持输入电平变化中断;CH423 内置电流驱动电路,可以静态驱动 24 只 LED 发光管或者动态驱动 128 只 LED...
  • 我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来...
  • Arduino模拟串口扩展

    千次阅读 2014-12-01 21:44:17
    有时候在使用Arduino时会出现既要向上位机接收数据,又要向下位机发送数据的情况,可是大多数Arduino只有一个串口,能不能通过编程方式把Arduino的普通IO口变成串口呢,答案是肯定的。 串口通信有异步和同步两种...
  • 串口与普通IO口的区别

    万次阅读 2018-09-12 08:02:54
    General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时...
  • Arduino基础入门篇22—74HC595扩展IO

    千次阅读 2019-11-04 15:05:19
    Arduino开发板的普通IO引脚是有限的,必要时要对IO口进行扩展,才能满足外部设备对IO口的需求。本篇介绍74HC595芯片,使用它来扩展Arduino的IO口,用3个IO来控制8路LED灯。
  • 树莓派GPIO控制--python篇

    万次阅读 2016-06-29 20:13:01
    1. 目前树莓派上常用的三种GPIO控制方式 python GPIO ...python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了p
  • 如何扩展Arduino开发板上的IO数量

    千次阅读 2019-05-13 10:18:47
    了解使用解码器和移位寄存器扩展Arduino上IO数量的不同方法。 所需的组件 ● Arduino开发板 ● 4028 BCD解码器 一些较复杂的项目通常要求您使用大量微控制器的输入和输出线。您可以使用一些方法使其看起来像微控制器...
  • 51单片机IO口的几点说明

    千次阅读 2011-03-18 10:19:00
    P0、P1、P2、P3四个I/O口作为通用IO口用是都是准双向口,即作为输入(读引脚)前先要对IO口置为1,截止俩个场效应管。单片机扩展外部存储器时,P0口可作为数据/地址复用线使用。即使得控制信号为1。控制信号为0时,P...
  • 树莓派的GPIO端口数量有限,可通过IO扩展芯片增加GPIO的数量,使得树莓派可以适应...PCF8574为一款通过I2C总线扩展IO的芯片,单个PCF8574可扩展8个IO,一个I2C总线最多可挂载8个PCF8574,所以树莓派最多可扩展64个IO。
  • 树莓派学习笔记——I2C使用 PCF8574 Python SMBUS

    万次阅读 热门讨论 2016-10-01 22:03:29
    树莓派的GPIO端口数量有限,可通过IO扩展芯片增加GPIO的数量,使得树莓派可以适应...PCF8574为一款通过I2C总线扩展IO的芯片,单个PCF8574可扩展8个IO,一个I2C总线最多可挂载8个PCF8574,所以树莓派最多可扩展64个IO。
  • 中断设定某方向的加速度阈值,当传感器测量值超过该阈值时,传感器输出中断信号。信号通过IO扩展芯片的中断管脚与MCU的...IO扩展芯片:设定输出给MCU IO口的中断的高/低电平有效,及level/pulse方式使能全局中断功能使
1 2 3 4 5 ... 20
收藏数 13,980
精华内容 5,592
关键字:

扩展io口