003_IO 扩展(串转并)-74HC595

LED 流水灯到动态数码管显示,可以看到这些外围设备已经占据了很多的 IO 口,而 51单片机 IO 口非常有限,如果想要连接更多外围设备,此时可以通过 IO 扩展来实现。

一种 IO 口扩展方式-串转并,使用的芯片是 74HC595。开发板板载 1 个 74HC595 芯片,仅需单片机 3 个 IO 口即可扩展 8 个,如果需要还可以将 2 个 74HC595 级联扩展出 16 个 IO,这就实现用少数 IO 资源控制多个设备。

74HC595 芯片介绍

74HC595 是一个 8 位串行输入、并行输出的位移缓存器,其中并行输出为三态输出(即高电平、低电平和高阻抗)。芯片管脚及功能说明如下:
在这里插入图片描述
上面两张都是 74HC595 芯片管脚图,细心的朋友就会发现左侧的 1 脚是 QB,而右侧芯片的 1 脚是 Q1,左侧芯片的 11 脚是 SCK,而右侧芯片的 11 脚是 SH_CP,还有很多其他管脚不一样,其实这个都没有什么,每个人在绘制芯片管脚图时命名可能不一样而已,看一个芯片重点是管脚功能。

15 和 1 到 7 脚 QA–QH:并行数据输出
9 脚 QH 非:串行数据输出
10 脚 SCLK 非( MR) : 低电平复位引脚
11 脚 SCK( SHCP) : 移位寄存器时钟输入
12 脚 RCK( STCP) : 存储寄存器时钟输入
13 脚 G 非( OE): 输出有效
14 脚 SER( DS) : 串行数据输入

74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是单独的时钟。数据在 SCK 的上升沿输入,在 RCK 的上升沿进入到存储器中。如果两个时钟连在一起,则移位寄存器总是比存储器早一个脉冲。移位寄存器有一个串行输入(DS),和一个串行输出(Q7 非),和一个异步的低电平复位,存储寄存器有一个并行 8 位的,具有三态的总线输出,当 MR 为高电平,OE 为低电平时,数据在 SHCP 上升沿进入移位寄存器,在 STCP 上升沿输出到并行端口。

本实验使用到硬件资源如下:
(1)8*8LED 点阵模块
(2)74HC595 模块

开发板上的 74HC595 模块电路如下图所示:
在这里插入图片描述
从上图中可以看出,74HC595 需要用到的控制管脚 SER、RCLK、SRCLK 直接连接到 51 单片机的 P3.4-P3.6 IO 口上,输出端则是直接连接到 LED 点阵模块的行端口上,即为 LED 发光二极管的阳极,LED 点阵的列则为发光二极管的阴极。要想控制 LED 点阵,可以将单片机管脚按照 74HC595 芯片的通信时序要求来传输数据,这样即可控制 LED 点阵的行数据。根据 LED 发光二极管导通原理,当阳极为高电平,阴极为低电平则点亮,否则熄灭。因此通过单片机 P0 口可控制点阵列,74HC595 可控制点阵行。

通过 74HC595 模块控制 LED 点阵以一行循环滚动显示:

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

//定义 74HC595 控制管脚
sbit SRCLK = P3^6; 	//移位寄存器时钟输入
sbit RCLK_2  = P3^5; 	//存储寄存器时钟输入
sbit SER   = P3^4; 	//串行数据输入

#define LED_COL_PORT P0

void delay(u16 us)
{
    
    
	while(us--);
}

void hc_74_595_write(u8 dat)
{
    
    
	//dat 一个字节  分八次传输(移位寄存器每次只能移动一位);
	u8 i = 0;
	LED_COL_PORT=0x00;
	for (i=0; i < 8; i++)
	{
    
    
		SER = dat >> 7;  //得到最高位
		dat <<= 1;       //次高位左移到最高位
		SRCLK = 0;
		delay(1);  //10us
		SRCLK = 1;
		delay(1);  //10us
	}
	RCLK_2 = 0;
	delay(1);
	RCLK_2 = 1;
}

void main()
{
    
    
	u8 j;
	u8 dat[8] = {
    
    0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
	while(1)
	{
    
    
		for(j = 0;j < 8;j++)
		{
    
    
			hc_74_595_write(0x00);//消除前面寄存器缓存数据
			hc_74_595_write(dat[j]);
			delay(50000);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42581177/article/details/127822264
今日推荐