【51单片机】74HC595芯片实现单片机 IO 扩展(串转并)和 LED点阵实验

橙色

单片机 IO 扩展(串转并)

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

本章所要实现的功能是: 通过 74HC595 模块控制 LED 点阵以一行循环滚动显示。

为什么不直接通过51单片机的引脚来驱动LED矩阵呢?最重要的一点就是,通过74HC595芯片控制LED矩阵可以大大减少所需的引脚数量。74HC595是一个串行输入、并行输出的移位寄存器,使用三个引脚(时钟、数据、锁存)即可控制多个输出引脚。

74HC595 芯片介绍

74HC595 是一个 8 位串行输入、 并行输出的位移缓存器, 其中并行输出为三态输出(即高电平、 低电平和高阻抗) 。芯片管脚及功能说明如下:
在这里插入图片描述

不同人绘制芯片管脚图时可能命名不一样,但这没什么,主要是看芯片的管脚功能

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

移位寄存器 (Shift Register):1、移位寄存器用于接收串行输入数据。数据通过一个引脚(通常是DS或SER)以位的形式输入芯片,按照顺序存储在移位寄存器中。通过时钟信号(通常是SHCP或SCK)的边沿触发,数据从输入端串行地移入寄存器。2、当新的数据输入时,原有数据会向左移位,为新的数据腾出空间。这种移位的过程可以持续进行,直到将所有位的数据加载到寄存器中。
存储寄存器 (Storage Register):1、存储寄存器用于存储移位寄存器中的数据,并在需要时并行输出到多个引脚。存储寄存器的更新是通过时钟信号(通常是STCP或RCK)的边沿触发的。当时钟信号触发时,移位寄存器中的数据被复制到存储寄存器中。2、存储寄存器的输出通过并行输出引脚(通常是Q0至Q7)完成。每个输出引脚对应存储寄存器中的一个位,它们可以设置为高电平、低电平或高阻抗状态。

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

硬件设计

本文使用到硬件资源如下:
(1) 8X8LED 点阵模块
(2) 74HC595 模块

在这里插入图片描述

从上图中可以看出, 74HC595 需要用到的控制管脚 SER、 RCLK、 SRCLK (14、12、11管脚)直接连接到 51 单片机的 P3.4-P3.6 IO 口上, 输出端则是直接连接到 LED 点阵模块的行端口上, 即为 LED 发光二极管的阳极, LED 点阵的列则为发光二极管的阴极。

要想控制 LED 点阵, 可以将单片机管脚按照 74HC595 芯片的通信时序要求来传输数据, 这样即可控制 LED 点阵的行数据。 根据 LED 发光二极管导通原理, 当阳极为高电平, 阴极为低电平则点亮, 否则熄灭。 因此通过单片机 P0 口可控制点阵列, 74HC595 可控制点阵行。

软件实验

本章所要实现的功能是: 通过 74HC595 模块控制 LED 点阵以一行循环滚动显示。

#include "reg51.h"

typedef unsigned int u16;	//对系统默认数据类型进行重定义
typedef unsigned char u8;

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

#define LEDDZ_COL_PORT	P0	//点阵列控制端口

//0x01: 00000001  0x02: 00000010  0x04: 00000100
u8 ghc595_buf[8]={
   
   0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/*******************************************************************************
* 函 数 名       : delay_10us
* 函数功能		 : 延时函数,ten_us=1时,大约延时10us
* 输    入       : ten_us
* 输    出    	 : 无
*******************************************************************************/
void delay_10us(u16 ten_us)
{
   
   
	while(ten_us--);	
}

/*******************************************************************************
* 函 数 名       : delay_ms
* 函数功能		 : ms延时函数,ms=1时,大约延时1ms
* 输    入       : ten_us
* 输    出    	 : 无
*******************************************************************************/
void delay_ms(u16 ms)
{
   
   
	u16 i,j;
	for(i=ms;i>
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的小马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值