數字數碼管
阿新 • • 發佈:2017-05-08
開啟 png () 數碼 dst lean itl bit led
數字或字母可以用7位數碼管顯示(就是排列為8字形的7個數碼管)
對於大型燈管,為了節約使用,在切換數字的時候,如果該燈管的狀態沒有改變,則不需要對該燈管關了再開。
已知一個數字變化的系列,求7個數碼管開關的動作。
思路:
我們知道將數碼管開啟的時候是所有的燈都先亮一下(即亮出8這個數字),然後才會變化到我們想要的數字的。而如何進行變化呢?我們就會想到如果想從一個數字變換到另一個數字,先要做的就是將該滅的燈先滅掉(即將對應顯示的數字所不需要亮的燈給滅了,比如數字3,我們需要滅的登就是上圖所對應的1號和4號位置),如果該燈本來就是滅的我們就不做任何操作,如果該燈是亮的則滅了他;然後要做的就是亮起我們需要亮的燈,道理同上面一樣。
代碼:
public class LED { public static void main(String[] args) { String displayNums = "01466538"; // 顯示的一串數字 int[][] ledStates = initLED(); // 獲取0-9數字對應的7位數碼管狀態 int len = displayNums.length(); // 獲取要顯示數字的個數 int bits = 7; // 數碼管位數為7 displayNums = "8" + displayNums; //顯示的數字初始值為8 // 將字符轉化為數字 int numList[] = new int[len + 1]; for (int i = 0; i < len + 1; ++i) { int num = displayNums.charAt(i) - ‘0‘; numList[i] = num; } for (int i = 0; i < len; ++i) { boolean changed = false;for (int j = 0; j < bits; ++j) // 比較前後兩個數字對應7位的亮滅情況 { if (ledStates[numList[i + 1]][j] < ledStates[numList[i]][j]) { changed = true; System.out.print("滅" + j); } else if (ledStates[numList[i + 1]][j] > ledStates[numList[i]][j]) { changed = true; System.out.print("亮" + j); } } if (changed == false) { System.out.print("前後顯示的兩數字相同"); } System.out.println(); } } private static int[][] initLED() // 初始化LED { // 假設使用的是7段數碼管,編號從0-6,0表示熄滅,1表示電量 final int ledStates[][] = { // final修飾的常量使能初始化一次 // 0 1 2 3 4 5 6 { 1, 1, 1, 0, 1, 1, 1 }, // 0 { 0, 0, 1, 0, 0, 1, 0 }, // 1 { 1, 0, 1, 1, 1, 0, 1 }, // 2 { 1, 0, 1, 1, 0, 1, 1 }, // 3 { 0, 1, 1, 1, 0, 1, 0 }, // 4 { 1, 1, 0, 1, 0, 1, 1 }, // 5 { 1, 1, 0, 1, 1, 1, 1 }, // 6 { 1, 0, 1, 0, 0, 1, 0 }, // 7 { 1, 1, 1, 1, 1, 1, 1 }, // 8 { 1, 1, 1, 1, 0, 1, 0 }, // 9 }; return ledStates; } }
效果:
數字數碼管