谁有这方面的资料,能不能提供一下~~

解决方案 »

  1.   

    有LED的字体,直接使用这种字体显示比较方便。
      

  2.   

    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 数字了:#######       # ####### ####### #     # ####### ####### ####### ####### #######
    #     #       #       #       # #     # #       #             # #     # #     #
    #     #       #       #       # #     # #       #             # #     # #     #
    #     #       # ####### ####### ####### ####### #######       # ####### #######
    #     #       # #             #       #       # #     #       # #     #       #
    #     #       # #             #       #       # #     #       # #     #       #
    #######       # ####### #######       # ####### #######       # ####### #######下面的部分涉及数字电路中译码电路、卡诺图等方面的知识,有兴趣的话可以去查找相关资料。七段 LED 各段位的真值表如下:A, B, C, D 表示数字的各二进制位
    a, b, c, d, e, f, g 表示 LED 的各段,为 1 时该段显示,为 0 时该段不显示      a
       #######
       #     # b
     f #  g  #
       #######
       #     # c
     e #     # 
       #######
          d+---+---+---+---+---+  +---+---+---+---+---+---+---+
    |   | A | B | C | D |  | a | b | c | d | e | f | g |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 0 | 0 | 0 | 0 | 0 |  | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 1 | 0 | 0 | 0 | 1 |  | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 2 | 0 | 0 | 1 | 0 |  | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 2 | 0 | 0 | 1 | 1 |  | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 4 | 0 | 1 | 0 | 0 |  | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 5 | 0 | 1 | 0 | 1 |  | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 6 | 0 | 1 | 1 | 0 |  | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 7 | 0 | 1 | 1 | 1 |  | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 8 | 1 | 0 | 0 | 0 |  | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+
    | 9 | 1 | 0 | 0 | 1 |  | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+根据这个真值表可以得出这个反映了数字二进制位与 LED 各段之间的逻辑关系:a = (A+B+C+^D)(A+^B+C+D)
    b = (A+^B+C+^D)(A+^B+^C+D)
    c = (A+B+^C+D)
    d = (A+B+C+^D)(A+^B+C+D)(A+^B+^C+^D)
    e = ^A^B^C^D + ^A^BC^D + ^ABC^D + A^B^C^D
    f = (A+B+C+^D)(A+B+^C+D)(A+B+^C+^D)(A+^B+^C+^D)
    g = (A+B+C+D)(A+B+C+^D)(A+^B+^C+^D)^ 表示逻辑取反,一般是在上面加上一横,这里我只能这样表示。采用卡诺图化简后可以得到:a = A + ^AC + ^A^B^C^D + ^AB^CD
    b = A + ^A^B + ^ABCD + ^AB^C^D
    c = A + B + ^C + D
    d = A + ^A^BC + ^A^B^C^D + ^AB^CD + ^ABC^D
    e = ^AC^D + ^B^C^D
    f = A + ^A^B^C^D + ^AB^D + ^AB^CD
    g = A + ^A^BC + ^AB^C + ^ABC^D上面代码中的 getLed 方法中的算法就是这样来的。