查看: 845|回复: 4

[经验] arduino驱动p6全彩led单元

[复制链接]
  • TA的每日心情
    开心
    2019-7-22 10:11
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2019-4-25 09:26 | 显示全部楼层 |阅读模式
    本帖最后由 s65moto 于 2019-10-15 09:36 编辑

    近日偶得全彩led单元板,16*32。成本不高,显示面积大96*192mm,所以想用arduino驱动玩玩。
    参考了官方的shiftOut()的使用方法。
    板子背后的集成电路有74hc245。74hc138。74hc040d。APM4953。JXI5020GF。
    74hc245是一种兼容TTL器件引脚的高速CMOS总线收发器(bus transceiver),典型的CMOS型三态缓冲门电路,八路信号收发器。
    74hc138是3-8线译码器。控制显示行。
    74hc040d是6位反相器。只用了其中两位,控制JXI5020GF使能端的。
    JXI5020GF参数没找到,参考的MBI5026恒流驱动芯片。
    ABC部分可以简化,希望大神抛玉。

    kittenblock中小学创客名师推荐的图形化编程软件

    int LEPin = 8;//LE锁存控制
    int CLKPin = 12;//时钟 上升沿输入数据
    int R1Pin = 11;//红色上半部分数据
    int R2Pin = 10;//红色下半部分数据
    int OEPin = 13;//使能
    int APin = 2;//A
    int BPin = 3;//B
    int CPin = 4;//C
    int shuzi[10][16] =
    {
      {0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00}, /*"0",0*/
      {0x00, 0x00, 0x00, 0x10, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00}, /*"1",1*/
      {0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x04, 0x04, 0x08, 0x10, 0x20, 0x42, 0x7E, 0x00, 0x00}, /*"2",2*/
      {0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x04, 0x18, 0x04, 0x02, 0x02, 0x42, 0x44, 0x38, 0x00, 0x00}, /*"3",3*/
      {0x00, 0x00, 0x00, 0x04, 0x0C, 0x14, 0x24, 0x24, 0x44, 0x44, 0x7E, 0x04, 0x04, 0x1E, 0x00, 0x00}, /*"4",4*/
      {0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x58, 0x64, 0x02, 0x02, 0x42, 0x44, 0x38, 0x00, 0x00}, /*"5",5*/
      {0x00, 0x00, 0x00, 0x1C, 0x24, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00}, /*"6",6*/
      {0x00, 0x00, 0x00, 0x7E, 0x44, 0x44, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00}, /*"7",7*/
      {0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00}, /*"8",8*/
      {0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x26, 0x1A, 0x02, 0x02, 0x24, 0x38, 0x00, 0x00}, /*"9",9*/
    };
    int ni[16][2] =
    {
      {0x08, 0x80}, {0x08, 0x80}, {0x08, 0x80}, {0x11, 0xFE},
      {0x11, 0x02}, {0x32, 0x04}, {0x34, 0x20}, {0x50, 0x20},
      {0x91, 0x28}, {0x11, 0x24}, {0x12, 0x24}, {0x12, 0x22},
      {0x14, 0x22}, {0x10, 0x20}, {0x10, 0xA0}, {0x10, 0x40}
    };/*"你",0*/
    int hao[16][2] =
    {
      {0x10, 0x00}, {0x10, 0xFC}, {0x10, 0x04}, {0x10, 0x08},
      {0xFC, 0x10}, {0x24, 0x20}, {0x24, 0x20}, {0x25, 0xFE},
      {0x24, 0x20}, {0x48, 0x20}, {0x28, 0x20}, {0x10, 0x20},
      {0x28, 0x20}, {0x44, 0x20}, {0x84, 0xA0}, {0x00, 0x40}
    }; /*"好",1*/
    void setup()
    {
      // put your setup code here, to run once:
      pinMode(LEPin, OUTPUT);
      pinMode(CLKPin, OUTPUT);
      pinMode(R1Pin, OUTPUT);
      pinMode(R2Pin, OUTPUT);
      pinMode(APin, OUTPUT);
      pinMode(BPin, OUTPUT);
      pinMode(CPin, OUTPUT);
      pinMode(OEPin, OUTPUT);
    }
    void loop()
    {
      for (int k = 0; k < 60; k++)
      {
        // put your main code here, to run repeatedly:
        //向上计数程序
        for (int i = 0; i < 16; i++)//16行扫描
        {
          if (i < 8)//上边8行扫描
          {
            switch (i)
            {
              case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
              case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
            }
            digitalWrite(CLKPin, LOW);
            //传输数据的时候将LEPin拉高
            /*
              shiftOut()
              将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
              注意:如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。
              shiftOut(dataPin, clockPin, bitOrder, value)
              dataPin:输出每一位数据的引脚(int)
              clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)
              bitOrder:输出位的顺序,最高位优先(MSBFIRST)或最低位优先(LSBFIRST)
              value: 要移位输出的数据(byte)
            */
            digitalWrite(LEPin, HIGH);//锁存置高,传递数据
            for (int j = 0; j < 4; j++)
            {
              if (j < 2)
              {
                shiftOut(R1Pin, CLKPin, MSBFIRST, ni[j]);//高位先发送
              }
              else
              {
                shiftOut(R1Pin, CLKPin, MSBFIRST, hao[j - 2]);
              }
            }
            //之后将LEPin拉低以告诉芯片
            //它不需要再接受信息了
            digitalWrite(LEPin, LOW);//锁存置低,显示
            digitalWrite(OEPin, HIGH);//使能打开,使led显示
            delayMicroseconds(500);//显示微秒,50-500(频率大约是600hz-60hz)
            digitalWrite(OEPin, LOW);//使能关闭,关闭led显示
          }
          else//下边8行扫描
          {
            switch (i - 8)
            {
              case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
              case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
            }
            digitalWrite(CLKPin, LOW);
            digitalWrite(LEPin, HIGH);
            for (int j = 0; j < 4; j++)
            {
              if (j < 2)
              {
                shiftOut(R2Pin, CLKPin, MSBFIRST, ni[j]);
              }
              else
              {
                shiftOut(R2Pin, CLKPin, MSBFIRST, hao[j - 2]);
              }
            }
            digitalWrite(LEPin, LOW);
            digitalWrite(OEPin, HIGH);
            delayMicroseconds(500);
            digitalWrite(OEPin, LOW);
          }
        }
      }
      for (int t = 0; t < 10; t++)
      {
        for (int n = 0 ; n < 60; n++)
        {
          for (int i = 0; i < 16; i++)
          {
            if (i < 8)
            {
              switch (i)
              {
                case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
                case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
              }
              digitalWrite(CLKPin, LOW);
              digitalWrite(LEPin, HIGH);//锁存置高,传递数据
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              //之后将LEPin拉低以告诉芯片
              //它不需要再接受信息了
              digitalWrite(LEPin, LOW);//锁存置低,显示
              digitalWrite(OEPin, HIGH);//使能打开,使led显示
              delayMicroseconds(500);//显示微秒,50-500
              digitalWrite(OEPin, LOW);//使能关闭,关闭led显示
            }
            else//下边8行扫描
            {
              switch (i - 8)
              {
                case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
                case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
              }
              digitalWrite(CLKPin, LOW);
              digitalWrite(LEPin, HIGH);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              digitalWrite(LEPin, LOW);
              digitalWrite(OEPin, HIGH);
              delayMicroseconds(500);
              digitalWrite(OEPin, LOW);
            }
          }
        }
      }
    }

    背面集成电路

    背面集成电路

    单元板背面

    单元板背面

    单元板正面

    单元板正面

    全亮

    全亮

    汉字

    汉字

    数字

    数字
  • TA的每日心情
    开心
    2019-7-22 10:11
  • 签到天数: 28 天

    [LV.4]偶尔看看III

     楼主| 发表于 2019-4-25 09:26 | 显示全部楼层
    视频效果显示没法上传。

    该用户从未签到

    发表于 2019-8-27 10:18 | 显示全部楼层
    楼主 你用的是arduino uno开发板吗 ,我想用uno板烧录你的程序有错误,请教下要怎么改
  • TA的每日心情
    开心
    2019-7-22 10:11
  • 签到天数: 28 天

    [LV.4]偶尔看看III

     楼主| 发表于 2019-10-15 09:16 | 显示全部楼层
    本帖最后由 s65moto 于 2019-10-15 09:37 编辑

    更改下代码,好像缺东西了,但是那一块确实能显示。

    kittenblock中小学创客名师推荐的图形化编程软件

    int LEPin = 8;//LE锁存控制
    int CLKPin = 12;//时钟 上升沿输入数据
    int R1Pin = 11;//红色上半部分数据
    int R2Pin = 10;//红色下半部分数据
    int OEPin = 13;//使能
    int APin = 2;//A
    int BPin = 3;//B
    int CPin = 4;//C
    int shuzi[10][16] =
    {
      {0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00}, /*"0",0*/
      {0x00, 0x00, 0x00, 0x10, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00}, /*"1",1*/
      {0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x04, 0x04, 0x08, 0x10, 0x20, 0x42, 0x7E, 0x00, 0x00}, /*"2",2*/
      {0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x04, 0x18, 0x04, 0x02, 0x02, 0x42, 0x44, 0x38, 0x00, 0x00}, /*"3",3*/
      {0x00, 0x00, 0x00, 0x04, 0x0C, 0x14, 0x24, 0x24, 0x44, 0x44, 0x7E, 0x04, 0x04, 0x1E, 0x00, 0x00}, /*"4",4*/
      {0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x58, 0x64, 0x02, 0x02, 0x42, 0x44, 0x38, 0x00, 0x00}, /*"5",5*/
      {0x00, 0x00, 0x00, 0x1C, 0x24, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00}, /*"6",6*/
      {0x00, 0x00, 0x00, 0x7E, 0x44, 0x44, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00}, /*"7",7*/
      {0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00}, /*"8",8*/
      {0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x26, 0x1A, 0x02, 0x02, 0x24, 0x38, 0x00, 0x00}, /*"9",9*/
    };
    int ni[16][2] =
    {
      {0x08, 0x80}, {0x08, 0x80}, {0x08, 0x80}, {0x11, 0xFE},
      {0x11, 0x02}, {0x32, 0x04}, {0x34, 0x20}, {0x50, 0x20},
      {0x91, 0x28}, {0x11, 0x24}, {0x12, 0x24}, {0x12, 0x22},
      {0x14, 0x22}, {0x10, 0x20}, {0x10, 0xA0}, {0x10, 0x40}
    };/*"你",0*/
    int hao[16][2] =
    {
      {0x10, 0x00}, {0x10, 0xFC}, {0x10, 0x04}, {0x10, 0x08},
      {0xFC, 0x10}, {0x24, 0x20}, {0x24, 0x20}, {0x25, 0xFE},
      {0x24, 0x20}, {0x48, 0x20}, {0x28, 0x20}, {0x10, 0x20},
      {0x28, 0x20}, {0x44, 0x20}, {0x84, 0xA0}, {0x00, 0x40}
    }; /*"好",1*/
    void setup()
    {
      // put your setup code here, to run once:
      pinMode(LEPin, OUTPUT);
      pinMode(CLKPin, OUTPUT);
      pinMode(R1Pin, OUTPUT);
      pinMode(R2Pin, OUTPUT);
      pinMode(APin, OUTPUT);
      pinMode(BPin, OUTPUT);
      pinMode(CPin, OUTPUT);
      pinMode(OEPin, OUTPUT);
    }
    void loop()
    {
      for (int k = 0; k < 60; k++)
      {
        // put your main code here, to run repeatedly:
        //向上计数程序
        for (int i = 0; i < 16; i++)//16行扫描
        {
          if (i < 8)//上边8行扫描
          {
            switch (i)
            {
              case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
              case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
            }
            digitalWrite(CLKPin, LOW);
            //传输数据的时候将LEPin拉高
            /*
              shiftOut()
              将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
              注意:如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。
              shiftOut(dataPin, clockPin, bitOrder, value)
              dataPin:输出每一位数据的引脚(int)
              clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)
              bitOrder:输出位的顺序,最高位优先(MSBFIRST)或最低位优先(LSBFIRST)
              value: 要移位输出的数据(byte)
            */
            digitalWrite(LEPin, HIGH);//锁存置高,传递数据
            for (int j = 0; j < 4; j++)
            {
              if (j < 2)
              {
                shiftOut(R1Pin, CLKPin, MSBFIRST, ni[j]);//高位先发送
              }
              else
              {
                shiftOut(R1Pin, CLKPin, MSBFIRST, hao[j - 2]);
              }
            }
            //之后将LEPin拉低以告诉芯片
            //它不需要再接受信息了
            digitalWrite(LEPin, LOW);//锁存置低,显示
            digitalWrite(OEPin, HIGH);//使能打开,使led显示
            delayMicroseconds(500);//显示微秒,50-500(频率大约是600hz-60hz)
            digitalWrite(OEPin, LOW);//使能关闭,关闭led显示
          }
          else//下边8行扫描
          {
            switch (i - 8)
            {
              case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
              case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
              case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
              case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
              case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
            }
            digitalWrite(CLKPin, LOW);
            digitalWrite(LEPin, HIGH);
            for (int j = 0; j < 4; j++)
            {
              if (j < 2)
              {
                shiftOut(R2Pin, CLKPin, MSBFIRST, ni[j]);
              }
              else
              {
                shiftOut(R2Pin, CLKPin, MSBFIRST, hao[j - 2]);
              }
            }
            digitalWrite(LEPin, LOW);
            digitalWrite(OEPin, HIGH);
            delayMicroseconds(500);
            digitalWrite(OEPin, LOW);
          }
        }
      }
      for (int t = 0; t < 10; t++)
      {
        for (int n = 0 ; n < 60; n++)
        {
          for (int i = 0; i < 16; i++)
          {
            if (i < 8)
            {
              switch (i)
              {
                case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
                case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
              }
              digitalWrite(CLKPin, LOW);
              digitalWrite(LEPin, HIGH);//锁存置高,传递数据
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              shiftOut(R1Pin, CLKPin, MSBFIRST, shuzi[t]);//高位先发送
              //之后将LEPin拉低以告诉芯片
              //它不需要再接受信息了
              digitalWrite(LEPin, LOW);//锁存置低,显示
              digitalWrite(OEPin, HIGH);//使能打开,使led显示
              delayMicroseconds(500);//显示微秒,50-500
              digitalWrite(OEPin, LOW);//使能关闭,关闭led显示
            }
            else//下边8行扫描
            {
              switch (i - 8)
              {
                case 0: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 1: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, LOW); break;
                case 2: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 3: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, LOW); break;
                case 4: digitalWrite(APin, LOW); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 5: digitalWrite(APin, HIGH); digitalWrite(BPin, LOW); digitalWrite(CPin, HIGH); break;
                case 6: digitalWrite(APin, LOW); digitalWrite(BPin, HIGH); digitalWrite(CPin,  HIGH); break;
                case 7: digitalWrite(APin, HIGH); digitalWrite(BPin, HIGH); digitalWrite(CPin, HIGH); break;
              }
              digitalWrite(CLKPin, LOW);
              digitalWrite(LEPin, HIGH);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              shiftOut(R2Pin, CLKPin, MSBFIRST, shuzi[t]);
              digitalWrite(LEPin, LOW);
              digitalWrite(OEPin, HIGH);
              delayMicroseconds(500);
              digitalWrite(OEPin, LOW);
            }
          }
        }
      }
    }



    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【Arduino】108种传感器模块系列实验(55)---DHT11温湿度传感器
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【Arduino】168种传感器系列实验(149)--AS608光学指纹识别模块
    【Arduino】168种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    黑乌鸦的Arduino兵器库-----DFPlayer MiNi mp3音乐模块
    黑乌鸦的Arduino兵器库---
    嗯 这是一个系列后期会罗列几乎所有的常见基础模块的demo所以 大家的回复将是我最大
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表