74HC595的驱动

74HC595的引脚如下


图片.png

其逻辑如下


图片.png

引脚说明


图片.png

Ds :串行数据的输入,简称SER
Q0-Q7:并行输出,
Q7‘ :则是为了级联多个595设置的引脚,级联的话会连接到下一个595的Ds
OE : 芯片使能脚
SHCP:移位时钟,一般简称 SCLK
STCP : 锁存时钟, 一般简称 RCLK

其中对于数据的流向,有些人一直搞不清楚,其实就可以按照下面画的红线去理解


图片.png

按D7-D0组成的二进制序列数即为要从串口输入的数据

具体的程序如下

#define  SER  //此添加引脚的输出寄存器
#define  SCLK   //此添加引脚的输出寄存器
#define  RCLK  //此添加引脚的输出寄存器
driver_595(uint8_t data)
{
    uint8_t i = 0;
    uint8_t temp = 0x80;
    
    for(i = 0; i<num;  i++)
    {
        if(data & temp)
        {
            SER = 1;
        }
        else
        {
            SER = 0;
        }       
        SCLK = 1;  
        _delay(10);
        data = data << 1;
        SCLK = 0;
    }

    RCLK = 0;
    _delay(10);
    RCLK = 1;
}

如果是多个595级联,则用下面的函数


driver_multi_595(uint32_t data, uint8_t bitCnt)
{
    uint8_t i = 0;
    uint32_t temp = 0x000001<<(num-1);
    
    for(i = 0; i<num;  i++)
    {
        if(data & temp)
        {
            SER = 1;
        }
        else
        {
            SER = 0;
        }       
        SCLK = 1;  
        _delay(10);
        data = data << 1;
        SCLK = 0;
    }

    RCLK = 0;
    _delay(10);
    RCLK = 1;
}


当然,如果使用的这个函数的时候bitCnt设为8,则和单个595是一样的

需要注意的事情
(1)这个是没有加使能控制, 如果上电对引脚电平以及功耗有要求,可以加上使能引脚的控制
(2)如果系统本身的速度就不快,延时可以省略掉
(3)SCLK,RCLK引脚在初始化结束的时候,一般立即设为低电平

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。