Arduino程序设计(十)8×8 LED点阵显示(MAX7219)

news2024/11/24 18:38:59

8×8 LED点阵显示

  • 前言
  • 一、MAX7219点阵模块
  • 二、点阵显示实验
    • 1、点阵显示部分图形
    • 2、点阵显示数字 0 ~ 9 及 26 个英文字母
  • 总结


前言

  • 本文主要介绍8×8 LED点阵显示实验,分别是:
  • 1、介绍MAX7219点阵模块;
  • 2、点阵显示部分图形;
  • 3、点阵显示数字 0~9 及 26 个英文字母。

一、MAX7219点阵模块

  • (1)MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。通过四线串行接口可以联接所有通用的微处理器,每个数据可以寻址在更新时不需要改写所有的显示。
  • (2)MAX7219点阵模块:由1个8x8点阵和1个MAX7219组成,通过SPI方式与单片机通信。
  • (3)MAX7219点阵模块实物图:
    在这里插入图片描述
  • (3)引脚说明与接线
  • ① 引脚说明:
MAX7219点阵模块功能说明
VCC模块供电接口,可用单片机的5v电源口供电
GND电源地
DIN数据输入
CS片选端,接口低电平时串行数据被载入移位寄存器
CLK时钟接口
  • ② 与Arduino UNO R3开发板接线:
MAX7219点阵模块Arduino UNO
VCC5V
GNDGND
DIND11
CSD10
CLKD13

二、点阵显示实验

1、点阵显示部分图形

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)点阵显示部分图形的电路图,如下图所示:
    在这里插入图片描述

  • (3)实验准备:安装下载安装 “LedControl” 库文件。

  • (4)实现功能:点阵显示上下左右箭头、三种表情和三种爱心。

代码实现:

//8*8LED点阵模块显示实验
//点阵显示上下左右箭头、三种表情和三种爱心

#include <LedControl.h>

//Arduino UNO SPI引脚:D10(CS)、D11(MOSI)、D12(MISO)、D13(SCLK)

int DIN = 11;//SPI模式,MOSI主设备输出,从设备输入
int CS =  10;//SPI模式,CS片选
int CLK = 13;//SPI模式,CLK

//面部表情
byte smile[8] =   {0x3C, 0x42, 0xA5, 0x81, 0xA5, 0x99, 0x42, 0x3C};//微笑
byte neutral[8] = {0x3C, 0x42, 0xA5, 0x81, 0xBD, 0x81, 0x42, 0x3C};//中性
byte sad[8] =     {0x3C, 0x42, 0xA5, 0x81, 0x99, 0xA5, 0x42, 0x3C};//悲伤


//实心箭头
byte Front[8] =   {0x08, 0x1c, 0x3e, 0x7f, 0x1c, 0x1c, 0x1c, 0x1c}; //向上箭头↑
byte back[8] =    {0x1c, 0x1c, 0x1c, 0x1c, 0x7f, 0x3e, 0x1c, 0x08}; //向下箭头↓
byte left[8] =    {0x10, 0x30, 0x7f, 0xff, 0x7f, 0x30, 0x10, 0x00}; //向左箭头←
byte right[8] =   {0x08, 0x0c, 0xfe, 0xff, 0xfe, 0x0c, 0x08, 0x00}; //向右箭头→


//爱心
byte heart[8] =   {0x00, 0x76, 0x89, 0x81, 0x81, 0x42, 0x24, 0x18}; //空❤
byte heart1[8] =  {0x00, 0x00, 0x24, 0x7E, 0x7E, 0x3C, 0x18, 0x00}; //小❤
byte heart2[8] =  {0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}; //大❤

LedControl lc = LedControl(DIN, CLK, CS, 0);//新建一个类对象

void setup()
{
  lc.shutdown(0, false);       //初始化时设置点阵为正常使用模式
  lc.setIntensity(0, 1);       //设置亮度值,范围0~15
  lc.clearDisplay(0);          //点阵清屏
}

void loop()
{
   //显示箭头
  printByte(Front);
  delay(2000);
  printByte(back);
  delay(2000);
  printByte(left);
  delay(2000);
  printByte(right);
  delay(2000);

  //显示表情
  printByte(smile);
  delay(2000);
  printByte(neutral);
  delay(2000);
  printByte(sad);
  delay(2000);

   //显示❤
  printByte(heart);
  delay(2000);
  printByte(heart1);
  delay(2000);
  printByte(heart2);
  delay(2000);
}

void printByte(byte character [])
{
  int i = 0;
  for (i = 0; i < 8; i++)
  {
    lc.setRow(0, i, character[i]);//设置点阵单行8个LED状态,每行数据用16进制表示
  }
}
  • (5)实现现象(部分展示):
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、点阵显示数字 0 ~ 9 及 26 个英文字母

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)点阵显示数字 0 ~ 9 及 26 个英文字母的电路图,如下图所示:
    在这里插入图片描述

  • (3)实验准备:安装下载安装 “LedControl” 库文件。

  • (4)实现功能:点阵显示 0 ~ 9 和 A ~Z。

