【Arduino实验10 数码管显示】

目录

一、实验目的

二、实验设备与环境

三、实验重点

四、实验难点

五、实验内容

5.1实验任务

5.2实验原理

5.3实验内容

5.4实验结果

5.5思考题


一、实验目的

        (1)掌握1位数码管模块的功能;

        (2)熟悉4位数码管模块的功能;

        (3)4位数码计时显示功能编程

二、实验设备与环境

        Arduino UNO套件、Arduino IDE、计算机、1位数码管、4位数码管、4个220欧限流电阻、面包板、杜邦线等

三、实验重点

        (1)实验电路连接;(2)编写数码显示控制程序;(3)功能调试

四、实验难点

        (1)数码显示控制程序编写

五、实验内容

5.1实验任务

        任务描述:1位数码显示;4位数码显示;自动计时显示

5.2实验原理

        1.1位数码管

        1位数码管,是由8段发光二极管(LED)封装在一起组成“8”字型加一个小数点数码显示器件,又称为LED数码管,是单片机应用最为广泛的显示器件。

        图中所示数码管有8个显示笔画“a,b,c,d,e,f,g,h”,上下共10个引脚,上、下方中间引脚是公共极。公共引脚是阴极的为共阴数码管,公共引脚是阳极的为共阳数码管。共阴、共阳极数码管从外形上无法判断,可以通过公共极与任一笔画LED引脚外加3V电压点亮二极管判断,或用万用表电阻档测量判断。

        共阳极1位数码管显示数字与对应各段发光LED电平对照表:

        ArduinoUNO R3板与1位数码管的电路接法:

        2.4位 数码管

        数码管根据位数不同,其封装的引脚也各不相同。但其内部都是将单个数码管的段选线a,b,c,d,e,f,g,dp发光二极管对应连接在一起,公共极则相互独立。使用时分别通过控制不同的位选线(即单个数码管的公共极)来控制单个数码管的显示。以人眼难以分辨的速度进行刷新显示,即可达到多个数码管同时显示的效果。

        四位数码管引脚分布如下图所示,其中1,2,3,4表示对应位数码管的公共极。

        四位数码管电路原理图:

        注:1, 2, 3, 4 引脚用于选择处理的数字位(共阴型,低电平有效;共阳极,高电平有效),是这一位数字的公共极。例如,选择数字1,则对1脚送出低电平。

        选好数字后,对abcdefgh各段LED的操作与一位数码管相同。

5.3实验内容

        1.实验电路搭建

        共阳极数码管公共引脚串联一个限流电阻接VCC, abcdefgh各脚顺序接Arduino数字D2-D9接口。

        2.1位数码管显示实验

        步骤1:数码管abcdefgh管脚测试

        1位数码管公共引脚接3.5V电源(或接地),其它引脚分别用杜邦线接地(或接3.5V电源),根据LED段的亮(灭)判断并识别abcdefgh的管序。

        步骤2:1位数码显示控制程序编写:

