多语言展示
当前在线:261今日阅读:113今日分享:31

Arduino数码管显示实验

学习了关于发光二极管(LED)的控制,还有一个值得介绍的就是7段数码管显示器,它将7个LED排列成8字形,另外加一个小数点,由不同的灯号组合搭配出0 - 9的数字显示。基本的7段数码管只有一位数字,也可以多个组合在一起显示多位数。
工具/原料
1

Arduino实验套件(Arduino UNO控制器,跳线,USB数据线,面包板)

2

7段数码管(共阳) * 1 个

3

470欧姆直插电阻 * 8个

4

实验跳线 * 若干

方法/步骤
1

准备实验所用的硬件,如图所示:

2

将下列程序复制到Arduino IDE中,如下图所示:byte DIGITAL_DISPLAY[10][8] = { //设置0-9数字所对应数组{ 1,0,0,0,0,1,0,0 }, // = 0{ 1,0,0,1,1,1,1,1 }, // = 1{ 1,1,0,0,1,0,0,0 }, // = 2{ 1,0,0,0,1,0,1,0 }, // = 3{ 1,0,0,1,0,0,1,1 }, // = 4{ 1,0,1,0,0,0,1,0 }, // = 5{ 1,0,1,0,0,0,0,0 }, // = 6{ 1,0,0,0,1,1,1,1 }, // = 7{ 1,0,0,0,0,0,0,0 }, // = 8{ 1,0,0,0,0,0,1,0 } // = 9};void setup() { //设定4-11号数字端口为输出for(int i=4;i<=11;i++){pinMode(i, OUTPUT); }}void loop() { //0-9数字显示for (int k = 0; k < 10; k++) {int pin = 4;for (int s = 0; s < 8; s++) {digitalWrite(pin, DIGITAL_DISPLAY[k][s]);pin++;}delay(1000); }}

3

如图所示,仅将 Arduino UNO 控制器使用 USB 数据线连接到电脑,选择正确的板型(Arduino UNO)、端口号。

4

点击上传按钮,无误情况下软件会显示如下结果,说明程序已经成功上传到控制器,上传成功后,断开 UNO 控制器和电脑的连接,进行实验电路的搭建。

5

硬件讲解:数码管显示器,如下图所示为7段数码管显示器的引脚对应关系、共阴极数码管和共阳极数码管的内部连接方式。其中 a, b, c, d, e, f, g, dp 均为发光二极管,所以我们在电路连接的时候,需要给每个引脚添加一个限流电阻,这就是为什么本实验要使用 8 个 470 欧姆电阻。

6

按照下图中的电路,进行实验硬件的连接,数码管接线详细说明:数码管引脚:a - 连接Arduino UNO D7; 数码管引脚:b - 连接Arduino UNO D6; 数码管引脚:c - 连接Arduino UNO D5; 数码管引脚:d -连接Arduino UNO D11; 数码管引脚:e -连接Arduino UNO D10; 数码管引脚:f - 连接Arduino UNO D8; 数码管引脚:g - 连接Arduino UNO D9; 数码管引脚:dp - 连接Arduino UNO D4;

7

使用USB线连接实验电路和电脑,此处USB线相当于给整个实验系统供电。硬件连接无误情况下,实验效果为数码管会循环显示数字“0”到数字“9”,除非去掉UNO控制器的供电。数字显示效果如下图所示:

8

代码回顾:1、数组代码:byte DIGITAL_DISPLAY[10][8]:数组是一种可访问的变量的集合。以下为几种创建数组的方法:myInts [6];  myPins [] = {2,4,8,3,6};  mySensVals [6] = {2,4,-8,3,2};  char message[6] = "hello";声明一个未初始化数组,例如:myPins。在myPins中,声明了一个没有明确大小的数组。编译器将会计算元素的大小,并创建一个适当大小的数组。当然也可以初始化数组的大小,例如在mySensVals中,注意,当声明一个char类型的数组时,初始化的大小必须大于元素的个数,以容纳所需的空字符。访问数组:数组是从零开始索引的,也就说,上面所提到的数组初始化,数组第一个元素是为索引0,因此:mySensVals [0] == 2,mySensVals [1] == 4,依此类推 。这也意味着,在包含十个元素的数组中,索引 9 是最后一个元素。因此, int myArray[10] = {9,3,2,4,3,2,7,8,9,11};  // myArray[9]的数值为11    myArray[10] 索引是无效的,它将会是任意的随机信息(内存地址) 若访问的数据超出数组的末尾(即索引数大于你声明的数组的大小 - 1),则将从其他内存中读取数据。从这些地方读取的数据,除了产生无效的数据外,没有任何作用。指定一个数组的值:mySensVals [0] = 10;从数组中访问一个值:X = mySensVals [4];数组和循环数组往往在for循环中进行操作,循环计数器可用于访问每个数组元素。例如:将数组中的元素通过串口打印 int i;  for (i = 0; i < 5; i = i + 1) {  Serial.println(myPins[i]);  }2、for (int k = 0; k < 10; k++):循环语句for循环开头有3个部分:(初始化;条件;增量计数){ //语句 }“初始化”只在循环开始执行一次。每次循环,都会检测一次条件;如果条件为真,则执行语句和“增量计数”,之后再检测条件。当条件为假时,循环终止。代码位置如图所示:

9

为了方便大家实验,防止在复制代码的时候出现错误,特将代码和电路图Fritzing源文件上传至网盘供大家下载学习。下载地址:http://pan.baidu.com/s/1kUFYzHH,打开链接后,如图所示,点击下载即可

注意事项
1

注意本文中使用的数码管为共阳极数码管,若使用共阴数码管则显示结果将不正确。

2

您在试验过程中遇到的问题,或是对我写的有什么建议,都可以给我留言,我会及时的给大家回复。

推荐信息