首先是oe要与gnd短接,这个大多数人都知道;
其次官方给的那个代码,里面的写入函数需要在每次初始化的时候设置RCLK=0;
不然第一次引用函数后RCLK=1,这样再进入函数的时候移位寄存器不起作用(猜测)
void hc595_write_data(u8 dat)
{
u8 i=0;
RCLK=0; //**这里加一个RCLK=0**
for(i=0;i<8;i++)
{
SER=dat>>7; //将dat的高位赋值给SER,dat值不变
dat<<=1; //dat右移一位
//移位寄存器时钟上升沿将端口数据送入寄存器中
SRCLK=0;
delay_10us(1);
SRCLK=1;
delay_10us(1);
}
//存储寄存器时钟上升沿将前面写入到寄存器的数据输出
RCLK=0;
delay_10us(1);
RCLK=1;
}
或者在while里面引用函数前加一个RCLK=0 即:
while(1)
{
RCLK=0;
hc595_write_data(0x80);
}