74HC595芯片原理
1:芯片概述
:八位行输入/串行并进行输出移位寄存器与锁存器3态输出高性能硅栅CMOS,74HC595芯片是在单片机系统中常用的芯片之一,他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片,使用74HC595可以节约单片机的I/O口资源,用3个I/O就可以控制4个数码管显示,以此类推使用几个74HC595就可以控制其数量乘以4的数码管,它还具有一定的驱动能力,所以说74HC595芯片的应用非常广泛
2:引脚功能描述
3:对应的输出引脚
2-FMQ-1(蜂鸣器) 3-JDQ-1(继电器) 4-DSCS(时钟芯片片选) 6-LED-E(流水灯)
这四个输出引脚所对应的十六进制打开值
4:74HC959芯片时序图
先使得RESET为高电平,当输入一个值时,当SHIFT CLOCK有时钟上沿(就是有个低电平到高电平的转换),还要有当LATCH所连接的LATCH CLOCK有时钟上沿且所连接的OUTPUT ENABLE为低电平才能使得输入的值和我们输出的值一样
74HC595芯片的应用
1:IO口数码管静态显示
#include<reg52.h>
sbit duanxuan=P2^5;//数码管驱动芯片74Hc573段选
sbit wiexuan=P2^6;//数码管驱动芯片74Hc573位选
sbit DATA_A_595 = P1^0; //74HC595 串行数据输入引脚
sbit SHIFT_CLOCK_595 = P1^4; //74HC595 移位寄存器时钟信号输入引脚
sbit LATCH_CLOCK_595 = P2^3; //74HC595 锁存器时钟信号输入引脚
typedef signed char int8; //8位有符号字符型
typedef signed int int16; //16位有符号整型
typedef signed long int32; //32位有符号长整型
typedef unsigned char uint8; //8位无符号字符型
typedef unsigned int uint16; //16位无符号整型
typedef unsigned long uint32; //32位无符号长整型
void main(void)
{
while(1)
{
duanxuan=0;
wiexuan=0;
P0=0xc0;//数码管段码显示0
duanxuan=1;//段选
duanxuan=0;
duanxuan=0;
wiexuan=0;
P0=0x01;//数码管段码显示0
wiexuan=1;
wiexuan=0;
}
}
void write_byte_74hc595(uint8 dat) //给595芯片写一字节数据函数
{
uint8 i;
for(i=0;i<8;i++)
{
DATA_A_595 =(dat<<i)&0x80; //74HC595 串行数据输入引脚
SHIFT_CLOCK_595 = 0; //74HC595 移位寄存器时钟信号输入引脚
SHIFT_CLOCK_595 = 1; //74HC595 移位寄存器时钟信号输入引脚
}
LATCH_CLOCK_595 = 0; //74HC595 锁存器时钟信号输入引脚
LATCH_CLOCK_595 = 1; //74HC595 锁存器时钟信号输入引脚
}
void delay(uint16 x_ms) //延迟 x_ms*1 毫秒
{
uint16 i,j;
for(i=x_ms;i>0;i--)
for(j=114;j>0;j--);
}
2:IO口输出之继电器
注释了的几行代码是跳过74HC595芯片来驱动继电器
剩余的代码是通过74HC595芯片来驱动继电器
#include<reg52.h>
typedef signed char int8; //8位有符号字符型
typedef signed int int16; //16位有符号整型
typedef signed long int32; //32位有符号长整型
typedef unsigned char uint8; //8位无符号字符型
typedef unsigned int uint16; //16位无符号整型
typedef unsigned long uint32; //32位无符号长整型
sbit jdq=P2^0;//继电器IO口
sbit DATA_A_595 = P1^0; //74HC595 串行数据输入引脚
sbit SHIFT_CLOCK_595 = P1^4; //74HC595 移位寄存器时钟信号输入引脚
sbit LATCH_CLOCK_595 = P2^3; //74HC595 锁存器时钟信号输入引脚
void delay(uint16 x_ms);
void write_byte74hc595(uint8 dat);
void main()
{
while(1)
{
//方法一 跳过595芯片 直接io口驱动
// jdq=1;//继电器IO口
// delay(1000);
// jdq=0;
// delay(1000);
//方法二595芯片驱动
write_byte74hc595(0x08);//继电器输入高电平工作 0x0B和蜂鸣器
delay(1000);
write_byte74hc595(0x00);//继电器输入低电平停止
delay(1000);
}
}
void write_byte74hc595(uint8 dat)
{
uint8 i;
for(i=0;i<8;i++)
{
DATA_A_595=(dat<<8)&0x80 ;
SHIFT_CLOCK_595 =0;
SHIFT_CLOCK_595 =1;
}
LATCH_CLOCK_595 =0;
LATCH_CLOCK_595 =1;
}
void delay(uint16 x_ms) //延迟 x_ms*1 毫秒
{
uint16 i,j;
for(i=x_ms;i>0;i--)
for(j=114;j>0;j--);
}