代码实现:

//8*8LED点阵模块显示实验
//点阵显示0~9,A~Z

#include <LedControl.h>

//Arduino UNO SPI引脚:D10(CS)、D11(MOSI)、D12(MISO)、D13(SCLK)

int DIN = 11;//SPI模式,MOSI主设备输出,从设备输入
int CS =  10;//SPI模式,CS片选
int CLK = 13;//SPI模式,CLK时钟

byte zero[8] =  {0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C};//0 
byte one[8] =   {0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C};//1 
byte two[8] =   {0x1C,0x22,0x02,0x02,0x1C,0x20,0x20,0x3E};//2 
byte three[8] = {0x1C,0x22,0x02,0x1C,0x02,0x02,0x22,0x1C};//3 
byte four[8] =  {0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x08};//4 
byte five[8] =  {0x3E,0x20,0x20,0x3E,0x02,0x02,0x22,0x1C};//5 
byte six[8] =   {0x1C,0x22,0x20,0x3C,0x22,0x22,0x22,0x1C};//6 
byte seven[8] = {0x3E,0x02,0x04,0x08,0x10,0x10,0x10,0x10};//7 
byte eight[8] = {0x1C,0x22,0x22,0x1C,0x22,0x22,0x22,0x1C};//8 
byte nine[8] =  {0x1C,0x22,0x22,0x22,0x1E,0x02,0x22,0x1C};//9 
byte A[8] =     {0x00,0x1C,0x22,0x22,0x22,0x3E,0x22,0x22};//A
byte B[8] =     {0x00,0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C};//B
byte C[8] =     {0x00,0x1C,0x22,0x20,0x20,0x20,0x22,0x1C};//C
byte D[8] =     {0x00,0x3C,0x22,0x22,0x22,0x22,0x22,0x3C};//D
byte E[8] =     {0x00,0x3E,0x20,0x20,0x3E,0x20,0x20,0x3E};//E
byte F[8] =     {0x00,0x3E,0x20,0x20,0x3E,0x20,0x20,0x20};//F
byte G[8] =     {0x00,0x1C,0x22,0x20,0x3E,0x22,0x22,0x1C};//G
byte H[8] =     {0x00,0x22,0x22,0x22,0x3E,0x22,0x22,0x22};//H
byte I[8] =     {0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x1C};//I
byte J[8] =     {0x00,0x3E,0x08,0x08,0x08,0x08,0x28,0x18};//J
byte K[8] =     {0x00,0x24,0x28,0x30,0x20,0x30,0x28,0x24};//K
byte L[8] =     {0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x3E};//L
byte M[8] =     {0x00,0x42,0x66,0x5A,0x42,0x42,0x42,0x42};//M
byte N[8] =     {0x00,0x00,0x2C,0x32,0x22,0x22,0x22,0x22};//n
byte O[8] =     {0x00,0x1C,0x22,0x22,0x22,0x22,0x22,0x1C};//O
byte P[8] =     {0x00,0x3C,0x22,0x22,0x3C,0x20,0x20,0x20};//P
byte Q[8] =     {0x00,0x1C,0x22,0x22,0x22,0x2A,0x26,0x1F};//Q
byte R[8] =     {0x00,0x38,0x24,0x24,0x38,0x30,0x28,0x24};//R
byte S[8] =     {0x00,0x1C,0x22,0x20,0x1C,0x02,0x22,0x1C};//S
byte T[8] =     {0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08};//T
byte U[8] =     {0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C};//U
byte V[8] =     {0x00,0x22,0x22,0x22,0x22,0x14,0x08,0x00};//V
byte W[8] =     {0x00,0x41,0x41,0x49,0x55,0x55,0x63,0x41};//W
byte X[8] =     {0x00,0x00,0x42,0x24,0x18,0x18,0x24,0x42};//X
byte Y[8] =     {0x00,0x22,0x22,0x14,0x08,0x10,0x20,0x00};//y
byte Z[8] =     {0x00,0x3E,0x02,0x04,0x08,0x10,0x20,0x3E};//Z

LedControl lc = LedControl(DIN, CLK, CS, 0);//新建一个类对象

void setup()
{
  lc.shutdown(0, false);       //初始化时设置点阵为正常使用模式
  lc.setIntensity(0, 1);       //设置亮度值,范围0~15
  lc.clearDisplay(0);          //点阵清屏
}

