LED点阵屏


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


点阵屏的介绍

按像素一般使用8的倍数,因为一个字节8位,可以充分利用内存
在这里插入图片描述

显示原理

大致与数码管一致,都是通过高速扫描来达到每个LED独立显示的效果。
在这里插入图片描述

官方原理图

可以看出P0口控制列、阴极,DP口控制行、阳极。
在这里插入图片描述
与74HC595模块相连

74HC595介绍

在这里插入图片描述
引脚解释
OE output enable,引脚使能,给低电平是74HC595可以输出
RCLK register clock,寄存器时钟
SRCLR 串行清空
SRCLK 串行时钟
SER 串行数据
QH’ 用于级联

74HC595的运行原理

在这里插入图片描述

介绍51单片机的sfr、sbit

sfr:声明寄存器所在地址
sbit: 对寄存器的单个位进行声明
在这里插入图片描述

实列

1.使用点阵实现笑脸

首先使用74HC595选择行实现,然后通过选择列来进行扫描,具体实现如下:

#include <REGX52.H>
#include "Delay.h"

// 重命名,方便了解功能
sbit _RCLK = P3^5; 	//RCLK
sbit _SRCLK = P3^6;	//SRCLK
sbit _SER = P3^4;	//SER

// 写入数据	,用于选择LED点阵屏的行
void _74HC595_WriteByte(unsigned char Data){
	unsigned char i;
	// 非0时结果就为1
	for(i = 0;i<8;i++){
		// 非0时结果就为1
		_SER = Data & (0x80>>i);	// 可以得到第i位是否为0
		_SRCLK = 1;				// 上升沿,使数据移位
		_SRCLK = 0;				// 复位
	}
	_RCLK = 1;					// 输出数据
}

// 显示
void MatrixLED_Show(unsigned char Col,Data){
	// RCLK归0,下次才能上升沿写入
	_RCLK = 0;
	_74HC595_WriteByte(Data);	// row
	P0 = ~(0X80>>Col);			// 选第几列第几行列赋
	// 和数码管一样也需要进行消影操作
	// Delayms(1); 由于1ms还是太长会导致闪烁,所以换个更短的延时函数
	Delay100us();  // 如果不延时会导致灯光暗淡
	P0 = 0xff;	 	
}

void main(){
	_SRCLK = 0;
	_RCLK = 0;	
	
	while(1){
		MatrixLED_Show(0,0x3c);
		MatrixLED_Show(1,0x42);
		MatrixLED_Show(2,0xa9);
		MatrixLED_Show(3,0x85);
		MatrixLED_Show(4,0x85);
		MatrixLED_Show(5,0xa9);
		MatrixLED_Show(6,0x42);
		MatrixLED_Show(7,0x3c);	
	}
}

要注意的是行从低位到高位是从右往左,列从低位到高位是从下往上

使用点阵屏实现动画

思路是用数组存放要实现的图案,然后使用下标取数据,通过下标+偏移量实现动画。具体实现如下:

#include <REGX52.H>
#include "MatrixLED.h"
 
//动画数据
unsigned char Data[]=
	{
	0X00,0X00,0X00,0X00,0X00,
	0x21,0x3f,0x21,     //I
	0x00,0x18,0x24,0x22,0x11,0x22,0x24,0x18,//爱心
	0x00,0x3f,0x01,0x01,0x3f, //U
	0X00,0X00,0X00,0X00,0X00,
  };
 
void main()
{
	unsigned char i,Offset=0,Count=0;//偏移量Offset
	MatrixLED_Init(); //初始化
	while(1)
	{
		for(i=0;i<8;i++)	
		{
			MatrixLED_Show(i,Data[i+Offset]);
		}
		Count++;
		//计次延时,使用Delay的话会影响显示			
		if(Count>40) 
		{
			Count=0;
			Offset+=1;		
			if(Offset>18)//当超过数组的范围时偏移量清零
			{
				Offset=0;
			}
		}
	}
}
 

注意:offset+剩余数组长度 不能超过 点阵显示的长度,不然会造成显示错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值