java 模拟led屏显示 谁有这方面的资料,能不能提供一下~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有LED的字体,直接使用这种字体显示比较方便。 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^Df = (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^CDb = A + ^A^B + ^ABCD + ^AB^C^Dc = A + B + ^C + Dd = A + ^A^BC + ^A^B^C^D + ^AB^CD + ^ABC^De = ^AC^D + ^B^C^Df = A + ^A^B^C^D + ^AB^D + ^AB^CDg = A + ^A^BC + ^AB^C + ^ABC^D上面代码中的 getLed 方法中的算法就是这样来的。 JAVA多线程编程中的一个问题 用什么办法可以方便储存key相同但value不相同的情况呢 请问如何实现这个程序? 基础问题:切换输入法程序死掉了。请高手指教!~~谢谢!! 发几篇swing中关于JTable中的运用-2 ROUND_HALF_EVEN,ROUND_HALF_UP,ROUND_HALF_DOWN有什么区别? 关于 double 转 byte[] 的问题 IO-字节(字符)缓冲流 关于数据源的问题 请问谁有JCreate PRO 的注册码? 谁知道js里怎么定义全局变量么? 关于javap命令输出信息的详解
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 方法中的算法就是这样来的。