数字数码管

数字或字母可以用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;

    }
}

效果:

 

原文地址:https://www.cnblogs.com/hupeng1234/p/6824268.html