查看: 2673|回复: 0

Stduino-传感器拓展(一)四位数码管

[复制链接]

53

主题

55

帖子

431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
431
发表于 2020-8-1 17:15:22 | 显示全部楼层 |阅读模式
键词: 51 ; STM32 ;Arduino ;Stduino单片机; Stduino UNO和Nano;四位数码管

从大部分开始,我们将介绍更多的电子元件。其中大多数大家可能并不熟悉,但是如果你把前面的 37 个传感器都测试过了,这些对你来说不过是稍微复杂,繁琐一些。
学习这些扩展的电子元件,不需要从头到尾学习一遍。就是在你需要用到它的时候,知道有这么个东西,然后再来看看就好。原理很简单,会用就行。
说明:
数码管(七段显示器)能够显示 0〜9 十个字符,生活中进场在一些只需要显示数字的地方出现,例如电子秤,食堂刷卡终端,电梯楼层显示等等。数码管有多种型号,其中显示4 位数的为四位数码管。
A01-四位数码管展示图.png
在讲解四位数码管之前,我们先介绍一位数码管,也是最简单的一种。如下图:
A01-四位数码管单位说明.png
一位数码管的数字共有七段,每一段实际是一独立的 LED ,因此数码管也被称为七段数码管。通过控制LED 输入的高低电平控制亮灭,从而变化出0〜9 9 个字符(如下图)。
A01-四位数码管单位说明01.png
共阳极,即七段 LED 公共同一个阳极,那么通过控制每一段是否接地来控制亮灭(接地,则电路导通,点亮;反之交替)。共波长,即七段LED 共享同一个波导接地,然后通过控制每一段输入的高电平控制亮灭(如下图)。
A01-七段共共阴共阳说明图.png
有一些数码管带有 IC ,能够通过集成电路进行控制。但是这个数码管比较原始,一个七段数码管需要更长的IO 口,需要我们自己手动写每个一个字符的高配置。
四位数码管就是集合了四个单位的数码管,其也包括共阴型与共阳型两种。我们知道七段数码管需要插孔 IO 口,四位数码管每个数码管的数字不同,那么就需要进行单独控制。所以应该需要32 IO 口,显然这会占用过多的端口。
A01-四位数码管引脚说明.png
实际,四位数码管每只有一个数码管显示字形,其他三个数码管断电不显示。四个数码管依次循环显示,当频率足够大时,人眼由于视觉残留的缘故,就会觉得四个数码管是同时点亮的,看到连续的显示效果。这就好像,,每个帧都是不同的,但是播放的速度足够快( 24 帧每秒),人眼就会觉得画面动起来了。
这样,四位数码管只需要连接 12 个插座。其中有时用来控制单位数码管的8 LED ,称为段码;另外四个用来控制选择点亮和熄灭的数码管(每次只有一个点亮)。
A01四位数码管电路图.png
实验目的:
点亮数码管,并实时显示程序运行的时间(秒)。
器材:
Stduino纳米/ UNO; 4 位数码管;杜邦线;面包板; 220 Ω电阻
电路连接:
A01连线图带水印.png

