java 模拟led屏展示

java 模拟led屏显示谁有这方面的资料,能不能提供一下~~[解决办法]有LED的字体,直接使用这种字体显示比较方

java 模拟led屏显示
谁有这方面的资料,能不能提供一下~~

[解决办法]
有LED的字体,直接使用这种字体显示比较方便。


[解决办法]

Java code
public class Test { 
  public static void main(String[] args) {
    LED led = new LED();
    char[][] chss = led.getLED("0123456789");
    LED.print(chss);
  }
}

class LED {
  /**
  * 每个 LED 的大小,可以进行调整
  */
  public final static int ROW = 7;
  public final static int COL = 7;
  /**
  * 每个 LED 的间隔
  */
  private final static int SEPARATOR = 1;
  private final static char FILL_CHAR = '#';
  private final static char SPACE_CHAR = ' ';

  /**
  * 工具方法,用于输出 LED
  * @param chs
  */
  public static void print(char[][] chs) {
    for (int i = 0; i < chs.length; i++) {
      for (int j = 0; j < chs[i].length; j++) {
        System.out.print(chs[i][j]);
      }
      System.out.println();
    }
  }

  /**
  * 根据数字得到 LED 显示数组
  * @param num *
  * @return
  */
  public char[][] getLED(String num) {
    char[] chs = num.toCharArray();
    char[][][] chsss = new char[chs.length][][];
    for (int i = 0; i < chs.length; i++) {
      chsss[i] = showLed(chs[i] - '0');
    }
    return putManyLed(chsss);
  }

  /**
  * 将多个 LED 组成一排
  * @param chsss
  * @return
  */
  private char[][] putManyLed(char[][][] chsss) {
    if (chsss.length < 1) {
      throw new IllegalArgumentException("LED is NULL!");
    }
    if (chsss.length == 1) {
      return chsss[0];
    }
    char[][] chss = new char[ROW][chsss.length * (COL + SEPARATOR)
        - SEPARATOR];
    for (int i = 0; i < chsss.length; i++) {
      int m = i * (COL + SEPARATOR);
      for (int j = 0; j < chsss[i].length; j++) {
        for (int k = 0; k < chsss[i][j].length; k++) {
          chss[j][m + k] = chsss[i][j][k];
        }
      }
    }
    for (int i = 0; i < chss.length; i++) {
      for (int j = 0; j < chss[i].length; j++) {
        if (chss[i][j] != FILL_CHAR) {
          chss[i][j] = SPACE_CHAR;
        }
      }
    }
    return chss;
  }

  /**
  *
  * @param num
  * @return
  */
  private char[][] showLed(int num) {
    boolean[] b = getLed(num);
    char[][] chs = new char[ROW][COL];
    if (b[0])
      for (int i = 0; i < COL; i++)
        chs[0][i] = FILL_CHAR;
    if (b[1])
      for (int i = 0; i <= ROW / 2; i++)
        chs[i][COL - 1] = FILL_CHAR;
    if (b[2])


      for (int i = ROW / 2; i < ROW; i++)
        chs[i][COL - 1] = FILL_CHAR;
    if (b[3])
      for (int i = 0; i < COL; i++)
        chs[ROW - 1][i] = FILL_CHAR;
    if (b[4])
      for (int i = ROW / 2; i < ROW; i++)
        chs[i][0] = FILL_CHAR;
    if (b[5])
      for (int i = 0; i <= ROW / 2; i++)
        chs[i][0] = FILL_CHAR;
    if (b[6])
      for (int i = 0; i < COL; i++)
        chs[ROW / 2][i] = FILL_CHAR;
    return chs;
  }

  /**
  *
  * 译码器
  *
  *    0
  *  #######
  *  #  # 1
  *  5 #  6  #
  *  #######
  *  #  #
  *  4 #  # 2
  *  #######
  *    3
  *   
  * 0 表示 leds[0],若为 true 表示该 LED 显示,否则不显示
  *
  * @param num
  * @return
  */
  private boolean[] getLed(int num) {   
    boolean a = (num & 8) >>> 3 == 1;
    boolean b = (num & 4) >>> 2 == 1;
    boolean c = (num & 2) >>> 1 == 1;
    boolean d = (num & 1) == 1;
    boolean[] leds = new boolean[7];
    leds[0] = a | (!a & c) |(!a & !b & !c & !d) | (!a & b & !c & d);
    leds[1] = a | (!a & !b) | (!a & b & c & d) | (!a & b & !c & !d); 
    leds[2] = a | b | !c | d;
    leds[3] = a | (!a & !b & c) | (!a & !b & !c & !d) | (!a & b & c & !d) |
        (!a & b & !c & d);
    leds[4] = (!a & c & !d) | (!b & !c & !d);
    leds[5] = a | (!a & !b & !c & !d) | (!a & b & !d) | (!a & b & !c & d);
    leds[6] = a | (!a & !b & c) | (!a & b & !c) | (!a & b & c & !d);
    return leds;
  }
}



这个就可以输出我们常见的七段 LED 数字了:

Java code
#######       # ####### ####### #     # ####### ####### ####### ####### ########     #       #       #       # #     # #       #             # #     # #     ##     #       #       #       # #     # #       #             # #     # #     ##     #       # ####### ####### ####### ####### #######       # ####### ########     #       # #             #       #       # #     #       # #     #       ##     #       # #             #       #       # #     #       # #     #       ########       # ####### #######       # ####### #######       # ####### #######