zoukankan      html  css  js  c++  java
  • 51单片机:IO口扩展芯片用法(74HC165,74HC595)

    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 );
        }     
    }
  • 相关阅读:
    [BZOJ] 1611: [Usaco2008 Feb]Meteor Shower流星雨
    [BZOJ] 1626: [Usaco2007 Dec]Building Roads 修建道路
    [BZOJ] 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛
    [BZOJ] 1627: [Usaco2007 Dec]穿越泥地
    [BZOJ] 1614: [Usaco2007 Jan]Telephone Lines架设电话线
    [BZOJ] 1617: [Usaco2008 Mar]River Crossing渡河问题
    [BZOJ] 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
    [BZOJ] 1625: [Usaco2007 Dec]宝石手镯
    [BZOJ] 1606: [Usaco2008 Dec]Hay For Sale 购买干草
    [HDU] 迷宫城堡 HDU
  • 原文地址:https://www.cnblogs.com/ghostwu/p/9153204.html
Copyright © 2011-2022 走看看