【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5

这篇具有很好参考价值的文章主要介绍了【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十一:8位LED数码管MAX7219模块(支持级联八位串行3个IO口控制)

【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5,【Arduino】168种传感器模块系列实验,嵌入式硬件,单片机,物联网,Arduino,机器人,c++,8位LED数码管模块
【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5,【Arduino】168种传感器模块系列实验,嵌入式硬件,单片机,物联网,Arduino,机器人,c++,8位LED数码管模块
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十一: 8位LED数码管MAX7219模块
项目之六:最简办法显示数字串

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验八十四: 8位LED数码管MAX7219模块
   项目之六:最简办法显示数字串
*/

#include "LedControl.h"
LedControl lc = LedControl(2, 4, 3, 1);

void setup() {
  lc.shutdown(0, false); 
  lc.setIntensity(0, 6); 
  lc.setDigit(0, 0, 9, false);
  lc.setDigit(0, 1, 8, false);
  lc.setDigit(0, 2, 7, false);
  lc.setDigit(0, 3, 6, false);
  lc.setDigit(0, 4, 5, true);
  lc.setDigit(0, 5, 4, false);
  lc.setDigit(0, 6, 3, false);
  lc.setDigit(0, 7, 2, false);
}

void loop() {
}

Arduino实验场景图

【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5,【Arduino】168种传感器模块系列实验,嵌入式硬件,单片机,物联网,Arduino,机器人,c++,8位LED数码管模块
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十一: 8位LED数码管MAX7219模块
项目之七:递归 LEDControl 计数器(8位1亿之内)

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验八十四: 8位LED数码管MAX7219模块
   项目之七:递归 LEDControl 计数器(8位1亿之内)
*/

#include <Arduino.h>
#include "LedControl.h"
LedControl lc = LedControl(2, 4, 3, 1);
long num = 0;

void showNumber(long number, byte pos = 0) {
  byte digit = number % 10;
  lc.setDigit(0, pos, digit, false);
  long remainingDigits = number / 10;
  if (remainingDigits > 0) {
    showNumber(remainingDigits, pos + 1);
  }
}

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 6);
  lc.clearDisplay(0);
}

void loop() {
  showNumber(num);
  num++;
}

实验场景图 动态图

【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5,【Arduino】168种传感器模块系列实验,嵌入式硬件,单片机,物联网,Arduino,机器人,c++,8位LED数码管模块

首先,我们需要包含所有必要的库:

#include <LedControl.h>

接下来,我们需要创建一个 LedControl 实例,它控制我们的 MAX7219 显示:

LedControl lc = LedControl(3, 4, 5, 1); // dataPin、clockPin、cs Pin、num 设备

此外,让我们创建一个变量用作计数器。由于我们要使用所有 8 位数字,因此该变量应达到 99,999,999。由于 anint只会上升到 32,768(和unsigned int: 65,535),我们将使用long. 这将使我们能够数到 2,147,483,647。

long num = 0;

现在,开始真正的魔法:我们需要定义显示数字的函数。

void showNumber(long number, byte pos = 0) {
  // 所有的魔法都在这里
}

这意味着我们可以使用所需的数字作为参数调用此函数。作为第二个参数,我们定义开始的位置。数字从右到左编号,从0到7。所以我们想从 开始0,增加每个下一个数字的位置。因为我们定义了一个默认值0,所以在调用这个函数时我们可以省略这个参数。

当然,这仍然没有任何真正的魔法,所以是时候给这个函数添加一些代码了:

byte digit = number % 10;

通过%使用 10 作为除数计算数字的模 ( ),我们得到我们想要打印的数字的最后一位。例如:如果数字是123,变量digit将包含3。

使用该setDigit方法,我们现在可以将这个数字显示在屏幕上:

lc.setDigit(0, pos, digit, false);

第一个参数 ( 0) 告诉我们要使用 device 的方法0。请注意,我们目前只配置了一台设备,因此您0现在可以忽略它。
第二个参数 ( pos) 定义显示器上的位置。如果在调用我们的函数时没有定义特定的位置,这pos将是0.
第三个参数 ( digit) 定义了我们想要显示的数字。这是我们刚刚使用模运算符在上一行计算的数字。
第四个参数 ( false) 告诉显示器是否需要打开小数点。为简单起见,我们将保持关闭状态。
好的,现在可以在我们的显示器上显示一位数字了,剩下的数字呢?好问题!让我们继续扩展我们的功能:

long remainingDigits = number / 10;

通过将数字除以10,我们得到需要显示的所有剩余数字。

