Arduino 入门教程GO 第六章 一位数码管的应用-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 742|回复: 0

Arduino 入门教程GO 第六章 一位数码管的应用

[复制链接]
发表于 2022-1-17 14:15 | 显示全部楼层 |阅读模式
[md]## 一、数码管显示

在学习了蜂鸣器、LM35温度传感器之后,我们今天要开始学习又一个新的模块——数码管,在之前你一定苦于测温无法显示,而在学习了数码管之后,你可以通过数码管对一些你想显示的数字进行显示。

## 二、实验器材

+ UNO控制板:1块

+ 一位共阳极数码管:1枚

+ 面包板:1块

+ 面包板跳线:若干

+ 220Ω电阻:1个

## 三、连线示意图

01.jpg
图6-1


## 四、硬件连接图

02.jpg
图6-2


## 五、硬件知识要点

数码管是最常用的显示器件之一,有使用方法简单、价格低廉、亮度高、寿命长等优点。

实际上就是 8 个 LED 灯用 8 字形的透明塑料封装一起做成的,我们套件中配的是一位共

阳数码管。如图6-3所示:

03.jpg
图6-3


共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共 PWR 接到电源输入 PWR 上,当某一字段发光二极管为低电平时,相应字段就点亮。当某一字段的高电平时,相应字段就不亮。下图6-4为共阴数码管。

04.jpg
图6-4


## 六、程序编写[/md]
  1. void setup() {  
  2.       
  3.      pinMode(13,OUTPUT);     //激活13号引脚,我们需要用它供电            

  4.     for(int n=2;n<=9;n++)
  5.    {
  6.    pinMode(n,OUTPUT);
  7.    }
  8. }


  9. void loop()
  10. {
  11.    
  12. digitalWrite(13,1); //这个就是HIGH  和LOW 的另一种写法  0代表LOW   1代表HIGH


  13.   /*==========显示0=============*/  
  14. int n0[8]={0,0,0,0,0,0,1,1};       //定义数组 通过0,1定义各数码管的明灭,
  15.   int z=0;
  16.   for(int x=2;x<=9;x++)          //采用循环方式依次点亮指定的数码管led(数组中0为点亮),单位时间只点亮1个led
  17.   {
  18.     digitalWrite(x,n0[z]);         //点亮led语句  X为引脚数  n0[z]为数组z为0-8的变量,来依次读取数组中的值
  19.     z++;
  20.     if (z>=9)                    //防止变量z累加超过了8
  21.     z=0;
  22.   }
  23.   delay(1000);
  24. /*==========显示1=============*/  
  25. int n1[8]={1,0,0,1,1,1,1,1};
  26.   z=0;
  27.   for(int x=2;x<=9;x++)
  28.   {
  29.     digitalWrite(x,n1[z]);
  30.     z++;
  31.     if (z>=9)
  32.     z=0;
  33.   }
  34.   delay(1000);
  35. /*==========显示2=============*/  
  36. int n2[8]={0,0,1,0,0,1,0,1};
  37.   z=0;
  38.   for(int x=2;x<=9;x++)
  39.   {
  40.     digitalWrite(x,n2[z]);
  41.     z++;
  42.     if (z>=9)
  43.     z=0;
  44.   }
  45. delay(1000);  
  46. /*==========显示3=============*/  
  47. int n3[8]={0,0,0,0,1,1,0,1};
  48.   z=0;
  49.   for(int x=2;x<=9;x++)
  50.   {
  51.     digitalWrite(x,n3[z]);
  52.     z++;
  53.     if (z>=9)
  54.     z=0;
  55.   }
  56. delay(1000);  
  57. /*==========显示4=============*/  
  58. int n4[8]={1,0,0,1,1,0,0,1};
  59. z=0;
  60.   for(int x=2;x<=9;x++)
  61.   {
  62.     digitalWrite(x,n4[z]);
  63.     z++;
  64.     if (z>=9)
  65.     z=0;
  66.   }
  67. delay(1000);
  68. }
复制代码

[md]同理,可以通过相同的方法设置显示数字5—9。

## 七、程序知识要点

在程序中,我们还看到了

digitalWrite(13,1)这样的语法,在Arduino语言中HIGH和LOW两种状态,同样可以用1以及0这两种方法来写,其中1就代表着高电平,0代表着低电平。

## 八、拓展阅读

很多人一定觉得上面的程序太过麻烦,那么接下来,我们给大家提供一种更为简单的程序:[/md]
  1. //共阳数码管,显示 0-9 数字
  2. int ledCount = 8;
  3. const unsigned char code[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
  4. int ledPins[] = {
  5. 0,
  6. 1,
  7. 2,
  8. 3,
  9. 4,
  10. 5,
  11. 6,
  12. 7,
  13. }; // 对应的 led 引脚
  14. void setup()
  15. {
  16. for (int thisLed = 0; thisLed < ledCount; thisLed++)
  17. {
  18. pinMode(ledPins[thisLed], OUTPUT);//设置引脚都为输出状态
  19. }
  20. }
  21. void deal(unsigned char value)// 数据处理,把需要处理的 byte 数据写到对应的引脚端口。
  22. {
  23. for (int i = 0; i < 8; i++)
  24. digitalWrite(ledPins[i], !bitRead(value, i)); //按位取反
  25. }
  26. void loop()
  27. {
  28. for (int i = 0; i < 10; i++)
  29. { // 循环显示 0-9 数字
  30. deal(code[i]); //读取对应的段码值
  31. delay(1000); //延迟一秒
  32. }
  33. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 08:09 , Processed in 0.075071 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表