单片机学习 8-LED点阵实验

LED点阵实验

LED点阵介绍

​ LED 点阵是由发光二极管排列组成的显示器件,在我们日常生活的电器中随处可见,被广泛应用于汽车报站器,广告屏等。如下所示:

在这里插入图片描述

​ 通常应用较多的是 88 点阵,然后使用多个 88 点阵可组成不同分辨率的 LED点阵显示屏,比如 16* 16 点阵可以使用 4 个 8* 8 点阵构成。因此理解了 8 * 8LED点阵的工作原理,其他分辨率的 LED 点阵显示屏都是一样的。这里以 8* 8LED 点阵来做介绍。其内部结构图如下所示:

在这里插入图片描述

​ 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)接高电平,那么第一列就会点亮。由此可见,LED点阵的使用也是非常简单的。

硬件设计

A2-A4开发板:

在这里插入图片描述

A5-A7开发板:

A5:

在这里插入图片描述

​ 如果选择A5-A7开发板,连线可以自由连线,如A5中的74HC595既可以连接J34从而控制点阵的行,P0端口连接J6-245芯片再连接列;也可以连接J6-245芯片从而控制点阵的列,P0端口连接J34从控制行。

A6:

在这里插入图片描述

A7:

在这里插入图片描述

在这里插入图片描述

软件编程

点亮一个灯

在这里插入图片描述

如点亮灯一,按照A2-A4开发板设计

在这里插入图片描述

代码
#include"reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK=P3^6;
sbit rCLK=P3^5;//RCLK c51内已经定义过了,避免重定义,所以定义为rCLK
sbit SER=P3^4;

#define LEDDZ_COL_PORT	P0

void delay_1ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);//注意分号
}
void delay_10us(u16 ten_us)
{
		while(ten_us--);
}

//HC595发送数据函数
void hc595_write_data(u8 dat)
{
		u8 i=0;
		for(i=0;i<8;i++)
		{
				SER=dat>>7;
				dat<<=1; //dat=dat<<1
				SRCLK=0;			//设置时钟脉冲
				delay_10us(1);//设置持续时间
				SRCLK=1;
				delay_10us(1);		
		}
		rCLK=0;
		delay_10us(1);
		rCLK=1;
}

void main()
{
		LEDDZ_COL_PORT=0x7f;
		while(1)
		{
				hc595_write_data(0x80);
		}
}
实验现象

请添加图片描述

显示数字

代码
#include"reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK=P3^6;
sbit rCLK=P3^5;//RCLK c51内已经定义过了,避免重定义,所以定义为rCLK
sbit SER=P3^4;

#define LEDDZ_COL_PORT	P0

u8 gled_row[8]={0x00,0x3C,0x42,0x81,0x81,0x42,0x3C,0x00};//LED点阵显示数字0
u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay_1ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);//注意分号
}
void delay_10us(u16 ten_us)
{
		while(ten_us--);
}

//HC595发送数据函数
void hc595_write_data(u8 dat)
{
		u8 i=0;
		for(i=0;i<8;i++)
		{
				SER=dat>>7;
				dat<<=1; //dat=dat<<1
				SRCLK=0;			//设置时钟脉冲
				delay_10us(1);//设置持续时间
				SRCLK=1;
				delay_10us(1);		
		}
		rCLK=0;
		delay_10us(1);
		rCLK=1;
}

void main()
{
		u8 i=0;
		while(1)
		{
			for(i=0;i<8;i++){
				LEDDZ_COL_PORT=gled_col[i];
				hc595_write_data(gled_row[i]);
				delay_1ms(1);//延时
				hc595_write_data(0x00);
			}
		}
}
实验现象

请添加图片描述

显示图像

取模软件使用

​ 取模软件不仅可以用来取汉字、数字等字符数据,还可以用来取图像数据,这里以“心”形图像为例,教大家如何使用该软件来获取图像数据。
(1)新建图像。弹出选择框,开发板 LED 点阵是 8X8 的,就建一个高 8 宽8 的。

在这里插入图片描述

(2)选中图像需用格点。这里每一个格点代表一个 LED 灯,点击可选中,再次点击也可取消。在界面上点出爱心。如下图:

在这里插入图片描述
在这里插入图片描述

(3)参数设置。“参数设置” 选项中有许多可选项,可以自己进行设置,得到自己想要的结果。可参考前面取模里面的设置。如下所示:
在这里插入图片描述

(4)生成数据。设计好图案和参数以后,就需要生成可用数据。当点击格式以后会出现相应数据。如下图所示:
在这里插入图片描述

