三个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;
}
|