51单片机点阵实验(74HC595)

本文详细介绍了51单片机使用74HC595驱动8x8点阵LED显示的原理和实践,包括74HC595芯片的工作原理、点阵的连接与显示方式,以及如何通过编程实现点阵显示爱心、循环显示和移动效果。同时提到了字模软件的使用,帮助读者绘制和取模自定义图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

51单片机LED点阵实验(74HC595)
使用74HC595 点亮LED 点阵
(以普中开发板为例)

关于74HC595(串转并)

74HC595的原理图

74HC595的原理图如下所示(PS:图中二极管的方向错了)
在这里插入图片描述

HC595芯片的功能:串行输入,并行输出。

各个引脚的功能在这里插入图片描述

看如何给芯片接线,并使用:(注:引脚上加一个“非横线”,表示低有效)

1、D0~D7,并行输出,接LED。
2、16号和8号引脚,分别接Vcc,Gnd。
3、OE,13号引脚,低电平才输出有效,让它接地。
4、10号引脚,主复位引脚,低有效。目前不需要复位,直接接VCC就好.
5、14号引脚SER,接在集成板的P3^4,为串行输入端。
6、11号引脚SRCLK,接在集成板的P3^6;上升沿时,将串行口RCLK的一位,移位输入。
7、12号引脚RCLK,接在集成板的P3^5;上升沿时,将移入的8位数据,送到存储寄存器。

高位在这里插入图片描述注释:SDI先发送高位,在发送低位,高位发送到对应的Q管脚的相应位置,每一次的发送为伴随着一个上升沿。

上面的只是使用方法,如果还想继续深究,可以查看数电当中的串并行输入输出。

关于点阵

点阵的实际原理图

在这里插入图片描述
(列的标号从上到下依次为为1-7,行的标号从左到右依次为a-h)

8*8 点阵共由 64 个发光二极管组成,且每个发光二极管是放置在行线和列线
的交叉点上,当对应的某一行置 1 电平,某一列置 0 电平,则相应的二极管就亮;
如要将第一个点点亮,则 1 脚接高电平 a 脚接低电平,则第一个点就亮了;如果
要将第一行点亮,则第 1 脚要接高电平,而(a、b、c、d、e、f、g、h )这些
引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第 a 脚接低电平,
而(1、2、3、4、5、6、7、8)接高电平,那么第一列就会点亮。

在这里插入图片描述

代码


#include <reg51.h>		 //此文件中定义了单片机的一些特殊功能寄存器
#include <intrins.h>

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

//--定义使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit LED=P0^7;
                                                 /* 函 数 名         : Hc595SendByte(u8 dat1,u8 dat2)
                                                  * 函数功能		   : 通过595发送2个字节的数据
                                                  * 输    入         : dat1:第2个595输出数值
                                                  *                  * dat2: 第1个595输出数值
                                                  * 输    出         : 无
                                                  **************************/
void Hc595SendByte(u8 dat)               // 调用函数SendByte
{
   
   
	u8 a;

	SRCLK = 1;
	RCLK = 1;

	

	for(a=0;a<8;a++)		 //发送8位数
	{
   
   
		SER = dat >> 7;		 //从最高位开始发送
		dat <<= 1;          

		SRCLK = 0;			 //发送时序
		_nop_();           //调用nop函数,进行一个机器周期的延时
		_nop_();            // 延时两个机器周期
		SRCLK = 0;	        //初始化SRCLK,重回低电平,为下一个上升沿输入做准备
	}

	RCLK = 0;             //RCLK从0到1,上升沿到达,输出前面接收的段码数据
	_nop_();
	_nop_();
	RCLK = 1;             //初始化RCLK,重回低电平,为下一个上升沿输出做准备
}


void main()
{
   
   	
	
	Hc595SendByte(0x01);  		// 0000 0001
	
       P0= 0X7F ;              // 0111 1111
      while(1)	;
}

实物展示略

用点阵显示爱心

代码:
(实现的是空心的爱心,代码来自网络)

#include "reg51.h"    //注意这里使用“reg52.h"可能会出现重复定义错误,因为52.h中已定义过RCLK
#include<intrins.h>
typedef unsigned int u16;	 
typedef unsigned char u8;
sbit SRCLK=P3^6
### 51单片机配合74HC595驱动点阵屏的实现 使用51单片机74HC595驱动点阵屏是嵌入式系统开发中的一个常见应用。以下将详细介绍其实现方法,包括硬件连接、软件编程以及示例代码。 #### 硬件设计 在硬件方面,需要通过74HC595移位寄存器来控制LED点阵屏的行和列。74HC595是一种8位串行输入并行输出的移位寄存器,具有锁存功能,可以用来扩展单片机的I/O口[^1]。 - **行控制**:通常使用一个74HC595控制LED点阵屏的行信号。 - **列控制**:另一个74HC595用于控制LED点阵屏的列信号。 #### 软件设计 在软件设计中,主要任务是通过单片机74HC595发送数据,并控制其锁存时钟以刷新显示内容。以下是关键步骤: 1. 初始化单片机引脚与74HC595的连接。 2. 编写函数以向74HC595发送数据。 3. 控制扫描频率以实现动态显示效果。 #### 示例代码 以下是一个完整的示例代码,展示如何使用51单片机74HC595驱动点阵屏: ```c #include "reg52.h" sbit SER = P3^4; // 74HC595串行数据输入引脚 sbit RCLK_595 = P3^5; // 74HC595的锁存时钟引脚 sbit SRCLK = P3^6; // 74HC595的移位时钟引脚 // 向74HC595发送数据的函数 void send_to_74hc595(unsigned char data) { unsigned char i; for (i = 0; i < 8; i++) { SER = (data >> (7 - i)) & 0x01; // 发送每一位数据 SRCLK = 0; // 下降沿无效 SRCLK = 1; // 上升沿有效,进行一次数据移入 } } // 刷新74HC595的显示 void refresh_74hc595() { RCLK_595 = 0; // 锁存时钟下降沿 RCLK_595 = 1; // 锁存时钟上升沿,更新输出 } // 主函数 void main(void) { unsigned char row_data = 0x01; // 行数据 unsigned char col_data = 0x00; // 列数据 unsigned char i; while (1) { for (i = 0; i < 8; i++) { // 遍历每一行 send_to_74hc595(row_data); // 发送行数据 send_to_74hc595(col_data); // 发送列数据 refresh_74hc595(); // 刷新显示 row_data = row_data << 1; // 移动到下一行 delay(10); // 延时 } } } ``` #### 动态显示原理 动态显示的核心在于快速切换LED点阵屏的行和列信号,使得人眼无法察觉闪烁,从而形成稳定的图像。通过单片机控制74HC595的输出,逐行点亮LED点阵屏的不同部分,最终实现完整的显示效果[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值