【arduino】控制N位数码管

以下以四位共阳极数码管为例;
本文所有说明均以注释的方式进行。
四位共阳极数码管
使用方法:

#include "DigitalTube.h"
//每位共阳极对应的引脚int digital[4] = {8, 11, 12, 7};//参数分别为a f b g e c d dp digital(共阳极引脚数组) length(digital长度)DigitalTube tube = DigitalTube(9, 10, 13, 6, 2, 5, 3, 4, digital, 4);void setup() {for(int i=0; i<=13 ; i++){pinMode(i, OUTPUT);}//亮灯函数;第一个参数位灯的形状,第二个参数为第几位//灯的形状以八位二进制表示,从左到右分别的 a f b g e c d dp; 0为灭、1为亮//该函数表示在第二位显示0tube.light(0b11101110, 2);delay(5000);//清空灯光,防止余晖tube.clear();
}void loop() {//亮灯函数;示数891.0 长度为5位(包括小数点)//第一个参数不一定为严格的小数可以有多个小数点例如tube.light("1.5.7.0", 7);tube.light("891.0", 5);
}

以下为核心代码;代码以共阳极数码管为例,可以根据自己的需要更改HIGH和LOW;或将需要的电平添加到构造函数中使用;

#ifndef _DIGITALTUBE_H_
#define _DIGITALTUBE_H_#include"Arduino.h"class DigitalTube
{private://八位数字引脚int figure[8];//共阳极引脚数组int* digitalPin;//共阳极引脚长度int digitalLength;public://0-9的形状int shapeList[10] = {0b11101110, 0b00100100, 0b10111010, 0b10110110, 0b01110100, 0b11010110, 0b11011110, 0b10100100, 0b111111110, 0b11110110};//初始化DigitalTube(int a, int f, int b, int g, int e, int c, int d, int dp, int digital[], int length);//亮单个灯光, shape 灯光形状; unit 第几位void light(int shape, int unit);void light(String num, int size);//清空灯光void clear();
};
#endif
#include "Print.h"
#include"DigitalTube.h"
#include"Arduino.h"DigitalTube::DigitalTube(int a, int f, int b, int g, int e, int c, int d, int dp, int digital[], int length)
{//初始化PINfigure[0] = a;figure[1] = f;figure[2] = b;figure[3] = g;figure[4] = e;figure[5] = c;figure[6] = d;figure[7] = dp;this->digitalPin = digital;this->digitalLength = length;// 初始化电压for(int i=0; i< sizeof(figure) ; i++){digitalWrite(figure[i], LOW);}for(int i=0; i< sizeof(digital) ; i++){digitalWrite(digitalPin[i], LOW);}
};
void DigitalTube::light(int shape, int unit){for(int i =0; i< digitalLength ;i++){digitalWrite(digitalPin[i], LOW);}digitalWrite(digitalPin[unit], HIGH);for(int i=0; i< 8;i++){int level = shape&(1<<i);if(level != 0){digitalWrite(figure[7-i], LOW);}else{digitalWrite(figure[7-i], HIGH);}}
};void DigitalTube::light(String num, int size){int i = 0, y = 0;while(i< size){int shape = this->shapeList[(int)num[i] - 48];if(num[i+1] == '.'){i++;shape = shape | 1;}this->light(shape, y);delay(1);this->clear();i++;y++;}
};void DigitalTube::clear(){// for(int i =0; i< sizeof(digitalPin) ;i++){//   digitalWrite(digitalPin[i], HIGH);// }for(int i=0; i< 8;i++){digitalWrite(figure[i], HIGH);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang教程一(环境搭建,变量,数据类型,数组切片map)

目录 一、环境搭建 1.windows安装 2.linux安装 3.开发工具 二、变量定义与输入输出 1.变量定义 2.全局变量与局部变量 3.定义多个变量 4.常量定义 5.命名规范 6.输出 7.输入 三、基本数据类型 1.整数型 2.浮点型 3.字符型 4.字符串类型 转义字符 多行字符…

数字人生成 Wav2Lip面部动画 神经辐射场 NeRF场景结构 3DMM人脸模型 深度学习 生成对抗网 GAN 语音交互、虚拟现实(VR)和增强现实(AR)

数字人生成 喝奶茶的甄嬛 数字人,从广义上来说,是数字技术在人体解剖、物理、生理及智能各个层次、各个阶段的渗透。它是信息科学与生命科学融合的产物,利用信息科学的方法对人体在不同水平的形态和功能进行虚拟仿真。数字人可以是虚拟人物,也可以是真实人物的数字再现,它…

Typora导入功能使用详细

一、 pandoc安装&#xff08;导入需要的插件&#xff09; 1. 首次安装完typora&#xff0c;是没法导入的&#xff0c;需要安装pandoc&#xff0c;首先我们先在文件夹里面新建一个Typora文件&#xff0c;然后再找到导入功能点击就可以弹出安装的地址了 2. 点击文件可以找到导入…

常用算法——双指针算法

双指针算法介绍&#xff1a; 所谓的双指针算法看似十分的神秘&#xff0c;但是实质上就是两个标志查找元素的变量。双指针既可以是我们平常最常说的指针&#xff08;类似int *类型的数据&#xff09;&#xff0c;也可以是数组的下标。因为对于一个数组数据的查找&#xff0c;通…

halcon-轴断面检测定位

前言 通常情况下轴检测时&#xff0c;通常会检测轴的各个阶段的长度。但是由于各种原因&#xff0c;在轴断面的区域现实不明显&#xff0c;无法正确提取&#xff0c;这时候需要根据轴断面的突出部分进行检测&#xff0c;但是由于部分轴的粗轴和细轴区域的宽度差距相当接近&…

安卓数据怎么恢复?十大顶级Android数据恢复软件

Android 是移动设备的顶级操作系统。由于许多不确定的情况&#xff0c;会发生数据丢失。数据恢复软件有助于挽救丢失的数据。在这里&#xff0c;让我们讨论一下 前 10 名最佳 android 数据恢复软件。 十大顶级Android数据恢复软件 1.奇客数据恢复 奇客数据恢复是由奇客软件软件…

Blender4.0 下载地址及安装教程

Blender是一款开源的3D计算机图形软件&#xff0c;广泛应用于动画制作、游戏开发、建模、渲染等领域。它提供了一套强大的工具和功能&#xff0c;让用户能够进行三维建模、动画制作和视觉效果的创作。 Blender支持多种文件格式的导入和导出&#xff0c;使用户能够与其他软件进…

浮点数的表示

王道考研ppt总结&#xff1a; 二、个人理解 浮点数解决的是定点数的位数局限&#xff0c;导致表示范围有限的问题 阶码&#xff1a;由阶符和数值部分组成&#xff0c;阶符为&#xff0c;小数点向左移动&#xff0c;否则向右移动&#xff1b;数值部分&#xff0c;是底数的几次幂…

【CSS】一篇文章讲清楚screen、window和html元素的位置:top、left、width、height

一个Web网页从内到外的顺序是&#xff1a; 元素div,ul,table... → 页面body → 浏览器window → 屏幕screen 分类详情屏幕screen srceen.width - 屏幕的宽度 screen.height - 屏幕的高度&#xff08;屏幕未缩放时&#xff0c;表示屏幕分辨率&#xff09; screen.availLeft …

Electron 桌面端应用的使用 ---前端开发

Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 入门…

Spring Boot - 利用MDC(Mapped Diagnostic Context)实现轻量级同步/异步日志追踪

文章目录 Pre什么是MDC&#xff08;Mapped Diagnostic Context&#xff09;Slf4j 和 MDC基础工程工程结构POMlogback-spring.xmlapplication.yml同步方式方式一&#xff1a; 拦截器自定义日志拦截器添加拦截器 方式二&#xff1a; 自定义注解 AOP自定义注解 TraceLog切面 测试…

解析器模式:面向对象设计中的表达式评估与语法树构建策略

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种语言&#xff0c;并使用该语言来解释句子。这种模式用于描述如何构成一个简单的语言解析器。在Java中实现解释器模式通常涉及一个抽象表达式接口、具体表达式类&#xff08;终…