74HC595具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器有相互独立的时钟。
数据在SH_cp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在ST_cp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
595具体使用的步骤:
第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。
方法:送位数据到_595。
第二步:目的:将位数据逐位移入74HC595,即数据串入
方法:SH_CP产生一上升沿,将DS上的数据移入74HC595中.从低到高
第三步:目的:并行输出数据。即数据并出
方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据
送入到输出锁存器。
说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。
总以上所述:说的通俗一点就是
一个SCK上升沿,数据从DI被取进内部移位寄存器并且向后移一位
一个RCK上升沿移位寄存器里面的数据锁存输出
本实验还没有用eclipse做过,以下为51驱动点阵代码,以作参考
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RCK=P3^6;
sbit SCK=P3^5;
sbit SER=P3^4;
sbit HC=P0^0;
sbit HB=P0^1;
sbit HA=P0^2;
uchar code HEART[8]={0x42,0xe7,0xff,0xff,0xff,0x7e,0x3c,0x18};
uchar code ROW[8]={0xf8,0x3fc,0xfa,0xfe,0xf9,0xfd,0xfb,0xff};
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=113;y>0;y--);
}
void row(uchar r)
{
P0=ROW[r];
}
void indata(uchar DATA)
{
uchar temp,i;
temp=DATA;
for(i=0;i<8;i++)
{
SCK=0;
if(temp&0x80)
SER=1;
else
SER=0;
SCK=1;
temp<<=1;
}
}
void display()
{
uchar i;
for(i=0;i<8;i++)
{
RCK=0;
row(i);
indata(HEART);
RCK=1;
delay(15);
}
}
void main()
{
while(1)
{
display();
}
}
|