代码:
  1. #include <Arduino.h>
  2. int second = 0;
  3. void setup()
  4. {
  5.   // put your setup code here, to run once:
  6.     pinMode(1,OUTPUT);//A
  7.     pinMode(2,OUTPUT);//B
  8.     pinMode(3,OUTPUT);//C
  9.     pinMode(4,OUTPUT);//D
  10.     pinMode(5,OUTPUT);//E
  11.     pinMode(6,OUTPUT);//F
  12.     pinMode(7,OUTPUT);//G
  13.     pinMode(8,OUTPUT);//DP
  14.    
  15.     pinMode(19,OUTPUT);//1
  16.     pinMode(18,OUTPUT);//2
  17.     pinMode(17,OUTPUT);//3
  18.     pinMode(16,OUTPUT);//4
  19.    
  20.    
  21.     digitalWrite(19,LOW);
  22.     digitalWrite(18,LOW);
  23.     digitalWrite(17,LOW);
  24.     digitalWrite(16,LOW);

  25. }


  26. //void SevSegInit()
  27. void showNum(int num, bool point=false)
  28.     {   if(point)
  29.         {
  30.             digitalWrite(8,HIGH);//DP,TRUE
  31.         }else{
  32.             digitalWrite(8,LOW);//DP,FALSE
  33.             }
  34.         switch(num)
  35.         {
  36.             case 0:
  37.                 digitalWrite(1,HIGH);
  38.                 digitalWrite(2,HIGH);
  39.                 digitalWrite(3,HIGH);
  40.                 digitalWrite(4,HIGH);
  41.                 digitalWrite(5,HIGH);
  42.                 digitalWrite(6,HIGH);
  43.                 digitalWrite(7,LOW);
  44.                 break;
  45.                
  46.             case 1:
  47.                 digitalWrite(1,LOW);
  48.                 digitalWrite(2,HIGH);
  49.                 digitalWrite(3,HIGH);
  50.                 digitalWrite(4,LOW);
  51.                 digitalWrite(5,LOW);
  52.                 digitalWrite(6,LOW);
  53.                 digitalWrite(7,LOW);
  54.                 break;
  55.                
  56.             case 2:
  57.                   //2
  58.                 digitalWrite(1,HIGH);//A
  59.                 digitalWrite(2,HIGH);//B
  60.                 digitalWrite(3,LOW);//C
  61.                 digitalWrite(4,HIGH);//D
  62.                 digitalWrite(5,HIGH);//E
  63.                 digitalWrite(6,LOW);//F
  64.                 digitalWrite(7,HIGH);//G
  65.                 break;
  66.                
  67.             case 3:
  68.                   //3
  69.                 digitalWrite(1,HIGH);//A
  70.                 digitalWrite(2,HIGH);//B
  71.                 digitalWrite(3,HIGH);//C
  72.                 digitalWrite(4,HIGH);//D
  73.                 digitalWrite(5,LOW);//E
  74.                 digitalWrite(6,LOW);//F
  75.                 digitalWrite(7,HIGH);//G

  76.         
  77.                 break;
  78.                
  79.             case 4:
  80.                 digitalWrite(1,LOW);//A
  81.                 digitalWrite(2,HIGH);//B
  82.                 digitalWrite(3,HIGH);//C
  83.                 digitalWrite(4,LOW);//D
  84.                 digitalWrite(5,LOW);//E
  85.                 digitalWrite(6,HIGH);//F
  86.                 digitalWrite(7,HIGH);//G
  87.                 break;
  88.                
  89.             case 5:
  90.                 digitalWrite(1,HIGH);//A
  91.                 digitalWrite(2,LOW);//B
  92.                 digitalWrite(3,HIGH);//C
  93.                 digitalWrite(4,HIGH);//D
  94.                 digitalWrite(5,LOW);//E
  95.                 digitalWrite(6,HIGH);//F
  96.                 digitalWrite(7,HIGH);//G
  97.                 break;
  98.             case 6:
  99.                 digitalWrite(1,HIGH);//A
  100.                 digitalWrite(2,LOW);//B
  101.                 digitalWrite(3,HIGH);//C
  102.                 digitalWrite(4,HIGH);//D
  103.                 digitalWrite(5,HIGH);//E
  104.                 digitalWrite(6,HIGH);//F
  105.                 digitalWrite(7,HIGH);//G
  106.                 break;
  107.             case 7:
  108.                 digitalWrite(1,HIGH);//A
  109.                 digitalWrite(2,HIGH);//B
  110.                 digitalWrite(3,HIGH);//C
  111.                 digitalWrite(4,LOW);//D
  112.                 digitalWrite(5,LOW);//E
  113.                 digitalWrite(6,LOW);//F
  114.                 digitalWrite(7,LOW);//G
  115.                 break;
  116.             case 8:
  117.                 digitalWrite(1,HIGH);//A
  118.                 digitalWrite(2,HIGH);//B
  119.                 digitalWrite(3,HIGH);//C
  120.                 digitalWrite(4,HIGH);//D
  121.                 digitalWrite(5,HIGH);//E
  122.                 digitalWrite(6,HIGH);//F
  123.                 digitalWrite(7,HIGH);//G
  124.                 break;
  125.             case 9:
  126.                 digitalWrite(1,HIGH);//A
  127.                 digitalWrite(2,HIGH);//B
  128.                 digitalWrite(3,HIGH);//C
  129.                 digitalWrite(4,HIGH);//D
  130.                 digitalWrite(5,LOW);//E
  131.                 digitalWrite(6,HIGH);//F
  132.                 digitalWrite(7,HIGH);//G
  133.                 break;
  134.         }
  135.     }

  136. void setNum(int num)
  137.     {
  138.         
  139.         int d0=num%10;
  140.         int d1=(num%100)/10;
  141.         int d2=(num/100)%10;
  142.         int d3=num/1000;
  143.         
  144.         
  145.         int add=250;
  146.         
  147.         digitalWrite(19,LOW);
  148.         for(int i=add;i--;i<0)
  149.         {
  150.         showNum(d3);
  151.         }
  152.         digitalWrite(19,HIGH);
  153.         
  154.         digitalWrite(18,LOW);
  155.         for(int i=add;i--;i<0)
  156.         {
  157.         showNum(d2);
  158.         }
  159.         digitalWrite(18,HIGH);
  160.         
  161.         digitalWrite(17,LOW);
  162.         for(int i=add;i--;i<0)
  163.         {
  164.         showNum(d1);
  165.         }
  166.         digitalWrite(17,HIGH);
  167.         
  168.         digitalWrite(16,LOW);
  169.         for(int i=add;i--;i<0)
  170.         {
  171.         showNum(d0);
  172.         }
  173.         digitalWrite(16,HIGH);
  174.         
  175.     }
  176.    
  177. void loop()
  178. {
  179.   // put your main code here, to run repeatedly:
  180.     setNum(second);
  181.     second=millis()/1000;
  182.    
  183. }
