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

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

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 
  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一个基于 74HC595 的 16x16 点阵驱动程序,适用于 51 单片机。需要注意的是,这个程序只是提供一个基本的框架,具体的点阵显示内容需要根据实际需求编写。 ```c #include <reg51.h> #define LATCH P1_0 // 数据锁存引脚 #define CLK P1_1 // 时钟引脚 #define DATA P1_2 // 数据引脚 unsigned char code font16x16[] = { // 16x16 点阵字体库 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 空格 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xFE,0x7C,0x00,0x00,0x00,0x00,0x00,0x00, // ! 0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x00,0x00,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00, // " // 其他字符 }; void writeByte(unsigned char byte) { // 向 74HC595 写入一个字节 unsigned char i; for (i = 0; i < 8; i++) { CLK = 0; DATA = (byte & 0x80) >> 7; byte <<= 1; CLK = 1; } } void writeMatrix(unsigned char *matrix) { // 显示一个 16x16 的点阵 unsigned char row, col; for (row = 0; row < 16; row++) { LATCH = 0; writeByte(1 << row); writeByte(matrix[row]); LATCH = 1; for (col = 0; col < 10; col++); // 稍微延时一下 } } void main() { unsigned char matrix[16] = { 0 }; // 初始化一个空的 16x16 点阵 unsigned char i; for (i = 0; i < 16; i++) { matrix[i] = font16x16[i]; // 将字体库的第一行复制到点阵中 } while (1) { writeMatrix(matrix); // 不断刷新点阵 } } ``` 以上代码中,`writeByte` 函数用于向 74HC595 中写入一个字节,`writeMatrix` 函数用于将一个 16x16 的点阵显示出来。在 `main` 函数中,我们初始化了一个空的点阵,并将字体库的第一行复制到其中。在循环中,不断刷新点阵,实现动态显示的效果。 需要注意的是,这个程序中的延时是通过一个空循环实现的,实际情况下需要根据硬件和需求进行调整。另外,如果需要显示中文或其他非 ASCII 字符,需要将字体库进行相应的修改。 ### 回答2: 74HC595是一种8位移位寄存器,通常用于扩展微控制器的输出引脚。而16×16点阵则是由16行和16列的LED组成的显示器,可以显示文字、图形等信息。在51单片机中使用74HC595和16×16点阵,可以通过为单片机的输出引脚提供数据,控制点阵显示不同的图案或文字。 首先,设置单片机的输出引脚与74HC595的串行数据输入(DS)、时钟输入(SHCP)和存储器锁存输入(STCP)进行连接。通过向74HC595的DS输入引脚依次输入各个LED的状态数据,然后通过触发SHCP时钟输入引脚,逐位地将数据移位至寄存器中。当所有数据位都移入寄存器后,通过触发STCP存储器锁存输入引脚,将寄存器中的数据同时输出到74HC595的并行输出引脚(Q0~Q7)。由于74HC595只有8个并行输出引脚,因此需要使用多个74HC595进行扩展,将输出引脚与相应的点阵行或列控制引脚相连。 接下来,设置单片机的输出引脚与16×16点阵的行(A~P)和列(1~16)进行连接。通过控制单片机输出引脚的高低电平,可以控制点阵的行和列的选通状态。例如,当需要选通第1行第1列的LED时,将第1行对应的控制引脚置为低电平,同时将第1列对应的控制引脚置为高电平;当需要选通第1行第2列的LED时,将第1行对应的控制引脚置为低电平,同时将第2列对应的控制引脚置为高电平,以此类推。 通过编写适当的程序,可以实现对点阵的控制。例如,可以将字模数据保存在单片机中,然后根据需要从单片机中读取字模数据,并依次输出到74HC595中,通过控制点阵的行和列的选通状态,实现相应的字符或图形的显示。 总之,通过使用74HC595和16×16点阵,结合51单片机编程,可以实现对点阵的控制,显示不同的图案或文字。 ### 回答3: 74HC595是一款数字集成电路芯片,可用来扩展输出IO口。它具有串行输入和并行输出的特点,常用于驱动点阵显示器。 要使用74HC595驱动16×16点阵,首先需要连接芯片与单片机。通过单片机的IO口,将数据、时钟和锁存信号分别连接到74HC595的串行数据输入(DS)、时钟输入(SHCP)和存储锁存器时钟(STCP)。同时接地端接地,VCC端接单片机的电源,并连接合适的限流电阻。 通过单片机的程序,可以实现点阵的控制。首先要定义一个长为32的数组,用于存储点阵的数据。每16位代表一行的数据,共有16行,通过对数组的操作,可以实现打开、关闭或改变点阵上的每个像素点的状态。 然后,在程序中使用循环语句对每一行进行操作。通过使74HC595的串行数据输入(DS)引脚为低电平,然后逐位移位将要显示的数据输入到74HC595中。接着,给74HC595的存储锁存器时钟(STCP)引脚一个上升沿信号,将数据锁存到输出寄存器中。最后,通过给74HC595的输出引脚连接到点阵的对应引脚,可以实现点阵的控制。 通过重复上述操作,可以实现对16×16点阵的控制。在程序中可以通过改变数组中每个元素的值,实现点阵的显示效果,例如实现一些图案、动画等。 总之,使用74HC595驱动16×16点阵,可以通过单片机的程序实现对点阵的控制,在点阵上显示出想要的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值