​ 这里将生成的图形数据复制出来粘贴到例程中,替换数字 0 的数据,如下:
u8 gled_row[8]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38};//LED 点阵
显示图像的行数据其余代码与显示数字完全一样,这里就不再列出。

代码
#include"reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK=P3^6;
sbit rCLK=P3^5;//RCLK c51内已经定义过了,避免重定义,所以定义为rCLK
sbit SER=P3^4;

#define LEDDZ_COL_PORT	P0

u8 gled_row[8]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38};//LED点阵显示爱心
u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay_1ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);//注意分号
}
void delay_10us(u16 ten_us)
{
		while(ten_us--);
}

//HC595发送数据函数
void hc595_write_data(u8 dat)
{
		u8 i=0;
		for(i=0;i<8;i++)
		{
				SER=dat>>7;
				dat<<=1; //dat=dat<<1
				SRCLK=0;			//设置时钟脉冲
				delay_10us(1);//设置持续时间
				SRCLK=1;
				delay_10us(1);		
		}
		rCLK=0;
		delay_10us(1);
		rCLK=1;
}

void main()
{
		u8 i=0;
		while(1)
		{
			for(i=0;i<8;i++){
				LEDDZ_COL_PORT=gled_col[i];
				hc595_write_data(gled_row[i]);
				delay_1ms(1);//延时
				hc595_write_data(0x00);
			}
		}
}
实验现象

请添加图片描述

显示汉字

代码
#include"reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK=P3^6;
sbit rCLK=P3^5;//RCLK c51内已经定义过了,避免重定义,所以定义为rCLK
sbit SER=P3^4;

#define LEDDZ_COL_PORT	P0

u8 gled_row[7][8]={{0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38},{0x25,0xFF,0x2A,0x85,0x9A,0xBC,0xD1,0x1E},
{0x25,0xFF,0x2A,0x85,0x9A,0xBC,0xD1,0x1E},{0x7F,0xC9,0x49,0x7F,0x20,0xC8,0x41,0x7F},
{0x00,0x08,0x10,0x01,0xFF,0x00,0x10,0x08},{0x61,0x55,0x55,0xDF,0x55,0x57,0x61,0x00},
{0x61,0x55,0x55,0xDF,0x55,0x57,0x61,0x00}};//LED点阵依次显示图像

u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay_1ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);//注意分号
}
void delay_10us(u16 ten_us)
{
		while(ten_us--);
}

//HC595发送数据函数
void hc595_write_data(u8 dat)
{
		u8 i=0;
		for(i=0;i<8;i++)
		{
				SER=dat>>7;
				dat<<=1; //dat=dat<<1
				SRCLK=0;			//设置时钟脉冲
				delay_10us(1);//设置持续时间
				SRCLK=1;
				delay_10us(1);		
		}
		rCLK=0;
		delay_10us(1);
		rCLK=1;
}

void main()
{		
		u16 k=100;
		u8 i=0,j=0;
		while(1)
		{
			for(j=0;j<7;j++){
			while(k--){//循环一次需要8ms,则k=100时,一个数字显示0.04秒
			for(i=0;i<8;i++){
				LEDDZ_COL_PORT=gled_col[i];
				hc595_write_data(gled_row[j][i]);
				delay_10us(5);//延时0.05ms
				hc595_write_data(0x00);
			}
		}
			  delay_1ms(500);//延时500ms
				k=100;
		
		}
	}
}

实验现象

请添加图片描述

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现8*8 LED点阵的滚动显示数字,可以参考以下步骤: 1. 首先,准备一个8*8的LED点阵屏幕,并确保它可以正常连接到你的单片机开发板上。 2. 确定你使用的单片机开发板的编程语言和开发环境,例如使用51单片机和Proteus仿真软件。 3. 在程序中定义一个包含数字1、2和3的数组。 4. 使用循环来遍历数组中的每个数字,并将数字的对应LED点亮。 5. 为了实现滚动显示效果,可以使用延时函数来控制每个数字显示的时间,并在每次显示后清除之前的LED状态。 6. 重复以上步骤,直到显示完所有的数字。 以上步骤可以参考引用[1]中的8*8 LED点阵实验和引用中的Proteus仿真演示,它们提供了实现8*8 LED点阵滚动显示数字的具体示例和演示。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [西电网信院微机原理实验(八)](https://blog.csdn.net/qq_47912072/article/details/113387806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【Proteus仿真】8×8LED点阵屏仿电梯数字滚动显示](https://blog.csdn.net/weixin_42880082/article/details/125585252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [51单片机Proteus仿真实例 8×8LED点阵屏仿电梯数字滚动显示](https://download.csdn.net/download/Sapphire521/85436866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

竹烟淮雨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值