<div>if (remainingDigits > 0) {</div><div>    showNumber(remainingDigits, pos + 1);</div><div>}</div>

这就是……真正的魔法!我说的递归!以上几行将执行以下操作:

如果remainingDigits变量大于0,则仍有数字要显示,因此我们需要执行递归操作。
递归:让函数使用两个计算参数自行调用它:remainingDigits和pos + 1
这就是这种神奇的递归方法的全部内容!完整的功能如下:

void showNumber(long number, byte pos = 0) {
    byte digit = number % 10;
    lc.setDigit(0, pos, digit, false);

    long remainingDigits = number / 10;
    if (remainingDigits > 0) {
        showNumber(remainingDigits, pos + 1);
    }
}

为了使其效果更清晰,请考虑以下事项:如果我们将这个函数12345作为第一个参数调用,将执行以下函数调用:

showNumber(12345); // shows a 5 on position 0
showNumber(1234, 1); // shows a 4 on position 1
showNumber(123, 2); // shows a 3 on position 2
showNumber(12, 3); // shows a 2 on position 3
showNumber(1, 4); // shows a 1 on position 4

这就是它需要做的全部!

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十一: 8位LED数码管MAX7219模块
项目之八:循环显示数字与“HELLO”

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验八十四: 8位LED数码管MAX7219模块
   项目之八:循环显示数字与“HELLO”
*/

#include "LedControl.h"
// Arduino 引脚 2 至DIN,4 至Clk,3 至ck,设备数量是1个
LedControl lc = LedControl(2, 4, 3, 1);

//*我们总是在显示更新之间等待一段时间
unsigned long delaytime = 250;

void setup() {
  //MAX72XX 在启动时处于省电模式,我们必须叫醒
  lc.shutdown(0, false);
  lc.setIntensity(0, 6); // 设置亮度级别(0 为最小值,15 为最大值)
  lc.clearDisplay(0); // 清除显示寄存器
}

void hello(){
  lc.setChar(0,7,'H',false);
  lc.setChar(0,6,'E',false);
  lc.setChar(0,5,'L',false);
  lc.setChar(0,4,'L',false);
  lc.setChar(0,3,'0',false);
  lc.setChar(0,2,'.',false);
  lc.setChar(0,1,'.',false);
  lc.setChar(0,0,'.',false);
  delay(delaytime+1000);
  lc.clearDisplay(0);
  delay(delaytime);
  lc.setDigit(0,7,1,false);
  delay(delaytime);
  lc.setDigit(0,6,2,false);
  delay(delaytime);
  lc.setDigit(0,5,3,false);
  delay(delaytime);
  lc.setDigit(0,4,4,false);
  delay(delaytime);
  lc.setDigit(0,3,5,false);
  delay(delaytime);
  lc.setDigit(0,2,6,false);
  delay(delaytime);
  lc.setDigit(0,1,7,false);
  delay(delaytime);
  lc.setDigit(0,0,8,false);
  delay(1500);
  lc.clearDisplay(0);
  delay(delaytime);
}

void loop() { 
   hello();
}

Arduino实验场景图

【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5,【Arduino】168种传感器模块系列实验,嵌入式硬件,单片机,物联网,Arduino,机器人,c++,8位LED数码管模块文章来源地址https://www.toymoban.com/news/detail-605484.html

到了这里,关于【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【雕爷学编程】Arduino动手做(119)---JQ6500语音模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月10日
    浏览(58)
  • 【雕爷学编程】Arduino动手做(54)---大按键微动按钮模块3

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下

    2024年02月13日
    浏览(45)
  • 【雕爷学编程】Arduino动手做(131)---跑马灯矩阵键盘模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月11日
    浏览(54)
  • 【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板2

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月14日
    浏览(40)
  • 【雕爷学编程】Arduino动手做(133)---LCD1602扩展板模块

    7款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与

    2024年02月11日
    浏览(44)
  • 【雕爷学编程】Arduino动手做(90)---4X4矩阵薄膜键盘模块2

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下

    2024年01月17日
    浏览(56)
  • 【雕爷学编程】Arduino动手做(12)---霍尔磁场传感器模块5

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下

    2024年02月13日
    浏览(40)
  • 【雕爷学编程】Arduino动手做(12)---霍尔磁场传感器模块2

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下

    2024年02月13日
    浏览(48)
  • 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块7

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月16日
    浏览(46)
  • 【雕爷学编程】Arduino动手做(155)---2262/2272四键无线遥控套件模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月13日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包