zoukankan      html  css  js  c++  java
  • Arduino 数码管LED驱动器 阵列方法

    样品谈到最后一个驱动程序LED数码管,采用了最简单的解决方案之一,对于每一个LED高低电平控制,这样的好处是每个LED控制可检。避免短路造成的错觉,因为,但是对于数字的变化是,它是多余的写,因此,这种试图通过一组方法,来实现。

    //设置阴极接口
    int d1 = 1;
    int d2 = 2;
    int d3 = 3;
    int d4 = 4;
    int d5 = 5;
    int d6 = 6;
    int d7 = 7;
    //设置阳极接口
    int a = 8;
    int b = 9;
    int c = 10;
    int d = 11;
    int e = 12;
    int f = 13;
    int g = A0;
    int h = A1;
    
    byte gyang[8] = { a, b, c, d, e, f, g, h };
    byte gyin[7] = { d1, d2, d3, d4, d5, d6, d7 };
     
    byte gong_yang[14][8] = { 
                              { 1,1,0,0,0,0,0,0 },  // 0 = 缺水
                              { 0,0,1,1,0,0,0,0 },  // 1 = 低水位
                              { 0,0,0,0,1,1,1,0 },  // 2 = 定时关机
                              { 1,1,1,1,1,1,0,0 },  // 3 = 0
                              { 0,1,1,0,0,0,0,0 },  // 4 = 1
                              { 1,1,0,1,1,0,1,0 },  // 5 = 2
                              { 1,1,1,1,0,0,1,0 },  // 6 = 3
                              { 0,1,1,0,0,1,1,0 },  // 7 = 4
                              { 1,0,1,1,0,1,1,0 },  // 8 = 5
                              { 1,0,1,1,1,1,1,0 },  // 9 = 6
                              { 1,1,1,0,0,0,0,0 },  // 10 = 7
                              { 1,1,1,1,1,1,1,0 },  // 11 = 8
                              { 1,1,1,1,0,1,1,0 },  // 12 = 9
                              { 0,0,0,0,0,0,0,1 },  // 13 = 摄氏度符号、睡眠符号
                            }; 
                            
    byte gong_yin[5][7] = { 
                              { 1,1,1,1,1,1,0 },  // 0 = 缺水、低水位、定时关机
                              { 0,1,1,1,1,1,1 },  // 1 = 温度十位、摄氏度符号
                              { 1,0,1,1,1,1,1 },  // 2 = 温度个位、睡眠符号
                              { 0,0,1,1,1,1,1 },  // 3 = 温度个和十位
                              { 1,1,0,0,0,0,1 },  // 4 = 时钟个、十位和两点
                            }; 
    void setup()
    {
    pinMode(d1, OUTPUT);
    pinMode(d2, OUTPUT);
    pinMode(d3, OUTPUT);
    pinMode(d4, OUTPUT);
    pinMode(d5, OUTPUT);
    pinMode(d6, OUTPUT);
    pinMode(d7, OUTPUT);
    pinMode(a, OUTPUT);
    pinMode(b, OUTPUT);
    pinMode(c, OUTPUT);
    pinMode(d, OUTPUT);
    pinMode(e, OUTPUT);
    pinMode(f, OUTPUT);
    pinMode(g, OUTPUT);
    pinMode(h, OUTPUT);
    digitalWrite(a, LOW);
    digitalWrite(b, LOW);
    digitalWrite(c, LOW);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, HIGH);
    digitalWrite(d5, HIGH);
    digitalWrite(d6, HIGH);
    digitalWrite(d7, HIGH);
    }
    
    void loop()
    {
      GongYang(0);
      GongYin(0);
      delay(300);
      GongYang(1);
      delay(300);
      GongYang(2);
      delay(300);
      GongYin(3);
      GongYang(3);
      delay(300);
      GongYang(4);
      delay(300);
      GongYang(5);
      delay(300);
      GongYang(6);
      delay(300);
      GongYang(7);
      delay(300);
      GongYang(8);
      delay(300);
      GongYang(9);
      delay(300);
      GongYang(10);
      delay(300);
      GongYang(11);
      delay(300);
      GongYang(12);
      delay(300);
      GongYang(13);
      GongYin(1);
      delay(300);
      GongYin(2);
      delay(300);
      GongYin(4);
      GongYang(3);
      delay(300);
      GongYang(4);
      delay(300);
      GongYang(5);
      delay(300);
      GongYang(6);
      delay(300);
      GongYang(7);
      delay(300);
      GongYang(8);
      delay(300);
      GongYang(9);
      delay(300);
      GongYang(10);
      delay(300);
      GongYang(11);
      delay(300);
      GongYang(12);
      delay(300);
    }
    
    void GongYang(int x)
    {
      for (int i = 0; i < 8; i++) 
      {
        digitalWrite(gyang[i], gong_yang[x][i]);
      }
    }
    
    void GongYin(int y)
    {
      for (int i = 0; i < 7; i++) 
      {
        digitalWrite(gyin[i], gong_yin[y][i]);
      }
    }

    SETUP语句和LOOP语句还有非常多冗余的代码,用for循环优化代码。

    //设置阴极接口
    int d1 = 1;
    int d2 = 2;
    int d3 = 3;
    int d4 = 4;
    int d5 = 5;
    int d6 = 6;
    int d7 = 7;
    //设置阳极接口
    int a = 8;
    int b = 9;
    int c = 10;
    int d = 11;
    int e = 12;
    int f = 13;
    int g = A0;
    int h = A1;
    
    byte gyang[8] = { a, b, c, d, e, f, g, h };
    byte gyin[7] = { d1, d2, d3, d4, d5, d6, d7 };
     
    byte gong_yang[14][8] = { 
                              { 1,1,0,0,0,0,0,0 },  // 0 = 缺水
                              { 0,0,1,1,0,0,0,0 },  // 1 = 低水位
                              { 0,0,0,0,1,1,1,0 },  // 2 = 定时关机
                              { 1,1,1,1,1,1,0,0 },  // 3 = 0
                              { 0,1,1,0,0,0,0,0 },  // 4 = 1
                              { 1,1,0,1,1,0,1,0 },  // 5 = 2
                              { 1,1,1,1,0,0,1,0 },  // 6 = 3
                              { 0,1,1,0,0,1,1,0 },  // 7 = 4
                              { 1,0,1,1,0,1,1,0 },  // 8 = 5
                              { 1,0,1,1,1,1,1,0 },  // 9 = 6
                              { 1,1,1,0,0,0,0,0 },  // 10 = 7
                              { 1,1,1,1,1,1,1,0 },  // 11 = 8
                              { 1,1,1,1,0,1,1,0 },  // 12 = 9
                              { 0,0,0,0,0,0,0,1 },  // 13 = 摄氏度符号、睡眠符号
                            }; 
                            
    byte gong_yin[5][7] = { 
                              { 1,1,1,1,1,1,0 },  // 0 = 缺水、低水位、定时关机
                              { 0,1,1,1,1,1,1 },  // 1 = 温度十位、摄氏度符号
                              { 1,0,1,1,1,1,1 },  // 2 = 温度个位、睡眠符号
                              { 0,0,1,1,1,1,1 },  // 3 = 温度个和十位
                              { 1,1,0,0,0,0,1 },  // 4 = 时钟个、十位和两点
                            }; 
    void setup()
    {
      pinMode(A0, OUTPUT);
      pinMode(A1, OUTPUT);
      for(int i=1; i<14;i++)
      {
        pinMode(i,OUTPUT);
      }
    }
    
    void loop()
    {
      GongYin(0);
      for(int i=0; i<3; i++)
      {
        GongYang(i);
        delay(300);
      }
      GongYin(3);
      for(int i=3; i<13; i++)
      {
        GongYang(i);
        delay(300);
      }
      GongYang(13);
      GongYin(1);
      delay(300);
      GongYin(2);
      delay(300);
      GongYin(4);
      for(int i=3; i<13; i++)
      {
        GongYang(i);
        delay(300);
      }
    }
    
    void GongYang(int x)
    {
      for (int i = 0; i < 8; i++) 
      {
        digitalWrite(gyang[i], gong_yang[x][i]);
      }
    }
    
    void GongYin(int y)
    {
      for (int i = 0; i < 7; i++) 
      {
        digitalWrite(gyin[i], gong_yin[y][i]);
      }
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    堆(heap)和栈(stack)的区别
    STL容器学习总结
    从瀑布模型、极限编程到敏捷开发
    智力题
    Trie树详解及其应用
    理解inode
    找出字符串中连续出现次数最多的子串
    Oracle数据库中大数据量查询优化问题分区表的操作方法
    “在解决方案中的一个或多个项目由于以下原因未能加载 项目文件或网站已移动或重新命名,或者不在您的计算机上” 的解决办法
    转:完全卸载Oracle方法
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4676388.html
Copyright © 2011-2022 走看看