文章插图
3. 主要知识点
1)首先是明白数码管显示数字的道理,即为什么代码中有一套二维数组int [10][8]对应数字0~9(二维数组,10对应的是0~9这10个数,8是对应8段led对应的电平)
其实道理也很简单,以显示0为例,数码管中8段LED,只要b、a、f、e、d、c这6段LED亮,其他2段灭即可,对照连线,即2~9数字引脚高低电平组合就应该为{0 0 0 1 1 0 0 0}(共阳极数码管,低电平对应段亮),其他数字道理类似 。当然,这个电平组合码和连线是有关的,如果连线对应的引脚变了,那就得重新分析 。这样,0~9这10个数就分别有10组这样的高低电平组合码,所以构建了一个二维数组,方便调用 。而要把这种组合码写入对应的引脚,是用了循环的方式,即:
for(int pin=2;pin<=9;pin++){//引脚pin2~9循环,,显示上面二维数组第i个元素(第i行)digitalWrite(pin,number[i][pin-2]);//第i行元素就是显示数字i的数码管高低组合码
还是以0为例,整个循环过程如下:
pin=2 --> n[0][0] =0 --> (2,0) --> b段点亮
pin=3 --> n[0][1] =0 --> (3,0) --> a段点亮
pin=4 --> n[0][2] =0 --> (4,0) --> f 段点亮
pin=5 --> n[0][3] =1 --> (5,1) --> g段不点亮
pin=6 --> n[0][4] =1--> (6,1) -->DP段不点亮
pin=7 --> n[0][5] =0 --> (7,0) --> c段点亮
pin=8 --> n[0][6] =0 --> (8,0) -->d段点亮
pin=9 --> n[0][7] =0--> (9,0) -->e段点亮
文章插图
当然这个循环效果(即2~9引脚对应的数码管相应地亮或灭)是看不出来的,因为时间太快了,直接呈现这个数字了
2)红外遥控器部分参考上一个笔记【2】,就可以知晓每个按钮对应的红外解码结果(十六进制),把这个项目要用到的几个按钮的红外解码构成一个数组[12](注意.value是 long 型)
3)注意逻辑关系
第一层是判断是否接收到遥控器发送的信号,分为是和否两种情况;
第二层是在第一层为是的情况下,判断收到的是什么码,对应哪个按钮,又分为三种情况 。
详细的解释见代码注释 。
4)为了对遥控器按-发送-接收这一套流程是否成功有个直观判断,程序中加入了一个13号引脚高低电平变换操作(板载有个对应LED灯),这样这个LED的亮灭就代表这个按钮到接收的操作完成了,如果出现其他数码管没有预期效果的情况,至少可以通过这个现象排除掉一个可能 。
5)一个问题,就是希望随机显示一个数,用了(0,10)这个函数,但是始终显示数字7,不知什么原因,估计还是函数使用有问题 。
【Arduino基础入门之十 红外遥控1位数码管的显示】另外还犯过一个错误,就是把这个随机生成函数放到了loop()的里面,导致数码管一直显示8,用串口查了一下,发现确实是生成的随机数,我猜想应该是因为loop()里面循环速度太快了,所以随机数不断循环显示,导致各个数码管都亮,看起来就是8了 。
【1】 教程 15-红外接收 - DF创客社区 - 分享创造的喜悦 项目十五红外遥控数码管数码管,常见的用来显示数字的,比如像计算器 。在本实验之前我们先来了解一下数码管是如何工作的 。数码管,其实也算是LED中的一种 。数码管的每一段,都是一个独立的LED,通过数字引脚来控制相应段的亮灭就能达到显示数字的效果 。下面让我们通过实验的方式来感受一下数码管的神奇之处吧!所需元件硬件连接按下图连线图连接,注意数码管各段所对应的引脚 。右边引脚说明图上为什么画这么几个箭头呢?个人...
- 学电脑零基础怎样才可以快速学
- 漏洞扫描神器Xray,从入门到使用
- 技巧 电脑打字入门基础知识
- C语言项目实战:《连连看》基础项目丨460 行源码注释
- 使用 Visual Studio 2019 【在更】基础 | C 语言笔记
- Java日常练习5 Java从入门到放弃篇16
- Spring4-快速入门之在IOC容器中装配Bean
- 5、绘图基础
- 超详细解读+快速入门 一文快速了解ClickHouse 战斗民族的开源搜索引擎
- 寄存器操作 8、stm32F103入门学习--点亮LED(向库函数操作迈进!)