关于74HC595资料详细资料见百度百科:https://baike.baidu.com/item/74HC595/9886491?fr=aladdin
我主要是介绍在普中HC6800EM3 V2.0中的HC595的用法。
(其中13脚接地,12脚-存储寄存器接P3^5,11脚-位移寄存器接P3^6,10脚接VCC,14脚-串行输入接P3^4)
数据是从14脚一位一位输入的,当输入一个字节之后应该控制11脚出现一个上升沿(有一个高电平,一个低电平,两者之间间隔一定的时间),这样输入的位就会往后移一位
(形象的例子可见链接https://blog.csdn.net/jbh18401/article/details/75334562)
,当输入够了两个字节的时候,控制12脚输入一个上升沿(方法同上),这时的数据就放在了输出端。
从网上找到的比较方便理解的51控制程序:
#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
/**********函数声明********************/
void SendTo595(uchar byteData);
/***********************************/
sbit SER = P3^4; //p3.4脚控制串行数据输入
sbit SCK = P3^6; //串行输入时钟
sbit RCK = P3^5; //存储寄存器时钟
void main()
{
SendTo595(85); //85的二进制:0101 0101
while(1);
}
//功能:发送一个字节的数据给595,再并行输出
void SendTo595(uchar byteData)
{
char i=0;
for(;i<8;i++)
{
SER = byteData>>7; //大家自己考量这2句
byteData= byteData<<1;
SCK = 1; //上升沿,让串行输入时钟变为高电平,并延时2个时钟周期
_nop_();
_nop_();
SCK = 0; //变为低电平,为下次准备
}
/*位移寄存器数据准备完毕,转移到存储寄存器*/
RCK = 1; //上升沿,让存储寄存器时钟变为高电平,并延时2个时钟周期
_nop_();
_nop_();
RCK = 0;
}