// 程序控制数码管显示
int digitPin= 2; //管脚D2连接到数码管的A脚
void setup() {
    for(int x=0; x<=7; x++)
    pinMode(digitPin+x, OUTPUT);//设置D2~D9引脚为输出
}
void loop() { 
    for (int x=0; x<16; x++) {
        // 每隔1秒,顺序显示0-9,A-F数字displayDigital(x); 
        //调用    displayDigit()显示数字函数
        delay(1000); //等待1秒
    }
}
//自定义函数,数码管显示数字
void displayDigital(unsigned intdigit) {
    //定义一个二维数组,存储各位数字的abcdefgh取值
    unsigned charabcdefgh[][8] = {
    {0,0,0,0,0,0,1,1},//0
    {1,0,0,1,1,1,1,1},//1
    {0,0,1,0,0,1,0,1},//2
    {0,0,0,0,1,1,0,1},//3
    {1,0,0,1,1,0,0,1},//4
    {0,1,0,0,1,0,0,1},//5
    {0,1,0,0,0,0,0,1},//6
    {0,0,0,1,1,1,1,1},//7
    {0,0,0,0,0,0,1,1},//8
    {0,0,0,1,1,0,0,1},//9
    {0,0,0,1,0,0,0,1},//A
    {1,1,0,0,0,0,0,1},//b
    {0,1,1,0,0,0,1,1},//C
    {1,0,0,0,0,1,0,1},//d
    {0,1,1,0,0,0,0,1},//E
    {0,1,1,1,0,0,0,1}//F};
    if ( digit >= 16 ) return;
    for (unsigned intx=0; x<8; x++){
        digitalWrite( digitPin+ x, abcdefgh[digit][x] );
    }
}
// 数码管每隔一秒显示一个数字从0~9,A~F

        步骤3:数码管显示测试

        3.4位数码显示控制

        步骤1:4位数码管管脚功能测试

        4将位数码管的1、2、3、4公共引脚分别接3.5V电源(或接地),其它引脚分别用杜邦线接地(或接3.5V电源),根据LED段的亮(灭)判断并识别公共引脚控制显示位数字的abcdefgh管序。

        步骤2:连接4位数码管驱动电路

        根据四位数码管引脚顺序,a,b,c,d,e,f,g,h引脚分别连接开Arduino UNO R3板的数字引脚D2、D3、D4、D5、D6、D7、D8、D9。数码管的4个数字位1,2,3,4引脚分别串联220Ω限流电阻,电阻另一端分别连接开发板的数字引脚D10、D11、D12、D13。

        注意:电路连线较多,检查正确无误后再通电测试,不要搭接错误!

        步骤3:编写4位数码管控制程序

// 4位数码管显示示例程序
int digitalPin= 2; //D2引脚连接数码管a脚,D3连b... D9连h
int weiPin= 10; // 第一位数引脚接口
void setup() {
    for(int x=0; x<4; x++) {
        pinMode(weiPin+x, OUTPUT); //设置各位公共引脚接口为输出
        digitalWrite(weiPin+x, HIGH);//公共引脚高电平,
    }
    for(int x=0; x<8; x++) {
        pinMode(digitalPin+x, OUTPUT); //设置各段led引脚接口为输出
    }
}
void loop() { 
    display(1, 3);//调用函数显示第1位数字3
    display(2, 2);//调用函数显示第2位数字2
    display(3, 1);//调用函数显示第3位数字1
    display(4, 0);//调用函数显示第4位数字0
}
// 定义数码管位显数字函数
void displayDigital(unsigned intdigit) {
    unsigned char abcdefgh[][8] = {//定义一个数组,存储不同数字的abcdefgh各段的取值
    {0,0,0,0,0,0,1,1},//0
    {1,0,0,1,1,1,1,1},//1
    {0,0,1,0,0,1,0,1},//2
    {0,0,0,0,1,1,0,1},//3
    {1,0,0,1,1,0,0,1},//4
    {0,1,0,0,1,0,0,1},//5
    {0,1,0,0,0,0,0,1},//6
    {0,0,0,1,1,1,1,1},//7
    {0,0,0,0,0,0,1,1},//8
    {0,0,0,1,1,0,0,1},//9
    {0,0,0,1,0,0,0,1},//A
    {1,1,0,0,0,0,0,1},//b
    {0,1,1,0,0,0,1,1},//C
    {1,0,0,0,0,1,0,1},//d
    {0,1,1,0,0,0,0,1},//E
    {0,1,1,1,0,0,0,1},//F
    {1,1,1,1,1,1,1,0},//DOT = 16
    {1,1,1,1,1,1,0,1},//MINUS= 17
    {1,1,1,1,1,1,1,1} //BLANK =18}
    if ( digit > 18)return;
    for (unsigned intx=0; x<8; x++)
    digitalWrite( digitalPin+ x, abcdefgh[digit][x] );
}
//指定位显示给定数字函数
void display(unsigned intwei, unsigned intdigit) {
    const intBLANK 18;
    for(int x=0; x<=3; x++) {
        digitalWrite(weiPin + x,LOW);// 数字位引脚置低平
    }
        displayDigital(BLANK); //调用函数关闭所有显示字段
        digitalWrite(weiPin +wei-1 , HIGH);//选择位显引脚,置高电平
        delay(1);
        displayDigital(digit);//调用函数位显数字字段
        delay(1000);//指定位的数字显示时间
}

        步骤4:功能测试更改delay(ms)函数的时间参数,分别为500ms、100ms、10ms、1ms时,观察显示结果有什么不同。

        4.程序扩展任务:根据以上示例,编写程序,实现一个累加计数器或累减计数器。

int digitalPin= 2; 
int weiPin= 10; 
int count = -1;
void setup() {
  for(int x=0; x<4; x++) {
    pinMode(weiPin+x, OUTPUT); 
    digitalWrite(weiPin+x, HIGH);
  }
  for(int x=0; x<8; x++) {
      pinMode(digitalPin+x, OUTPUT);
  }  
}
void loop() {  
  count++;
  if(count<10){
    display(4,count);
     delay(1000);
    }else if(count<100){
      for(int i=0;i<50;i++){
      display(3,count/10);
      delay(10);
      display(4,count%10);
      delay(10);
      }}else if(count<1000){
        for(int i=0;i<50;i++){
      display(2,count/100);
      delay(20/3);   
      display(3,count/10%10);
      delay(20/3);
      display(4,count%10);
      delay(20/3);
      }
   }
}
void displayDigital(unsigned int digit) {
    unsigned char abcdefgh[][8] = {//定义一个数组,存储不同数字的abcdefgh各段的取值
      {0,0,0,0,0,0,1,1},//0
      {1,0,0,1,1,1,1,1},//1
      {0,0,1,0,0,1,0,1},//2
      {0,0,0,0,1,1,0,1},//3
      {1,0,0,1,1,0,0,1},//4
      {0,1,0,0,1,0,0,1},//5
      {0,1,0,0,0,0,0,1},//6
      {0,0,0,1,1,1,1,1},//7
      {0,0,0,0,0,0,0,1},//8
      {0,0,0,1,1,0,0,1},//9
      {0,0,0,1,0,0,0,1},//A
      {1,1,0,0,0,0,0,1},//b
      {0,1,1,0,0,0,1,1},//C
      {1,0,0,0,0,1,0,1},//d
      {0,1,1,0,0,0,0,1},//E
      {0,1,1,1,0,0,0,1},//F
      {1,1,1,1,1,1,1,0},//DOT = 16
      {1,1,1,1,1,1,0,1},//MINUS= 17
      {1,1,1,1,1,1,1,1} //BLANK =18
      };
      if(digit > 18)return;
      for (unsigned int x=0; x<8; x++)
      digitalWrite( digitalPin+ x, abcdefgh[digit][x] );
      }
      //指定位显示给定数字函数
void display(unsigned int wei, unsigned int digit) {
  const int BLANK=18;
  for(int x=0; x<=3; x++) {
    digitalWrite(weiPin + x,LOW);// 数字位引脚置低电平
    }
    displayDigital(BLANK);    //调用函数关闭所有显示字段
    digitalWrite(weiPin +wei-1 , HIGH);//选择位显引脚
    displayDigital(digit);//调用函数位显数字字段
}

5.4实验结果

        结论:本次实验1根据LED段的亮(灭)判断并识别abcdefgh的管序。实验2结果为数码依次显示0 1 2 3。实验3,实现计时器的功能,可以计时。

        反思:首先,通过本次实验,我熟悉了掌握1位数码管模块的功能;熟悉4位数码管模块的功能;4位数码计时显示功能编程和各种函数的应用。其次,本次实验1根据LED段的亮(灭)判断并识别abcdefgh的管序。实验2结果为数码依次显示0 1 2 3。实验3,实现计时器的功能,可以计时。最后在本次实验中也遇到了一些问题,希望以后多学习,更加熟练,再接再厉。

        作品:

5.5思考题

1.如果用一位数码管做一个掷骰子选数字,怎样实现?

2.怎样实现4位数字的同时显示?为什么?

3.如果用4位数码管完成一个分、秒的计时器,怎样在现有示例程序的基础上实现?

  • 22
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,我可以为您提供一份七段数码管显示实验报告的模板,供您参考: 实验名称:七段数码管显示实验 实验目的:通过使用七段数码管实现数字的显示,掌握七段数码管的原理和使用方法。 实验器材:七段数码管Arduino开发板、杜邦线、电阻、面包板等。 实验原理:七段数码管是一种常用的数字显示器件,由7个LED灯和一个小数点组成。通过控制每个LED灯的亮灭,可以显示不同的数字。在本实验中,我们将使用Arduino开发板来控制七段数码管的亮灭,从而实现数字的显示实验步骤: 1. 将Arduino开发板与七段数码管连接,可以借助杜邦线和面包板等工具进行连接。具体连接方式如下: - 将数码管的7个LED灯分别连接到Arduino开发板的数字口2-8上,小数点连接到数字口9上。 - 将数码管的共阳极或共阴极引脚连接到Arduino开发板的数字口13上。 - 在两个数码管之间加一个电阻,限制电流,防止数码管烧坏。 2. 编写Arduino程序,控制七段数码管的亮灭。具体代码如下: ```c++ int pins[8] = {2, 3, 4, 5, 6, 7, 8, 9}; // 数码管对应的引脚 int nums[10][8] = { // 数字对应的LED灯亮灭状态 {1, 1, 1, 1, 1, 1, 0, 0}, // 0 {0, 1, 1, 0, 0, 0, 0, 0}, // 1 {1, 1, 0, 1, 1, 0, 1, 0}, // 2 //... {0, 0, 1, 1, 1, 1, 1, 0} // 9 }; void setup() { for (int i = 0; i < 8; i++) { pinMode(pins[i], OUTPUT); } } void loop() { for (int num = 0; num < 10; num++) { // 依次显示0-9 for (int i = 0; i < 8; i++) { // 控制LED灯亮灭 digitalWrite(pins[i], nums[num][i]); } delay(1000); // 延时1秒 } } ``` 3. 上传程序到Arduino开发板上,并观察七段数码管显示效果。 实验结果:通过本实验,我们成功地掌握了七段数码管的原理和使用方法,实现了数字的显示实验结论:七段数码管是一种常用的数字显示器件,通过控制每个LED灯的亮灭,可以显示不同的数字。在实际应用中,七段数码管广泛应用于计时器、数码时钟、电子秤等领域。 以上是一个基本的七段数码管显示实验报告模板,您可以根据实际情况进行修改和完善。希望对您有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小花-Soleil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值