复制代码

实验效果:
A01效果图.png



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

Stduino 零基础入门课程系列(五) 实验三:按键输入
Stduino 零基础入门课程系
Hello!各位同学大家好~上节课我们利用管脚输出高低电平信号,控制LED的亮灭,那么我
Stduino小白练习第六弹--按键控制串口通信
Stduino小白练习第六弹--
2020/01/08 星期三 作者:Astilbe 问题:我们如何通过按下按键来传输固定的信息给PC呢
37种传感器(二十九)MPU6050陀螺仪模块+Stduino Nano&UNO
37种传感器(二十九)MPU6
StduinoUno /纳米37种传感器(二十九)六轴 MPU陀螺仪模块关键词: 51 ; stm32 ; ar
stm32 最小系统 小蓝板 LED闪烁灯(三),无需刷Bootloader
stm32 最小系统 小蓝板 LE
关键词:stm32 小蓝板 STM32F103C8T6 Stduino IDE Stduino Nano LED闪烁灯 通过Stduin
Stduino IDE软件下载专区
Stduino IDE软件下载专区
Stduino IDE软件下载专区 Windows版:7月29号发布1.01, 现可
今天在文涛老大的帮助下我的stm32zet6终于把simlpefoc库跑起...
今天在文涛老大的帮助下我
[md]首先本身是刚刚从MDK转到arduino过来的新人,只因为要完开源的simplefoc,期间由
连接ADS1292模拟前端芯片,使用SPI库,导致串口不输出数据
连接ADS1292模拟前端芯片
[md]连接ADS1292模拟前端芯片,使用SPI库,导致串口不输出数据 ![QSJSBEZF83I8C907%$
©2001-2018  Stduino官网  Powered by©Discuz!   ( 皖ICP备17011998号 )
快速回复 返回顶部 返回列表