51单片机控制8*8LED点阵,用到的hc595芯片原理

这段代码是用来向HC595移位寄存器写入数据的函数。下面是对代码的逐行解释:

void hc595_write_data(u8 dat)
{
    u8 i=0;
    for(i=0;i<8;i++) // 循环 8 次即可将一个字节写入寄存器中
    {
        SER=dat>>7; // 优先传输一个字节中的高位
        dat<<=1; // 将低位移动到高位
        SRCLK=0;
        delay_10us(1);
        SRCLK=1;
        delay_10us(1); // 移位寄存器时钟上升沿将端口数据送入寄存器中
    }
}

逐行解释如下:

  • void hc595_write_data(u8 dat):定义了一个名为hc595_write_data的函数,它接受一个参数dat,该参数表示要写入HC595寄存器的数据。

  • u8 i=0;:定义一个无符号8位整型变量i并初始化为0,用于循环计数。

  • for(i=0;i<8;i++):循环8次,即将一个字节的数据分为8位进行逐位写入寄存器。

  • SER=dat>>7;:将要写入的数据的最高位(高位)赋值给串行数据输入(SER)引脚,右移操作可以提取出最高位。

  • dat<<=1;:将要写入的数据向左移动一位,将下一位的数据移动到最高位,以准备写入。

  • SRCLK=0;:将移位寄存器时钟(SRCLK)引脚设置为低电平。

  • delay_10us(1);:延时一段时间,具体的延时函数未提供代码,可能实现了10微秒级别的延时。

  • SRCLK=1;:将移位寄存器时钟引脚设置为高电平,触发数据移位。

  • delay_10us(1);:再次延时一段时间。

上述的循环代码将一个字节的数据逐位移位并写入HC595移位寄存器中,先传输最高位,然后逐位往低位传输。通过控制移位寄存器时钟引脚的上升沿触发,将数据送入寄存器中。整个函数的作用是向HC595寄存器中写入一个字节的数据。

HC595是一种串行输入、并行输出的移位寄存器芯片,常用于扩展微控制器的IO口。它能够将串行输入的数据并行输出到多个输出引脚,实现多个输出信号的控制。

HC595移位寄存器内部包含一个8位的移位寄存器和一个8位的输出寄存器。它的工作原理如下:

  1. 串行输入(Serial Input,SER):通过SER引脚将数据位串行输入到移位寄存器中。在每一个时钟周期,将要输入的数据位通过SER引脚输入进来。

  2. 移位寄存器时钟(Shift Register Clock,SRCLK):SRCLK用于控制移位寄存器的工作时钟。当SRCLK引脚从低电平切换到高电平时,移位寄存器会根据SER引脚上的数据位进行移位操作。移位操作会将输入的数据位逐个移入移位寄存器的位中。

  3. 输出寄存器时钟(Storage Register Clock,RCLK):RCLK用于控制输出寄存器的工作时钟。当RCLK引脚从低电平切换到高电平时,输出寄存器会将移位寄存器中的数据加载到输出寄存器中。

  4. 并行输出(Parallel Output):输出寄存器中的数据通过多个并行输出引脚进行并行输出。每个输出引脚都对应输出寄存器中的一个数据位,通过引脚状态的高低电平来表示数据位的状态。

工作时序如下:

  • 在每一个时钟周期,将要输入的数据位通过SER引脚输入到移位寄存器中。

  • 当SRCLK引脚由低电平切换到高电平时,移位寄存器会根据SER引脚上的数据位进行移位操作。

  • 当RCLK引脚由低电平切换到高电平时,输出寄存器会将移位寄存器中的数据加载到输出寄存器中。

  • 输出寄存器中的数据通过多个并行输出引脚进行并行输出。

通过控制SRCLK和RCLK的时序,我们可以逐个输入数据位,并在加载完所有数据位后,将输出寄存器中的数据一次性并行输出到多个输出引脚,实现对外部设备的控制。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值