esp32使用数码管显示数字

news2024/11/17 1:23:58

        前言:本文参考视频链接放在最后,同时本文为学习笔记,为了自己好复习。

#数码管概念

        现在显示流行有 LCD  OLED  但是数码管也能用来作为显示,相对于前两者,数码管稳定价格低廉,到现在也在被应用,也没有被替代。

        这种模块,按照显示数字的多少有着不同的叫法,1位数码管,只能显示1位数字,同样的4位数码管可以显示4位数字。

        按照显示多少不同的数字,有着不同的叫法,同时分为共阳极数码管,和共阴极数码管,这两种数码管的区别在于,公共端是正极和接地,公共端是正极,就是共阳极数码管,公共端全都接地就是共阴极数码管。

共阳极数码管:将所有发光二极管的阳极接到一起,行成公共阳极(COM),数码管。

共阴极数码管:将所有发光二极管的阴极接到一起,行成公共阴极(COM),数码管。        

显示原理:单个数码管,内部是分为a b c d e f g 7个段,每个段有一个LED组成,当LED发光时,这个段落就亮起,不同的段落就组成了不同的数字来显示,所以只需要让LED亮起,组合就能显示数字,当为共阳极数码管,因为已经供电,只需要将连接的IO引脚设置为拉低接地,就能亮起,同理如果为共阴极只需要将IO引脚设置为高电平,就能点亮LED段落。

#1位数码管显示数字    

    到这里,理解了,常见的数码管,数码管显示的原理,接下来将用程序点亮一个数码管。

#define Pin_c 19
#define Pin_d 21 
#define Pin_e 22
#define Pin_f 2
#define Pin_g 15
#define Pin_dp 18
//宏定义定义引脚

int pin_array[8] = {Pin_a,Pin_b,Pin_c,Pin_d,Pin_e,Pin_f,Pin_g,Pin_dp};
//数组放置宏定义的
int number_array[][8] = 
{
{0,0,0,0,0,0,1,1},//0
{1,0,0,1,1,1,1,1},//1
{0,0,1,0,0,1,0,1},//2
{0,0,0,0,1,1,0,1},//3
{1,0,0,1,1,0,0,1},//4
{0,1,0,0,1,0,0,1},//5
{0,1,0,0,0,0,0,1},//6
{0,0,0,1,1,1,1,1},//7
{0,0,0,0,0,0,0,1},//8
{0,0,0,0,1,0,0,1},//9

}
//在C语言中数组,数组一维没有填写会默认判断数组大小,如果两个都没有填写则会报错,只能是一维没有填写
void setup() {
  for(int i = 0;i<8;i++)
  {
    pinMode(pin_array[i],OUTPUT);
    digitalWrite(pin_array[i],HIGH);
   // pinMode(2,OUTPUT);
  }
}

  // put your setup code here, to run once:

void loop() {
  // put your main code here, to run repeatedly:
  //显示数字3
  int num = 3;
  for(int i = 0,i<8,i++)
    {
      digitalWrite(pin_array[i],number_array[num][i]);

    }

}

        上面代码里,将显示不同的数字,对应不同的二极管发光情况,当成元素放在二维数组里面,这里二维数组省略一维,程序会根据数组大小自动判断,一维大小,只能这么用,也只能这么省略。


#4位数码管显示数字

        4位数码管跟1位数码管是有些区分的,前者没有公共端(COM),有的是不同的选通端,也就是SEG1  SEG2  SEG3  SEG4,多位数码管的特点是,选通端是独立的,每个数码管的LED段选线是公共的

        总结:4位数码管中,段选线用来控制显示的数字,选通端(位选线)用来控制是那个数码管进行显示。

/*
  该程序的作用是演示动态扫描原理。
  在线文档:https://docs.geeksman.com/esp32/Arduino/08.esp32-arduino-4-digits-7segment.html
*/


// 定义位选线引脚
int seg_1 = 5;
int seg_2 = 18;
int seg_3 = 19;
int seg_4 = 21;

// 定义位选线数组
int seg_array[4] = {seg_1, seg_2, seg_3, seg_4};

// 定义段选线引脚;
int a = 32;
int b = 25;
int c = 27;
int d = 12;
int e = 13;
int f = 33;
int g = 26;
int dp = 14;

// 定义位选线引脚
int led_array[8] = {a, b, c, d, e, f, g, dp};

// 定义共阴极数码管不同数字对应的逻辑电平的二维数组
int logic_array[10][8] = {
 //a, b, c, d, e, f, g, dp
  {1, 1, 1, 1, 1, 1, 0, 0}, // 0
  {0, 1, 1, 0, 0, 0, 0, 0}, // 1
  {1, 1, 0, 1, 1, 0, 1, 0}, // 2
  {1, 1, 1, 1, 0, 0, 1, 0}, // 3
  {0, 1, 1, 0, 0, 1, 1, 0}, // 4
  {1, 0, 1, 1, 0, 1, 1, 0}, // 5
  {1, 0, 1, 1, 1, 1, 1, 0}, // 6
  {1, 1, 1, 0, 0, 0, 0, 0}, // 7
  {1, 1, 1, 1, 1, 1, 1, 0}, // 8
  {1, 1, 1, 1, 0, 1, 1, 0}, // 9
  };

