从键盘任意输入0-9之间的任意一个数字,显示数字的电子格式,所谓电子格式也就是像电梯里的显示楼层的数字格式一样的格式,如何实现?说明:获取键盘输入
Scanner input=new Scanner(System.in);
int a1=input.nextInt();
那象楼梯的显示楼层的电子格式怎么显示呢?
Scanner input=new Scanner(System.in);
int a1=input.nextInt();
那象楼梯的显示楼层的电子格式怎么显示呢?
具体的算法属于数字电路的知识,可以去看看介绍数字电路书中关于编码器和译码器的部分。
# # # # # # # # # # # # # #
# # # # # # # # # # # # # #
# # # ####### ####### ####### ####### ####### # ####### #######
# # # # # # # # # # # # #
# # # # # # # # # # # # #
####### # ####### ####### # ####### ####### # ####### #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 各段之间的逻辑关系。