74HC595芯片

74HC595是一款八位串行输入并行输出的移位寄存器和锁存器,常用于数码管和点阵屏驱动,节省单片机的I/O资源。芯片包括串行数据输入、移位寄存器时钟、锁存器时钟等引脚,通过特定时序控制数据传输。文章提供了IO口数码管静态显示和继电器驱动的程序示例,展示了74HC595如何扩展单片机的控制能力。
摘要由CSDN通过智能技术生成

74HC595芯片原理

25d4ae4714a1464785fe50be44c07478.jpeg

1:芯片概述

   :八位行输入/串行并进行输出移位寄存器与锁存器3态输出高性能硅栅CMOS,74HC595芯片是在单片机系统中常用的芯片之一,他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片,使用74HC595可以节约单片机的I/O口资源,用3个I/O就可以控制4个数码管显示,以此类推使用几个74HC595就可以控制其数量乘以4的数码管,它还具有一定的驱动能力,所以说74HC595芯片的应用非常广泛

2:引脚功能描述

 a7a72187968e43369ab29afd8c7a2519.png

3:对应的输出引脚

2-FMQ-1(蜂鸣器)    3-JDQ-1(继电器)   4-DSCS(时钟芯片片选)  6-LED-E(流水灯)

这四个输出引脚所对应的十六进制打开值

9179e03843b44b60947afacb40097ca4.png

4:74HC959芯片时序图

abfe6bb05e6b411da022c2c682de2dd4.png

f02a76ebb92d4c679fa75ec5f3154d56.png67a3a5ba83374e9a9aac17e836510a53.png

 先使得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--);

	  
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值