从键盘任意输入0-9之间的任意一个数字,显示数字的电子格式,所谓电子格式也就是像电梯里的显示楼层的数字格式一样的格式,如何实现?说明:获取键盘输入
 Scanner input=new Scanner(System.in);
 int a1=input.nextInt();
 那象楼梯的显示楼层的电子格式怎么显示呢?

解决方案 »

  1.   

    可以看看http://topic.csdn.net/u/20080617/16/c8d6f711-a3a4-4689-af85-d0c6797d0f65.html我在 13 楼的回复,利用数字电路将 10 进制数编码成 7 位的二进制数,来控制七段 LED 的显示。代码中的最后一个方法 getLed 是程序化了的编码器,我也是从书上抄来转成 Java 代码的,呵呵。
    具体的算法属于数字电路的知识,可以去看看介绍数字电路书中关于编码器和译码器的部分。
      

  2.   

    原来的译码输出是:#######       # ####### ####### #     # ####### #       ####### ####### #######
    #     #       #       #       # #     # #       #             # #     # #     #
    #     #       #       #       # #     # #       #             # #     # #     #
    #     #       # ####### ####### ####### ####### #######       # ####### #######
    #     #       # #             #       #       # #     #       # #     #       #
    #     #       # #             #       #       # #     #       # #     #       #
    #######       # ####### #######       # ####### #######       # #######       #6 和 9 不符合国内常见的 LED 数字格式,不是很好看。把译码方法 getLed 改了一下:    /**
         * 译码器
          * 
         *       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 数字了:#######       # ####### ####### #     # ####### ####### ####### ####### #######
    #     #       #       #       # #     # #       #             # #     # #     #
    #     #       #       #       # #     # #       #             # #     # #     #
    #     #       # ####### ####### ####### ####### #######       # ####### #######
    #     #       # #             #       #       # #     #       # #     #       #
    #     #       # #             #       #       # #     #       # #     #       #
    #######       # ####### #######       # ####### #######       # ####### #######
    附上真值表及逻辑式:
    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 |
    +---+---+---+---+---+  +---+---+---+---+---+---+---+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这个反映了数字二进制位与 LED 各段之间的逻辑关系。
      

  3.   

    具体的每一段的输出怎么整,特别是1、5段和2、4段或者说那个b、f段,和c、e段