LED_Array.h & cpp
#ifndef LED_Array_H
#define LED_Array_H
#define HaltSize 1
#define LIGHT 160
#define     R0       D2
#define     R1       D3
#define     G0       D8
#define     G1       D9
#define     L0       D11
#define     L1       D12
#define     STB         A4//RCLK STCP//STB 正脉冲(几十纳秒)更新输出
#define     CLK         A5//SCLK SHCP//CLK 上升沿位移输入数据
#define     EN         D13//OE  低电平开启
#define     RowA        A0
#define     RowB        A1
#define     RowC        A2
#define     RowD        A3
/*色权
 * 基本:
 * 0——无色
 * 1——红色
 * 2——绿色
 * 4——蓝色
 * 扩展:
 * 3——红绿:黄
 * 5——红蓝:桃
 * 6——蓝绿:青、
 * 7——白
 */
#define     OFF        0
#define     RED        1
#define     GREEN        2
#define     BLUE        4
#define     PINK        5
#define     YELLO        3
#define     CYAN        6
#define     WHITE        7
const unsigned char Dot[] =
{
  0x00, 0xFE, 0xC6, 0xCE, 0xD6, 0xE6, 0xC6, 0xFE,//G:\WPad\0.BMP0
  0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C,//G:\WPad\1.BMP0
  0x00, 0xFE, 0x06, 0x06, 0xFE, 0xC0, 0xC0, 0xFE,//G:\WPad\2.BMP0
  0x00, 0xFE, 0x06, 0x06, 0xFE, 0x06, 0x06, 0xFE,//G:\WPad\3.BMP0
  0x00, 0xC6, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0x06,//G:\WPad\4.BMP0
  0x00, 0xFE, 0xC0, 0xC0, 0xFE, 0x06, 0x06, 0xFE,//G:\WPad\5.BMP0
  0x00, 0xFE, 0xC0, 0xC0, 0xFE, 0xC6, 0xC6, 0xFE,//G:\WPad\6.BMP0
  0x00, 0xFE, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x60,//G:\WPad\7.BMP0
  0x00, 0xFE, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xFE,//G:\WPad\8.BMP0
  0x00, 0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE,//G:\WPad\9.BMP0
  0x00, 0x10, 0x38, 0x7C, 0xFE, 0x00, 0x00, 0x00,//G:\WPad\up.BMP0
  0x00, 0x00, 0x00, 0xFE, 0x7C, 0x38, 0x10, 0x00,//G:\WPad\down.BMP0
  0x00, 0x18, 0x24, 0x24, 0x34, 0x34, 0x34, 0x18,//G:\WPad\temp2.BMP0
  0x00, 0xE6, 0xA8, 0xE8, 0x08, 0x08, 0x08, 0x06,//G:\WPad\temp.BMP0
  0x00, 0x10, 0x10, 0x38, 0x7C, 0x7C, 0x7C, 0x38,//G:\WPad\humb2.BMP0
  0x00, 0xE2, 0xA4, 0xE8, 0x10, 0x2E, 0x4A, 0x8E,//G:\WPad\humb.BMP0
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//0x00
};//字模
void Write_595(unsigned char Data, PinName PIN_595);
//this is the base driver of 74HC595
void Init_LED_Array(void);
//put this function into setup()
void Display();
//you can modify this function to display contents that you what to show
void Write_LED_Array(unsigned char *Data, unsigned char color);
//this is the base driver of LED array
void DotToData(unsigned char *Data, unsigned char Pos, unsigned char Draw);
//将字模放到数组中指定屏幕区域
#endif
	
		 
	
#include "mbed.h"
#include "Arduino.h"
#include "LED_Array.h"
void Display()//you can modify this function to display contents that you what to show
{
    //  unsigned char i;
    //  for (i = 80; i > 1; i--)
    //  {
    //    Write_LED_Array(0, &cod1[0x0000], R0); //Write_LED_Array(pos,data,color);
    //    Write_LED_Array(1, &cod1[64], R1);
    //  }
    //  for (i = 80; i > 1; i--)
    //  {
    //    Write_LED_Array(0, &cod1[128], R0); //Write_LED_Array(pos,data,color);
    //    Write_LED_Array(1, &cod1[192], R1);
    //  }
}
void Init_LED_Array(void)//put this function into setup()
{
    pinMode(R0, OUTPUT);
    pinMode(R1, OUTPUT);
    pinMode(G0, OUTPUT);
    pinMode(G1, OUTPUT);
    pinMode(L0, OUTPUT);
    pinMode(L1, OUTPUT);
    digitalWrite(R0, LOW);
    digitalWrite(R1, LOW);
    digitalWrite(G0, LOW);
    digitalWrite(G1, LOW);
    digitalWrite(L0, LOW);
    digitalWrite(L1, LOW);
    pinMode(STB, OUTPUT);
    pinMode(CLK, OUTPUT);
    pinMode(EN, OUTPUT);
    pinMode(RowA, OUTPUT);
    pinMode(RowB, OUTPUT);
    pinMode(RowC, OUTPUT);
    pinMode(RowD, OUTPUT);
    digitalWrite(EN, HIGH);
    digitalWrite(STB, LOW);
}
void Write_595(unsigned char Data, PinName PIN_595) //this is the base driver of 74HC595
{
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x80));
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x40));
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x20));
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x10));
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x08));
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x04));
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x02));
    digitalWrite(CLK, HIGH);
    digitalWrite(CLK, LOW);
    digitalWrite(PIN_595, (Data & 0x01));
    digitalWrite(CLK, HIGH);
}
void Write_LED_Array(unsigned char *Data, unsigned char color) //this is the base driver of LED array
{
    unsigned char *pTemp;
    unsigned char row;
    PinName DataPin = R0;
    PinName DataPin2 = R1;
    if (color == GREEN) {
        DataPin = G0;
        DataPin2 = G1;
    } else if (color == BLUE) {
        DataPin = L0;
        DataPin2 = L1;
    }
    for (row = 0; row < 16; row++) {
        digitalWrite(EN, HIGH);
        pTemp = (Data + row * 2);
        if (HaltSize && row >= 8) {
            Write_595(*pTemp, DataPin2);
            Write_595(*(pTemp + 1), DataPin2);
            Write_595(*(pTemp += 32), DataPin2);
            Write_595(*(pTemp + 1), DataPin2);
        } else {
            Write_595(*pTemp, DataPin);
            Write_595(*(pTemp + 1), DataPin);
            Write_595(*(pTemp += 32), DataPin);
            Write_595(*(pTemp + 1), DataPin);
        }
        digitalWrite(STB, HIGH);
        delayMicroseconds(1);
        digitalWrite(STB, LOW);
        delayMicroseconds(1);
        digitalWrite(RowA, (row & 0x01)); //set display line
        digitalWrite(RowB, (row & 0x02)); //Sequential scan
        digitalWrite(RowC, (row & 0x04));
        if (!HaltSize)
            digitalWrite(RowD, (row & 0x08));
        digitalWrite(EN, LOW);
        delayMicroseconds(LIGHT);
    }
}
void DotToData(unsigned char *Data, unsigned char Pos, unsigned char Draw)
{
    //将字模放到数组中指定屏幕区域
    /*区域
     Pos:
     0  1 4 5
     2  3 6 7
     */
    const unsigned char *p = &Dot[Draw * 8];//字模编号取得指针
    //区域处理
    char n = Pos / 2;
    Pos = Pos % 2;
    for (char i = n * 16; i < (n + 1) * 16; i += 2) {
        if (Pos)
            Data[i + 1] = *(p++);
        else
            Data[i] = *(p++);
    }
}