找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2998|回复: 11
打印 上一主题 下一主题
收起左侧

三个74HC595串联的问题 附单片机程序

[复制链接]
跳转到指定楼层
楼主
三个74HC595串联,用led595_0()输送个第一个595,为啥后面两个会跟第一个595同步运行呢。  
用led595_1().led595_2()分别输送给第二个第三个595都能单独控制。只有第一个运行时后面的都是同步运行,这是为什么?

单片机源程序如下:
#include<reg51.h>
#include <intrins.h>
#include"delay.h"
#define  nop() _nop_()  
#include "hc595.h"


sbit shcp =P2^0;
sbit ds =P2^1;
sbit stcp =P2^2;

void led595_0(unsigned int date);
void led595_1(unsigned int date);
void led595_2(unsigned int date);
unsigned char i,j,z,k,a;   
void main()                    //主函数
{  
                  
                                 for(i=0;i<8;i++)            
                                                        {led595_1(0x80>>i);delayxms(200);}
                                 
                                 
                                
                                                        
                                                
                              
                                
}

void led595_0(unsigned int date) //往595输送数据函数
{                 
  for(k=0;k<8;k++)
   {
     if((date<<k)&0x80)
                        ds=1;         
     else
                        ds=0;                                
      shcp=0;
      nop();        
      nop();
      shcp=1;        
   }
            stcp=0;
      nop();   
      nop();
      stcp=1;      
}

void led595_1(unsigned int date) //往595输送数据函数
{                 
  for(k=0;k<16;k++)
   {
     if((date<<k)&0x80)
                        ds=1;         
     else
                        ds=0;                                
      shcp=0;
      nop();        
      nop();
      shcp=1;        
   }
            stcp=0;
      nop();   
      nop();
      stcp=1;      
}

void led595_2(unsigned int date) //往595输送数据函数
{                 
  for(k=0;k<24;k++)
   {
     if((date<<k)&0x80)
                        ds=1;         
     else
                        ds=0;                                
      shcp=0;
      nop();        
      nop();
      shcp=1;        
   }
            stcp=0;
      nop();   
      nop();
      stcp=1;      
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-8-17 22:39 | 只看该作者
因为你的SHCP和STCP脚是共用的啊
你要弄清楚595各脚的功能
回复

使用道具 举报

板凳
ID:332444 发表于 2021-8-18 07:15 | 只看该作者
如果之前示例不甚了解,再做一个示例,我这个示例只做了2片级联效果是第一片逐个流水到8后第二片开始流水即第二片是第一片逢8进一的效果
  1. void main()
  2. {//缘由http://www.51hei.com/bbs/dpj-211401-1.html
  3.         unsigned char wei=0,Xd=0,Sw=0x01;
  4.         unsigned int Ys=47474,Lx=0,ls=0x01;

  5.         while(1)
  6.         {
  7.                 if(!--Ys)
  8.                 {
  9.                         mr=0;
  10.                         mr=1;
  11.                         QuDong595(DuLiAnJian[wei]);QuDong595(DuLiAnJian[Xd]);
  12.                         if(++Xd>8){Xd=0;if(++wei>8)wei=0;}
  13.                         SJG=~SJG;
  14.                         Ys=47474;
  15.                 }
  16.         }
  17. }
复制代码
回复

使用道具 举报

地板
ID:960619 发表于 2021-8-18 11:51 | 只看该作者
lkc8210 发表于 2021-8-17 22:39
因为你的SHCP和STCP脚是共用的啊
你要弄清楚595各脚的功能

那在多个595串联的情况下,第一个是否也可以同后面的595一样单独控制其一个呢。就是让后面的595不同步第一个595动作
回复

使用道具 举报

5#
ID:161164 发表于 2021-8-18 14:44 | 只看该作者
baobao125 发表于 2021-8-18 11:51
那在多个595串联的情况下,第一个是否也可以同后面的595一样单独控制其一个呢。就是让后面的595不同步第 ...

不能直接控制,只能间接,因为他们是串联的
如果想单独控制,可把他们的SH和DS各自并联
然后分开三只脚去控制ST脚
回复

使用道具 举报

6#
ID:123289 发表于 2021-8-18 15:42 | 只看该作者
看来你需要先弄清楚595原理,仔细读一下595的手册吧。
回复

使用道具 举报

7#
ID:332444 发表于 2021-8-19 09:16 | 只看该作者
不同算法实现不同流水灯效果


1.gif (221.6 KB, 下载次数: 16)

1.gif

2.gif (270.1 KB, 下载次数: 25)

2.gif
回复

使用道具 举报

8#
ID:960619 发表于 2021-8-19 16:06 | 只看该作者
lkc8210 发表于 2021-8-18 14:44
不能直接控制,只能间接,因为他们是串联的
如果想单独控制,可把他们的SH和DS各自并联
然后分开三只 ...

一开始是第一个595运行,另外两个也同步第一个595的程序。我只想让输送给第一个595运行的时候后面两个595不动就行。现在重写了输出函数搞定了
回复

使用道具 举报

9#
ID:332444 发表于 2021-8-19 16:10 | 只看该作者
假如说级联不止3级而是更多如4级7级?用2级代码思路如法炮制,控制多少级随意.
回复

使用道具 举报

10#
ID:960619 发表于 2021-8-20 20:06 | 只看该作者
xianfajushi 发表于 2021-8-19 16:10
假如说级联不止3级而是更多如4级7级?用2级代码思路如法炮制,控制多少级随意.

两个595,我用0xfffe,3个用0xfffffe,4个用0xfffffffe.好像再多级联的话无法用这方法实现了
回复

使用道具 举报

11#
ID:961576 发表于 2021-8-20 20:55 | 只看该作者
不同算法实现不同流水灯效果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表