void loop()
{
  //显示数字
  printByte(zero);
  delay(1000);
  printByte(one);
  delay(1000);
  printByte(two);
  delay(1000);
  printByte(three);
  delay(1000);
  printByte(four);
  delay(1000);
  printByte(five);
  delay(1000);
  printByte(six);
  delay(1000);
  printByte(seven);
  delay(1000);
  printByte(eight);
  delay(1000);
  printByte(nine);
  delay(1000);

  printByte(A);
  delay(1000);
  printByte(B);
  delay(1000);
  printByte(C);
  delay(1000);
  printByte(D);
  delay(1000);
  printByte(E);
  delay(1000);
  printByte(F);
  delay(1000);
  printByte(G);
  delay(1000);
  printByte(H);
  delay(1000);
  printByte(I);
  delay(1000);
  printByte(J);
  delay(1000);
  printByte(K);
  delay(1000);
  printByte(L);
  delay(1000);
  printByte(M);
  delay(1000);
  printByte(N);
  delay(1000);
  printByte(O);
  delay(1000);
  printByte(P);
  delay(1000);
  printByte(Q);
  delay(1000);
  printByte(R);
  delay(1000);
  printByte(S);
  delay(1000);
  printByte(T);
  delay(1000);
  printByte(U);
  delay(1000);
  printByte(V);
  delay(1000);
  printByte(W);
  delay(1000);
  printByte(X);
  delay(1000);
  printByte(Y);
  delay(1000);
  printByte(Z);
  delay(1000);
}

void printByte(byte character [])
{
  int i = 0;
  for (i = 0; i < 8; i++)
  {
    lc.setRow(0, i, character[i]);//设置点阵单行8个LED状态,每行数据用16进制表示
  }
}
  • (5)实现现象(部分展示):
    在这里插入图片描述
    在这里插入图片描述

总结

  • 1、通过上述两个点阵实验,了解了8*8点阵显示的基本原理;
  • 2、通过SPI通信控制点阵显示,学会了Arduino用SPI通信方式控制外设。

参考资料1: Arduino驱动MAX7219点阵
参考资料2: 【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏8
参考资料3: Arduino 学习笔记 | 单片机控制驱动MAX7219 8*8 LED点阵显示模块
参考资料4: 51单片机 8*8点阵26个英文字母怎么样显示 ?要从上到下的编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索以太坊 Layer 2 解决方案的后起之秀——Starknet

作者: stellafootprint.network 数据来源: Starknet Dashboard “区块链三难题”&#xff0c;或“可扩展性三难题”&#xff0c;强调了区块链平台想要去平衡安全性、去中心化和可扩展性将面临的挑战。通常情况下&#xff0c;区块链架构只能有效地优先考虑其中两个难题。例如&…

蓝牙核心规范(V5.4)10.2-BLE 入门笔记之CIS篇

LE CIS 同步通信 同步通信提供了一种使用蓝牙LE在设备之间传输有时间限制的数据的方式。它提供了一个机制,允许多个接收器设备在不同的时间从相同的源接收数据,以同步它们对该数据的处理。LE AUDIO使用同步通信。 当使用同步通信时,数据具有有限的时间有效期,在到期时被认…

Nacos服务注册中心

1.引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency> 2. application.properties中配置 #-------------- Nacos配置 spring.cloud.nacos.…

项目开发过程中,客户提出了新的需求,怎么办?

由于用户已经签署用户需求报告&#xff0c;面对他们提出的新需求&#xff0c;要初步评估判断是否涉及相关需求的变更&#xff0c;作为项目经理&#xff0c;我会采取以下步骤&#xff1a; 1. 与客户进行沟通&#xff1a;首先&#xff0c;我会与客户进行进一步的沟通和讨论&…

【视觉SLAM入门】9.1 建图1---SLAM任务,稠密地图构建,立体视觉,RGBD,八叉树,点云地图等各种不同地图

"讷为君子&#xff0c;寡为吉人 ” 1. 立体稠密地图1.1 地图构建1.2 分析立体相机稠密建图效果 2. RGB-D稠密地图2.1 地图对比2.1.1 八叉树地图 3. 建图&#xff1f;定位&#xff1f;孰轻孰重3.1 鬼影问题3.2 三维重建 4. 总结 SLAM的功能&#xff1a; 直到现在我们可以知…

嵌入式:驱动开发 Day7

作业&#xff1a;基于GPIO子系统&#xff0c;编写LED的驱动程序和应用程序 驱动程序&#xff1a;myled.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/device.h> #inc…

Python入门-pack和unpack的用法

struct.calcsize(format) 返回与格式字符串format相对应的结构体的大小&#xff08;以及由 生成的字节对象的大小 &#xff09; 使用大端顺序打包和解包三种不同大小的整数&#xff1a; from struct import *pack(">bhl", 1, 2, 3)unpack(>bhl, b\x01\x00\x…

聚焦企业开放OpenAPI痛难点,华为云API Explorer助力伙伴构建API门户

