1/实验目的、
单个595的使用;掌握时序图的阅读
3个595级联的效果。掌握595级联的特点;
2、接线
51单片机74HC595级联测试proteus_proteus

51单片机74HC595级联测试proteus_proteus_02
//****************************************************************************************************************引脚设置
sbit LEDtestpin=P1^7;
sbit HC595_LATCH = P1^5;//latch pin or rck pin STCP ss 595pin12
sbit datapin=P1^3;
sbit shcp=P1^0;
sbit HC595_OE= P1^1;//oe blank pin 595pin13

3、效果
51单片机74HC595级联测试proteus_51单片机_03
51单片机74HC595级联测试proteus_proteus_04

```c
SendTo595(0x01);SendTo595(0x02);SendTo595(0x03);

HC595_LATCH = 0; //p10
Delay10us(); Delay10us(); Delay10us();
HC595_LATCH =1; //HC595_LATCH上升沿

Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
![在这里插入图片描述](https://img-blog.csdnimg.cn/df11555a6104425788e3d9c1a63c5c0d.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b72a7f17dd3942ddb835ec98d48b3802.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ad2f47a1599d41e9b8b96e2659a39850.png)
分析

```c
#include <reg52.h>
#include <intrins.h>
#include <stdlib.h>
#include <stdio.h>
//***********************************************************************宏定义位显示
#define LongToBin(n) \
(\
((n >> 21) & 0x80) | \
((n >> 18) & 0x40) | \
((n >> 15) & 0x20) | \
((n >> 12) & 0x10) | \
((n >> 9) & 0x08) | \
((n >> 6) & 0x04) | \
((n >> 3) & 0x02) | \
((n ) & 0x01) \
)
#define B(n) LongToBin(0x##n##l)
//*******************************位操作
//取低字节
#define lowByte(w) ((w) & 0xff)
//取高字节
#define highByte(w) ((w) >> 8)
//读一个bit
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
//写一个bit
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
//设置一个bit
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
//清空一个bit
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
//生成相应bit
#define bit(b) (1 << (b))
//******************************************位操作结束

//****************************************************************************************************************引脚设置
sbit LEDtestpin=P1^7;
sbit HC595_LATCH = P1^5;//latch pin or rck pin STCP ss 595pin12
sbit datapin=P1^3;
sbit shcp=P1^0;
sbit HC595_OE= P1^1;//oe blank pin 595pin13


void Delay10us() //@11.0592MHz
{
unsigned char i;
i = 2;
while (--i);
}


void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}

void SendTo595( unsigned char byteData)
{
char i=0;
for(;i<8;i++)
{
datapin = byteData>>7;
byteData= byteData<<1;
shcp = 0;
Delay10us(); Delay10us(); Delay10us();
shcp = 1; //上升沿
}


}

void main()
{

HC595_LATCH =1;
HC595_OE =0;


while(1)
{
//低电平亮
//发送数据,送到数据寄存器,先入后出0x01是最后面的595
SendTo595(0x01);SendTo595(0x02);SendTo595(0x03);
//输出数据,上升沿输出
HC595_LATCH = 0; //p10
Delay10us(); Delay10us(); Delay10us();
HC595_LATCH =1; //HC595_LATCH上升沿

Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();

SendTo595(0xaa);SendTo595(0xbb);SendTo595(0xcc);

HC595_LATCH = 0; //p10
Delay10us(); Delay10us(); Delay10us();
HC595_LATCH =1; //HC595_LATCH上升沿


Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms(); Delay500ms();Delay500ms();Delay500ms();

}

}