|
[md]## 一、数码管显示
在学习了蜂鸣器、LM35温度传感器之后,我们今天要开始学习又一个新的模块——数码管,在之前你一定苦于测温无法显示,而在学习了数码管之后,你可以通过数码管对一些你想显示的数字进行显示。
## 二、实验器材
+ UNO控制板:1块
+ 一位共阳极数码管:1枚
+ 面包板:1块
+ 面包板跳线:若干
+ 220Ω电阻:1个
## 三、连线示意图
图6-1
## 四、硬件连接图
图6-2
## 五、硬件知识要点
数码管是最常用的显示器件之一,有使用方法简单、价格低廉、亮度高、寿命长等优点。
实际上就是 8 个 LED 灯用 8 字形的透明塑料封装一起做成的,我们套件中配的是一位共
阳数码管。如图6-3所示:
图6-3
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共 PWR 接到电源输入 PWR 上,当某一字段发光二极管为低电平时,相应字段就点亮。当某一字段的高电平时,相应字段就不亮。下图6-4为共阴数码管。
图6-4
## 六、程序编写[/md]- void setup() {
-
- pinMode(13,OUTPUT); //激活13号引脚,我们需要用它供电
- for(int n=2;n<=9;n++)
- {
- pinMode(n,OUTPUT);
- }
- }
- void loop()
- {
-
- digitalWrite(13,1); //这个就是HIGH 和LOW 的另一种写法 0代表LOW 1代表HIGH
- /*==========显示0=============*/
- int n0[8]={0,0,0,0,0,0,1,1}; //定义数组 通过0,1定义各数码管的明灭,
- int z=0;
- for(int x=2;x<=9;x++) //采用循环方式依次点亮指定的数码管led(数组中0为点亮),单位时间只点亮1个led
- {
- digitalWrite(x,n0[z]); //点亮led语句 X为引脚数 n0[z]为数组z为0-8的变量,来依次读取数组中的值
- z++;
- if (z>=9) //防止变量z累加超过了8
- z=0;
- }
- delay(1000);
- /*==========显示1=============*/
- int n1[8]={1,0,0,1,1,1,1,1};
- z=0;
- for(int x=2;x<=9;x++)
- {
- digitalWrite(x,n1[z]);
- z++;
- if (z>=9)
- z=0;
- }
- delay(1000);
- /*==========显示2=============*/
- int n2[8]={0,0,1,0,0,1,0,1};
- z=0;
- for(int x=2;x<=9;x++)
- {
- digitalWrite(x,n2[z]);
- z++;
- if (z>=9)
- z=0;
- }
- delay(1000);
- /*==========显示3=============*/
- int n3[8]={0,0,0,0,1,1,0,1};
- z=0;
- for(int x=2;x<=9;x++)
- {
- digitalWrite(x,n3[z]);
- z++;
- if (z>=9)
- z=0;
- }
- delay(1000);
- /*==========显示4=============*/
- int n4[8]={1,0,0,1,1,0,0,1};
- z=0;
- for(int x=2;x<=9;x++)
- {
- digitalWrite(x,n4[z]);
- z++;
- if (z>=9)
- z=0;
- }
- delay(1000);
- }
复制代码
[md]同理,可以通过相同的方法设置显示数字5—9。
## 七、程序知识要点
在程序中,我们还看到了
digitalWrite(13,1)这样的语法,在Arduino语言中HIGH和LOW两种状态,同样可以用1以及0这两种方法来写,其中1就代表着高电平,0代表着低电平。
## 八、拓展阅读
很多人一定觉得上面的程序太过麻烦,那么接下来,我们给大家提供一种更为简单的程序:[/md]- //共阳数码管,显示 0-9 数字
- int ledCount = 8;
- const unsigned char code[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
- int ledPins[] = {
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- }; // 对应的 led 引脚
- void setup()
- {
- for (int thisLed = 0; thisLed < ledCount; thisLed++)
- {
- pinMode(ledPins[thisLed], OUTPUT);//设置引脚都为输出状态
- }
- }
- void deal(unsigned char value)// 数据处理,把需要处理的 byte 数据写到对应的引脚端口。
- {
- for (int i = 0; i < 8; i++)
- digitalWrite(ledPins[i], !bitRead(value, i)); //按位取反
- }
- void loop()
- {
- for (int i = 0; i < 10; i++)
- { // 循环显示 0-9 数字
- deal(code[i]); //读取对应的段码值
- delay(1000); //延迟一秒
- }
- }
复制代码 |
|