嵌入式入门学习——7Protues导入Arduino IDE生成的固件和Arduino使用库文件开发

0 系列文章入口

嵌入式入门学习——0快速入门,Let‘s Do It!

1 Arduino IDE

请自行下载安装,点击标题链接即可,下载完成后
1新建工程并保存,注意工程名和工程所在的文件夹必须同名。
2新建工程的时候注意选择板子型号是Arduino UNO
在这里插入图片描述
3点击添加库文件的按钮
4输入SevSeg
5点击安装(需要联网)
在这里插入图片描述
6:点击Sketch
7点击include lib
8点击SevSeg
在这里插入图片描述
9 可见自动添加了头文件(当然你也可以收到添加,就不用做步骤6、7、8了)
10可见之前安装好SevSeg库的提示(当然做好第5步之后就可以看见了)
在这里插入图片描述

2 SevSeg

理解和使用库的最快方式就是看示例代码
我是怎么找到的呢?打开SevSeg头文件,里面给GitHub仓库链接了,直接看作者的原汁原味的一手资料。
当然也可以看整理好的资料中文说明文档

/* SevSeg Counter ExampleCopyright 2020 Dean ReadingThis example demonstrates a very simple use of the SevSeg library with a 4digit display. It displays a counter that counts up, showing deci-seconds.*/#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment controller objectvoid setup() {byte numDigits = 4;byte digitPins[] = {2, 3, 4, 5};byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};bool resistorsOnSegments = false; // 'false' means resistors are on digit pinsbyte hardwareConfig = COMMON_ANODE; // See README.md for optionsbool updateWithDelays = false; // Default 'false' is Recommended![请添加图片描述](https://i-blog.csdnimg.cn/direct/2a97b365d3e643328e1cd308ad9eabf3.gif)bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zerosbool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connectedsevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,updateWithDelays, leadingZeros, disableDecPoint);sevseg.setBrightness(90);
}void loop() {static unsigned long timer = millis();static int deciSeconds = 0;if (millis() - timer >= 100) {timer += 100;deciSeconds++; // 100 milliSeconds is equal to 1 deciSecondif (deciSeconds == 10000) { // Reset to 0 after counting for 1000 seconds.deciSeconds=0;}sevseg.setNumber(deciSeconds, 1);}sevseg.refreshDisplay(); // Must run repeatedly
}/// END ///

我们简单修改一下例程,修改部分我加了中文注释

#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment controller objectvoid setup() {byte numDigits = 6;//我们是六位byte digitPins[] = {8, 9, 10, 11,12,13};//我们是IO8到13byte segmentPins[] = {0, 1, 2, 3, 4, 5, 6, 7};//我们是IO0到7bool resistorsOnSegments = false; // 'false' means resistors are on digit pinsbyte hardwareConfig = COMMON_CATHODE; // 我们是共阴bool updateWithDelays = false; // Default 'false' is Recommendedbool leadingZeros = false; // Use 'true' if you'd like to keep the leading zerosbool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connectedsevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,updateWithDelays, leadingZeros, disableDecPoint);sevseg.setBrightness(90);
}void loop() {static unsigned long timer = millis();static int deciSeconds = 0;if (millis() - timer >= 100) {timer += 100;deciSeconds++; // 100 milliSeconds is equal to 1 deciSecondif (deciSeconds == 10000) { // Reset to 0 after counting for 1000 seconds.deciSeconds=0;}sevseg.setNumber(deciSeconds, 1);}sevseg.refreshDisplay(); // Must run repeatedly
}

添加Arduino编译出来的固件,但是可见最低位闪烁,是仿真的原因:这个库用了类似于pwm的方式控制LED显示的亮度,所以要的刷新速率非常高,而仿真的时候LED器件的刷新速率是100毫秒,远远低于要求的刷新速率。
真实硬件不会这样,看来光仿真也不行,必要的时候还是要上硬件,下周把硬件搞到我在硬件上跑一下,看一下效果。
在这里插入图片描述

3 看看底层

可见他把段码和位码都定义好了

static const int32_t powersOf16[] = {0x1, // 16^00x10,0x100,0x1000,0x10000,0x100000,0x1000000,0x10000000
}; // 16^7// digitCodeMap indicate which segments must be illuminated to display
// each number.
static const uint8_t digitCodeMap[] = {// GFEDCBA  Segments      7-segment map:0b00111111, // 0   "0"          AAA0b00000110, // 1   "1"         F   B0b01011011, // 2   "2"         F   B0b01001111, // 3   "3"          GGG0b01100110, // 4   "4"         E   C0b01101101, // 5   "5"         E   C0b01111101, // 6   "6"          DDD0b00000111, // 7   "7"0b01111111, // 8   "8"0b01101111, // 9   "9"0b01110111, // 65  'A'0b01111100, // 66  'b'0b00111001, // 67  'C'0b01011110, // 68  'd'0b01111001, // 69  'E'0b01110001, // 70  'F'0b00111101, // 71  'G'0b01110110, // 72  'H'0b00110000, // 73  'I'0b00001110, // 74  'J'0b01110110, // 75  'K'  Same as 'H'0b00111000, // 76  'L'0b00000000, // 77  'M'  NO DISPLAY0b01010100, // 78  'n'0b00111111, // 79  'O'0b01110011, // 80  'P'0b01100111, // 81  'q'0b01010000, // 82  'r'0b01101101, // 83  'S'0b01111000, // 84  't'0b00111110, // 85  'U'0b00111110, // 86  'V'  Same as 'U'0b00000000, // 87  'W'  NO DISPLAY0b01110110, // 88  'X'  Same as 'H'0b01101110, // 89  'y'0b01011011, // 90  'Z'  Same as '2'0b00000000, // 32  ' '  BLANK0b01000000, // 45  '-'  DASH0b10000000, // 46  '.'  PERIOD0b01100011, // 42 '*'  DEGREE ..0b00001000, // 95 '_'  UNDERSCORE
};

可见也是用For循环一个个引脚赋值

// segmentOn
/******************************************************************************/
// Turns a segment on, as well as all corresponding digit pins
// (according to digitCodes[])
void SevSeg::segmentOn(uint8_t segmentNum) {digitalWrite(segmentPins[segmentNum], segmentOnVal);for (uint8_t digitNum = 0 ; digitNum < numDigits ; digitNum++) {if (digitCodes[digitNum] & (1 << segmentNum)) { // Check a single bitdigitalWrite(digitPins[digitNum], digitOnVal);}}
}

(好像还不能用这个库做数字时钟仿真,我再研究一下哈,要不直接换LCD液晶吧)

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

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

相关文章

循环移位的学习

循环移位&#xff08;Rotational Shift&#xff09;&#xff0c;也称为循环位移&#xff0c;是一种特殊的位移操作。在循环移位中&#xff0c;移出的位会被重新放入到另一端&#xff0c;从而实现循环效果。与逻辑移位和算术移位不同&#xff0c;循环移位不丢失任何位&#xff0…

php中的错误和异常捕获

目录 一&#xff1a; 异常&#xff08;Exceptions&#xff09; 二&#xff1a; 错误&#xff08;Errors&#xff09; 三&#xff1a;实际项目的异常和错误处理 在PHP中&#xff0c;异常&#xff08;Exceptions&#xff09;和错误&#xff08;Errors&#xff09;是两个不同的…

比亚迪车机安装第三方应用教程

比亚迪车机安装第三方应用教程 比亚迪车机U盘安装APP&#xff0c; 无论是dlink3.0还是4.0都是安卓系统&#xff0c;因此理论上安卓应用是都可以安装的&#xff0c;主要就是横屏和竖屏的区别。在比亚迪上安装软件我主要推荐两种方法。 第一种&#xff0c;直接从电脑端下载安装布…

Standard IO

为了提高可移植性&#xff0c;将通用IO接口经过再封装就形成了标准IO&#xff0c;标准IO不仅适用于Unix环境&#xff0c;也兼容非Unix环境&#xff0c;这也是为什么说我们应该尽可能的使用标准IO&#xff0c;通用IO通过文件描述符fd来与文件交互&#xff0c;为了以示区分&#…

DCGAN的原理(附代码解读)

学习DCGAN之前需要了解一下转置卷积 可以参考学DCGAN对抗网络之前--转置卷积(附代码解读)-CSDN博客 1.DCGAN对于GAN的改进之处 网络架构的优化&#xff1a; DCGAN在生成器和判别器中明确使用了卷积层和卷积转置层&#xff08;也称为反卷积层或分数阶卷积层&#xff09;。这一…

『 Linux 』HTTPS

文章目录 HTTPS协议密钥加密的原因加密方式数据指纹网络通信加密方案及短板CA认证CA证书的细节以及如何保证服务端公钥的安全性和数据完整性 CA认证后对称加密与非对称加密配合使用的安全性中间人的攻击方式 HTTPS协议 HTTPS协议并不是一个独立的协议,其是一种以HTTP协议为基础…

基于SSM的洗浴中心管理系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 方案设计&#xff08;研究的基本内容&#xff0c;拟解决的基本问题&#xff0c;研究步骤、方法及措施&#xff09;&#xff1a; 研究的基本内容&#xff1a;根据当今社会市场所需&#xff0c;通过对比多家洗浴中心进行深入细致的…

第二十九篇:图解TCP三次握手,看过不会忘,从底层说清楚,TCP系列四

⼀开始&#xff0c;客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端⼝&#xff0c;处于 LISTEN 状态。 接下来这部分内容的介绍将影响你能不能彻底理解了TCP的三次握手。 一、划重点&#xff1a;只有服务端启动了端口监听&#xff0c;客户端TCP握手才能建立连接&…

ubuntu系统库和Anaconda库冲突问题

之前安装opencv时没出现过这种问题,自从安装Anaconda后就总遇到问题。记录下自己的解决过程。 目录 第一步 第二步 第三步 安装opencv时出现以下问题: /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_prep_cif@LIBFFI_BASE_7.…

若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 实现使用 Excel 文件批量导入 1.1 导入功能的前端具体实现 1.2 导入功能的后端具体实现 1.3 使用 EasyExcel 框架实现 Excel 读、写功能 1.4 将 Easy Excel 集成到…

路径跟踪之导航向量场(二)——三维导航向量场

上一期文章介绍了二维平面下的导航向量场计算方法&#xff0c;本期文章将介绍三维空间中&#xff0c;导航向量场及扩展。 本文主要介绍论文[1]中提出的一种基于导航向量场的航迹跟踪算法。此外&#xff0c;虽然本文以三维航迹为例进行介绍&#xff0c;但该方法可非常方便的拓展…

智能优化算法-生物地理学算法(BBO)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 生物地理学优化算法 (Biogeography-Based Optimization, BBO) 是一种基于生物地理学原理的元启发式优化算法&#xff0c;由Dan Simon于2008年提出。BBO通过模拟物种在不同栖息地之间的迁移过程来搜索最优解&…

【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;断开连接的本质 二&#xff1a;四次挥手 1&#xff1a;FIN 2&#xff1a;过程梳理 …

新时代AI桌宠:XGO Rider让你的办公室瞬间高大上

​ XGO Rider Luwu 智能打造了桌面双轮足式机器人 XGO Rider&#xff0c;这款全球首创的轮腿式桌面AI机器人&#xff0c;正在悄然改变我们的办公环境。它不仅是一个高科技玩具&#xff0c;更是一个能大幅提升工作效率和办公室科技感的智能助手。 XGO Rider 新时代“桌宠” micr…

基于java+springboot的宇宙动漫网站

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图 前言 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 项目介绍 本系统为用户而设计制作宇宙动漫网站&#xff0c;旨在实现宇宙动漫智能化、现代化管理。本宇宙动漫管理自…

爬虫——scrapy的基本使用

一&#xff0c;scrapy的概念和流程 1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 框架就是把之前简单的操作抽象成一套系统&#xff0c;这样我们在使用框架的时候&#xff0c;它会自动的帮我们完成很…

【数据结构与算法】之有序链表去重(保留重复元素)

目录 1.问题描述 2.思路讲解 3.Java 代码实现 4.代码解释 5.复杂度分析 6.其它方法 6.1 递归实现 6.2 双指针 7.总结 相关教程&#xff1a; 有序链表去重&#xff08;不保留重复元素&#xff09; 数据结构之链表详解 递归详解 1.问题描述 给定一个已排序的单链表…

Java可以做人工智能吗-回答是当然可以

Java在人工智能应用开发中的角色与优势 人工智能主要分为两个部分&#xff1a;一个是做底层的大语言模型的训练&#xff0c;另一个是基于大模型进行业务应用。Java最适合做的就是第二个方面&#xff0c;即基于大模型构建业务应用。由于过去大量的企业级应用都是使用Java开发的…

网络服务请求流程简单理解

网络流程&#xff1a; DNS负责将域名解析为IP地址&#xff0c;ALB可以在多个服务实例之间分配流量&#xff0c;APISIX作为API网关处理更细粒度的流量管理&#xff0c;Service在Kubernetes中为Pod提供稳定的访问入口&#xff0c;而Kubernetes则负责整个应用的部署、扩展和运维。…