// 延时时间
int count = 355;


// 清屏函数
void clear() {
  for (int i=0;i<4;i++) {
    digitalWrite(seg_array[i], HIGH);
    }

  for (int i=0;i<8;i++) {
    digitalWrite(led_array[i], LOW);
    }
  }

// 显示数字的函数
void display_number(int order, int number) {

  // 清屏
  clear();

  // 把对应位选线的电平拉低
  digitalWrite(seg_array[order], LOW);

  // 显示数字
  for (int i=0;i<8;i++) {
    digitalWrite(led_array[i], logic_array[number][i]);
    }
  }

void setup() {
  // 设置所有位选线引脚为输出模式,初始化所有位选线引脚为高电平
  for (int i=0;i<4;i++) {
    pinMode(seg_array[i], OUTPUT);
    digitalWrite(seg_array[i], HIGH);
    }
    
  // 设置所有段选线引脚为输出模式,初始化所有段选线引脚为低电平
  for (int i=0;i<8;i++) {
    pinMode(led_array[i], OUTPUT);
    digitalWrite(led_array[i], LOW);
    }
}

void loop() {
  display_number(0, 1);
  delay(count);

  display_number(1, 2);
  delay(count);

  display_number(2, 3);
  delay(count);

  display_number(3, 4);
  delay(count);

  if (count > 10) {
    if (count > 110) {
      count -= 50;
    }else {
      count -= 10;  
    }
    }
}

                欢迎指正,希望对你,有所帮助!!!

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

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

相关文章

UE4材质基础---方形渐变、中心渐变

1、方形渐变 效果图&#xff1a; 代码&#xff1a; 解析&#xff1a;TexCoord的纹理坐标的R通道&#xff08;0&#xff0c;0.5&#xff0c;1&#xff09;减0.5> &#xff08;-0.5&#xff0c;0&#xff0c;0.5&#xff09;取abs> (0.5&#xff0c;0&#xff0c;0.5)乘…

b站ip地址怎么改到别的城市去

对于B站的忠实用户而言&#xff0c;每当在个人主页、发布动态或评论等&#xff0c;都会注意到IP属地的显示&#xff0c;但在某些情况下&#xff0c;出于对个人隐私的保护、跨越地域限制或其他个性化需求&#xff0c;我们可能会想要改变B站显示的IP地址到另一个城市。那么&#…

有没有值得推荐的加密软件

1. 金刚钻信息数据防泄密系统 特点&#xff1a;专为企业设计&#xff0c;提供全面的信息安全管理功能&#xff0c;支持透明加密技术&#xff0c;确保敏感文件在创建、编辑和保存过程中自动加密&#xff0c;不影响正常办公流程。 功能&#xff1a;提供文档权限管理、数据备份与…

ctfhub Bypass disable_function(完结)

