数字数码管

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

    }
}

效果:

时间: 2024-10-12 20:38:17

数字数码管的相关文章

Arduino周边模块:LCD与数码管

Arduino周边模块:LCD与数码管 数码管的介绍 数码管一般是用来显示数字和字符的 数码管原理 一位数码管 该图是一个8段数码管,该数码管中包含了8个LED发光二极管,因此称为8段数码管.该数码管共有10个引脚,有2个引脚是公共的负极或者正极,另外8个引脚分别按顺时针控制LED的亮片. 数码管的连接图,下面是两种连接方式 一种是将所有的正极连接到一起,另外的一种是将所有的负极连接到一起 我们可以在连接的时候进行测试,3脚接GND,4脚接高电平,如果有LED被点亮则为共阴,不亮则为共阳 四位数

单片机编程:让led数码管显示数字0到9

led数码管在单片机系统中应用非常普遍,是由发光二极管构成的.数码管由7个发光二极管组成的一个"日"字形,如果需要显示小数点,那么就再加上一个点,就是8段数码管. 数码管显示亮度高,相应速度快,分共阴极和共阳极两种形式,常用的有单个的和4联的,还有两联的和专门用来显示时间的. /*************************************************** *程序功能:点亮一个led数码管,让它显示数字从0到9 * *日期:2015.5.11 * *******

7段数码管倒计时,因为受turtle画笔速度限制,显示效果可能不如直接打印数字

7段数码管倒计时,因为受turtle画笔速度限制,显示效果可能不如直接打印数字,代码如下: import turtle as t import time def drawgap(ft): t.penup() t.fd(0.11*ft) def drawline(e,ft): drawgap(ft) t.pendown() if e else t.penup() t.fd(0.78*ft) drawgap(ft) t.right(90) def drawdigit(digit,ft): drawl

4位共阳数码管 显示数字,调节亮度,时钟调时,

/*************************************************** 程序名:   4位共阳数码管驱动程序 编写时间: 2015年11月14日 硬件支持: STC12C4052AD 接口说明: 点扫描   数码管是 字段  管脚  MCU IO口 a 13脚  P1.0 b  9脚  P1.1 c  4脚  P1.2 d  2脚  P1.3 e  1脚  P1.4 f 12脚  P1.5 g  5脚  P1.6 dp 8脚  P1.7 1位 14脚  P3.0

串口通信数码管显示输入数字

#include <reg52.h> sbit ADDR0=P1^0;sbit ADDR1=P1^1;sbit ADDR2=P1^2;sbit ADDR3=P1^3;sbit ENLED=P1^4;sbit PIN_PXD=P3^0;sbit PIN_TXD=P3^1;unsigned char LedChar[]={//数码管    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,    0x80, 0x90};unsigned char Led

数码管数字提取与识别(附源码)

第一部分(数字区域提取) 首先,准备一张待提取数字的图片(存放路径与当前工程的主程序一致) 提取原理:颜色空间由RGB转换到HSV空间下,通过对H.S.V分别设置上下限显示出当前图片,直到选取到最佳的数字区域. 上图为数字区域提取效果,记录下当前的H.S.V的上下限. 下面为这一部分的程序源码 #include<opencv2/core.hpp> #include<opencv2/highgui.hpp> #include<opencv2/imgproc.hpp> us

大写中文数字-財务

壹.贰.叁.肆.伍.陆.柒.捌.玖.拾.佰.仟.万.亿.元(圆).角.分.零.整.这是大家常常要填写的大写数字,问什么要用大写数字呢?想必非常多人都不是非常清楚! 先看看下面两个有关大写数字的表格: 1.数码与大.小写数字的对比表: 数码 小写数字 大写数字 0 ○ 零 1 一 壹 2 二 贰 3 三 叁/參 4 四 肆 5 五 伍 6 六 陆 7 七 柒 8 八 捌 9 九 玖 2.进位数码与大.小写数字的对比表 数码 小写数字 大写数字 10 十 拾 20 二十 廿 30 三十 卅 100

1225 八数码难题

1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.问题描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765

读《世界是数字的》有感

<世界是数字的>这本书开篇作者举了两个例子分别是数码产品对世界和对自己的影响.然后给我们介绍了几种常见的数码产品的前世今生.我们从这些例子里面知道现在的社会会越来越数字化,而我们身处其中也会带来一些隐患.所以我们在使用电子产品的时候要注意自己的言行举止. 其次书给我们介绍了许多计算机的硬件,让作者更清楚明白的知道计算机的构造,作者让我们知道好多计算机的专业知识,先引导我们进入计算机的世界,然后再升入告诉我们计算机的世界是什么样子的,然后告诉我们要如何的应用好这些数字的产品. 从书中的东西我联想