当前&#xff0c;IT研发的主流架构已从单体架构向微服务架构转型&#xff0c;带动了产品迭代速度和项目交付速度不断加快&#xff0c;随着整个IT产业规模的不断扩大&#xff0c;API数量也随之呈爆发式增长。据不完全统计&#xff0c;目前业界有70%到90%的业务是通过开源代码和第…

数据可视化 -- ECharts 入门

文章目录 引言1. ECharts的基本使用1.1 ECharts的快速上手1.2 相关配置讲解 2. ECharts常用图表2.1 图表1 柱状图2.1.1 柱状图的实现步骤2.1.2 柱状图的常见效果2.1.3 柱状图特点2.1.4 通用配置 2.2 图表2 折线图2.2.1 折线图的实现步骤2.2.2 折线图的常见效果2.2.3 折线图的特…

Java的Socket通信的断网重连的正确写法

Java的Socket通信的断网重连的正确写法 Socket通信的断网重连介绍客户端与服务端源码演示截图本地演示服务器演示演示截图 总结 Socket通信的断网重连介绍 针对于已经建立通信的客户端与服务器&#xff0c;当客户端与服务器因为网络问题导致网络不通而断开连接了或者由于服务器…

ET数据无效值处理(仅代表个人观点)

1将无效值去除查看&#xff0c;查看有效值 有效值范围为1830~9472 2.计算有效范围最大值最小值 如果计算四分数据得将栅格属性表导出execl进行计算 2根据该片文章进行替换 如何处理MODIS蒸散数据(ET)中的填充值&#xff08;仅作参考&#xff09;_Z_W_H_的博客-CSDN博客

大数据学习1.1-Centos8虚拟机安装

1.创建新的虚拟机 2.选择稍后安装OS 3.选择Linux的CentOS8 4.选择安装路径 5.分配20g存储空间 6.自定义硬件 7.分配2g内存 8.分配2核处理器 9.选择镜像位置 10.开启虚拟机安装 推荐密码设置为root

TS开发环境搭建

一、安装Node.js 官网&#xff1a;Node.js (nodejs.org) 可以去看别的大佬安装Node.js的文章&#xff0c;因为大部分人都安装了Node环境&#xff0c;这里我就不做说明 二、使用npm全局安装typescript 在终端中输入如下命令&#xff1a; npm i -g typescript 安装完成会有如…

程序开发:在线报名线下活动小程序源码功能解析

针对线下活动在线报名场景的小程序&#xff0c;支持在线支付费用以及线下核销。 可以应多大多数的线下报名&#xff0c;线上报名客服表单可以定制订单&#xff0c;支持导出报名&#xff0c;支持审核&#xff0c;支持分享&#xff0c;支持分销拓客以及线下核销。 WEB小程序双端…

2023年日经225指数研究报告

第一章 指数概况 1.1 概述 日经225指数&#xff0c;又被称为日经平均股票价格或日经225平均指数&#xff0c;通常被称为日经或日经指数&#xff0c;是东京证券交易所的一个重要股价指数。该指数自1950年起由日本经济新闻&#xff08;The Nikkei&#xff09;日报计算&#xff…

Chrome浏览器崩溃“STATUS_INVALID_IMAGE_HASH”的解决方法

原文地址&#xff1a;Chrome浏览器崩溃"STATUS_INVALID_IMAGE_HASH"的解决方法 | JUNES BLOG | 六月博客 今天无意间&#xff0c;发现Chrome浏览器多了个“ 由贵单位管理 ”的提示&#xff0c;出于安全的考虑&#xff0c;想立马把它搞掉&#xff0c;百度了一堆方法&a…

【编程实践】在VS studio中配置Eigen库

1 介绍 Eigen库是C标准模板库&#xff0c;能够进行向量运算、矩阵运算、矢量运算、数值分析等操作&#xff0c;并且包含相应的运算算法。 Eigen官方地址: 地址 可在官网下载指定版本的压缩包&#xff0c;将压缩包解压至后面配置的“附件包含目录”中。 2 配置 2.1 VS studi…

基于SSM的校园车辆管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

如何借助上线初期运维管理守住项目建设最后一公里

随着运营商技术升级、业务发展&#xff0c;以及服务能力要求提升&#xff0c;当下新建项目的交付或系统大版本升级大多数都需要历经千辛万苦才达到上线的彼岸。然而&#xff0c;项目上线并不意味着项目结束&#xff0c;“上线”也并不意味着终点&#xff0c;而是一个新的管理模…

Linux服务器初始化、yum安装java、redis、mysql

目录 前言 一、yum安装java二、yum安装redis三、yum安装mysql 前言 本文使用yum命令安装部署可能会用到的相关应用 安装软件包之前&#xff0c;我们需要先更新系统&#xff0c;以确保安装的软件包是最新的版本。执行以下命令&#xff1a; sudo yum update一、yum安装java 1、…