LD_PRELOAD url 蚁剑连接 选择插件 点击开始 查看到此文件名编辑连接拼接到url后面重新连接 点击开启终端 在终端执行命令 ls / /readfile ShellShock url CTFHub 环境实例 | 提示信息 蚁剑连接 写入shell.php <?phpeval($_REQUEST[ant]);putenv("PHP_test() { :…

无心剑七绝《陈梦夺冠》

七绝陈梦夺冠 陈言务去志高扬 梦舞巴黎万里香 夺取天机心气壮 冠轻国重醉千觞 2024年8月8日 平水韵七阳平韵 这首七绝是一首藏头诗&#xff0c;每句的首字连起来是“陈梦夺冠”&#xff0c;表达了对陈梦在巴黎奥运乒乓女单斩获冠军的赞美。 陈言务去志高扬&#xff1a;这句诗意…

【生成式人工智能-五-大模型的修炼-阶段三RLHF】

大模型的修炼-RLHF 增强式学习 大模型修炼阶段Instruct Fine-tune 和 RLHF 的区别和联系 回馈模型 Reward Model增强式学习的难题怎么定义什么是好的&#xff1f;人类也无法判定好坏的 大模型是如何具备人工智能的呢&#xff1f; 上面一篇文章介绍到了前两个阶段&#xff0c;接…

网页 生成桌面快捷应用 manifest.json

效果如图 代码 <link rel"manifest" href"./manifest.json" />// manifest.json {"name": "讨口子","short_name": "TKZ","start_url": "/","display": "standalo…

奔驰GLS450升级迈巴赫四座版内饰 后排电动遮阳帘 后排娱乐案例

多座互联娱乐系统 独乐乐,不如众乐乐。 同级独有的多座互联提乐系统,可令车内所有乘客通过7.0美对中央扶手触控屏与双11.6英寸后排提乐系统缺控屏,随心所欲地分享号航、视频、音频等内容,即便身处后排,您同样也可以享受完M的MBUX智能人都交互体验,直接控制车M的全种功能。 奔驰…

The Otherworld《我独自升级》活动来了!

最近&#xff0c;我们迎来了韩国初创公司 Otherworld&#xff0c;加入 The Sandbox 大家庭。这次合作建立了一个元宇宙网络动漫中心&#xff0c;以 KakaoPage 的热门 IP 为基础&#xff0c;为我们的玩家和创作者在 The Sandbox 中提供多样化的体验。我们将推出一个全新的活动&a…

pikachu: unsafe filedownload(文件下载)

是一个图片下载页面&#xff0c;随便下载一张图片&#xff0c;查看下载链接发现是 http://127.0.0.1:8001/vul/unsafedownload/execdownload.php?filenamekb.png 修改拼接 URL&#xff0c; 构造想要传的的路径来对其进行文件上传 http://127.0.0.1/pikachu-master/vul/unsa…

芯片底部填充工艺流程有哪些?

芯片底部填充工艺流程有哪些&#xff1f;底部填充工艺&#xff08;Underfill&#xff09;是一种在电子封装过程中广泛使用的技术&#xff0c;主要用于增强倒装芯片&#xff08;Flip Chip&#xff09;、球栅阵列&#xff08;BGA&#xff09;、芯片级封装&#xff08;CSP&#xf…

多久没有清理你的电脑磁盘了?轻松解锁免费轻量磁盘清理工具

随着我们日常使用电脑的时间越来越长&#xff0c;磁盘上积累的无用文件和垃圾数据也越来越多。这些文件不仅占用宝贵的存储空间&#xff0c;还可能拖慢电脑的运行速度。 那么&#xff0c;你多久没有清理过你的电脑磁盘了呢&#xff1f; 今天&#xff0c;我将为大家推荐几款免…

低代码平台:效率利器还是质量妥协?

目录 低代码平台&#xff1a;效率利器还是质量妥协&#xff1f; 一、引言 二、低代码平台的定义和背景 1、什么是低代码平台&#xff1f; 2、低代码平台的兴起 三、低代码开发的机遇 1、提高开发效率 2、降低开发成本 3、赋能业务人员 四、低代码开发的挑战 1、质量…

Midjourney V6.1更新 | 细节狂魔,绝美人像(附提示词)

前言 Midjourney V6.1版本&#xff0c;堪称细节狂魔&#xff0c;在人像上简直登峰造极&#xff01; 自V6.1版本更新以来我一次次被Midjourney生成的人像震惊到&#xff01;用Midjourney官网分享的提示词微调&#xff0c;生成图像&#xff0c;每一张都绝美&#xff0c;晚上玩到…

Go语言并发编程实战:掌握并发模型,提升应用性能

1. 引言 1.1 并发编程的重要性 在现代软件开发中&#xff0c;并发编程已经成为了一种不可或缺的技术。随着多核处理器的普及和云计算的兴起&#xff0c;应用程序需要能够有效地利用并发处理能力&#xff0c;以提高性能和用户体验。并发编程使得程序能够在同一时间内处理多个任…

《MySQL 数据库》 安装、配置、字符集修改 —/—<1>

一、MySQL介绍 1、介绍MySQL 数据库是数据的仓库&#xff0c;与普通的数据仓库不同的是,数据库依据数据结构来组织数据,因为数据结构的存在,所以看到的数据是条理化的 数据库和普通文件系统的区别在与&#xff1a;数据库拥有数据结构,能都快速查找对应的数据 常说的MySQL数据库…

Pytorch-张量的创建

&#x1f308;个人主页&#xff1a; 羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 简介&#xff1a; 一个Python深度学习框架&#xff0c;它将数据封装成张量&#xff08;Tensor&#xff09;进行处理&#xff0c;Python中的张量就是元素为同一种数据类型的多维…

南京观海微电子----静电放电ESD保护设计方案

ESD 保护方案 图 5- 2 所示的片上保护设计概念被用来避免来自几乎随机组合的引脚之间的HBM / MM ESD 应力损伤。对每一个输入或输出引脚&#xff0c; 在压焊点与 VDD 和 VSS 电源线之间采用 ESD 钳位器件&#xff0c; 用于泄放 I / O 引脚上的四种模式的 ESD 应力。为了克服引脚…

Qt题目知多少-3

1.事件与信号的区别 使用场合和时机不同 一般情况下&#xff0c;在“使用”窗口部件时&#xff0c;我们经常需要使用信号&#xff0c;并且会遵循信号与槽的机制&#xff1b;而在“实现”窗口部件时&#xff0c;我们就不得不考虑如何处理事件了。举个例子&#xff0c;当使用 QPu…

界面组件Kendo UI for Vue 2024 Q2亮点 - 发布一系列新组件

随着最新的2024年第二季度发布&#xff0c;Kendo UI for Vue为应用程序开发设定了标准&#xff0c;包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示&#xff0c;从设计到代码的生产力增强、可访问性改…