数字_数字时钟 - CSDN
精华内容
参与话题
  • Arduino基础入门篇14—跳动的数码管

    千次阅读 2019-11-04 14:54:20
    本篇介绍数码管显示器件,通过控制一位共阴极数码管动态显示数字0到9来了解数码管的使用。

    本篇介绍数码管显示器件,通过控制一位共阴极数码管动态显示数字0到9来了解数码管的使用。

    1. 数码管介绍

    数码管,又称LED数码管,是常见的用来显示数字的电子器件。通常由八段发光二极管封装在一起组成“8”字形状,外加一个小数点。数码管每一段都是一个独立的LED,通过控制相应段LED的亮灭使其组成相应数字形状来显示数字。

    数码管的8个LED并联在一起,根据公共管脚的不同,分为共阳极数码管和共阴极数码管两种。其区别就是公共管脚是LED灯的正极还是负极。

    数码管内部结构

    如上图,数码管8个段分别命名为A,B,C,D,E,F,G,DP,其封装共10个引脚,其中上下方正中间的是公共极,其他引脚分别对应8个LED的另一端。

    2. 实验材料

    • Uno R3开发板
    • 配套USB数据线
    • 面包板及配套连接线
    • 共阴极数码管
    • 1个220Ω限流电阻

    数码管显示

    那么如何让数码管来显示数字呢?比如显示数字0,我们只需要点亮A,B,C,D,E,F段LED,熄灭G,DP段LED即可。

    3. 实验步骤

    1. 根据原理图搭建电路。

    数码管的A,B,C,D,E,F,G,DP引脚分别接入开发板的数字管脚7,6,5,10,11,8,9,4。数码管公共端接限流电阻,电阻另一端接GND。

    实验原理图如下图所示:

    实验原理图

    实物连接图如下图所示:

    实物连接图

    2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

    /*
    NixieTube
    控制共阴极数码管显示数字0到9
    */
    
    //设置控制各段的数字IO脚,具体几号引脚对应哪一段,来源为数码管官方引脚图。
    int pin_a = 7;
    int pin_b = 6;
    int pin_c = 5;
    int pin_d = 10;
    int pin_e = 11;
    int pin_f = 8;
    int pin_g = 9;
    int pin_p = 4;
    		
    //根据共阴极数码管段码表定义0~9显示的各段开关状态
    int numTable[10][8] = {
    //1为点亮,0为关闭
    //a  b  c  d  e  f  g  dp
    {1, 1, 1, 1, 1, 1, 0, 0},     //0
    {0, 1, 1, 0, 0, 0, 0, 0},     //1
    {1, 1, 0, 1, 1, 0, 1, 0},     //2
    {1, 1, 1, 1, 0, 0, 1, 0},     //3
    {0, 1, 1, 0, 0, 1, 1, 0},     //4
    {1, 0, 1, 1, 0, 1, 1, 0},     //5
    {1, 0, 1, 1, 1, 1, 1, 0},     //6
    {1, 1, 1, 0, 0, 0, 0, 0},     //7
    {1, 1, 1, 1, 1, 1, 1, 0},     //8
    {1, 1, 1, 1, 0, 1, 1, 0},     //9
    };
    
    
    void setup()
    {
    for (int i = 4; i <= 11; i++)
    {
    pinMode(i, OUTPUT); //设置4~11引脚为输出模式
    }
    }
    
    void loop()
    {
    for (int i = 0; i < 10; i++)//以此显示数字0到9
    {
    digitalWrite(pin_a, numTable[i][0]); //设置a 引脚的电平
    digitalWrite(pin_b, numTable[i][1]); //设置b 引脚的电平
    digitalWrite(pin_c, numTable[i][2]); //设置c 引脚的电平
    digitalWrite(pin_d, numTable[i][3]); //设置d 引脚的电平
    digitalWrite(pin_e, numTable[i][4]); //设置e 引脚的电平
    digitalWrite(pin_f, numTable[i][5]); //设置f 引脚的电平
    digitalWrite(pin_g, numTable[i][6]); //设置g 引脚的电平
    digitalWrite(pin_p, numTable[i][7]); //设置dp引脚的电平
    delay(200);
    }
    
    }
    

    3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

    程序下载

    3. 实验现象

    数码管循环显示数字0到9。

    实验现象

    4. 实验分析

    程序中定义了一个二位数组用来存储0到9的段码显示。然后在loop中通过for()循环遍历显示0到9,每个数字分别读取对应的段码表来控制相应段LED的亮灭。

    根据使用场所和需求的不同,LED被封装成不同类型的数码管,但其基本原理都是相同的,都需要控制每一个LED的亮灭最终拼凑成需要显示的数字、字母甚至是汉字。

    更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:
    扫码加入微信公众号:TonyCode

    展开全文
  • 收集一下,方便以后使用; 1: Math 对象方法 方法描述 abs(x) 返回数的绝对值。 acos(x) 返回数的反余弦值。 asin(x) 返回数的反正弦值。 ... ata...

    在这里插入图片描述

    收集一下,方便以后使用;


    1: Math 对象方法

    方法描述
    abs(x) 返回数的绝对值。
    acos(x) 返回数的反余弦值。
    asin(x) 返回数的反正弦值。
    atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
    atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
    ceil(x) 对数进行上舍入。
    cos(x) 返回数的余弦。
    exp(x) 返回 e 的指数。
    floor(x) 对数进行下舍入。
    log(x) 返回数的自然对数(底为e)。
    max(x,y) 返回 x 和 y 中的最高值。
    min(x,y) 返回 x 和 y 中的最低值。
    pow(x,y) 返回 x 的 y 次幂。
    random() 返回 0 ~ 1 之间的随机数。
    round(x) 把数四舍五入为最接近的整数。
    sin(x) 返回数的正弦。
    sqrt(x) 返回数的平方根。
    tan(x) 返回角的正切。
    toSource() 返回该对象的源代码。
    valueOf() 返回 Math 对象的原始值。

    2: Number 对象方法

    方法 描述
    toString 把数字转换为字符串,使用指定的基数。
    toLocaleString 把数字转换为字符串,使用本地数字格式顺序。
    toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。
    toExponential 把对象的值转换为指数计数法。
    toPrecision 把数字格式化为指定的长度。
    valueOf 返回一个 Number 对象的基本数字值。

    展开全文
  • 数组中只出现一次的数字

    千次阅读 2019-03-28 22:02:00
    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 方法一 最直接的方法就是利用HashMap,将map的键设置成数组中的数字,map的值设置为该键在数组中出现的次数,第一...

    题目描述
    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

    方法一
    最直接的方法就是利用HashMap,将map的键设置成数组中的数字,map的值设置为该键在数组中出现的次数,第一次遍历初始化map,第二次遍历获得两个只出现一次的值

    	/**
    	 * 方法一 HashMap
    	 * @param array
    	 * @param num1
    	 * @param num2
    	 */
    	public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
    		if(array == null || array.length == 0) {
    			return;
    		}
    		HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    
    		for (int i = 0; i < array.length; i++) {
    			if(!map.containsKey(array[i])) {
    				map.put(array[i], 1);
    			}
    			else {
    				int times = map.get(array[i]);
    				map.put(array[i], ++times);
    			}
    		}
    		
    		boolean flag = true;
    		Iterator<Integer> iterator = map.keySet().iterator();
    		while (iterator.hasNext()) {
    		    Integer key = iterator.next();
    		    if(map.get(key) >= 2) {
    		    	continue;
    		    }
    		    else {
    		    	if(flag) {
    		    		num1[0] = key;
    		    		flag = false;
    		    	}
    		    	else {
    		    		num2[0] = key;
    		    	}
    		    }
    		}
    		
    	}
    

    方法二
    在《剑指offer》中,题目的限定条件是:时间复杂度为O(n),空间复杂度为O(1)
    如果这样的话,那么上面借助HashMap就不满足了。
    首先考虑一下,如果这个数组中只有一个数字只出现了一次,其他数字都出现了两次。

    首先:位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。
    只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。

    依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组。我们首先还是先异或,剩下的数字肯定是A、B异或的结果,这个结果的二进制中的1,表现的是A和B的不同的位。我们就取第一个1所在的位数,假设是第3位,接着把原数组分成两组,分组标准是第3位是否为1。如此**,相同的数肯定在一个组**,因为相同数字所有位都相同,而不同的数,肯定不在一组。然后把这两个组按照最开始的思路,依次异或,剩余的两个结果就是这两个只出现一次的数字。

    	/**
    	 * 方法二 异或
    	 * 首先:位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。
    	 * 当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。
    	 * 		依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组。
    	 * 		我们首先还是先异或,剩下的数字肯定是A、B异或的结果,这个结果的二进制中的1,表现的是A和B的不同的位。
    	 * 		我们就取第一个1所在的位数,假设是第3位,接着把原数组分成两组,分组标准是第3位是否为1。
    	 * 		如此,相同的数肯定在一个组,因为相同数字所有位都相同,而不同的数,肯定不在一组。
    	 * 		然后把这两个组按照最开始的思路,依次异或,剩余的两个结果就是这两个只出现一次的数字。
    	 * @param array
    	 * @param num1
    	 * @param num2
    	 */
    	public void FindNumsAppearOnce_2(int [] array,int num1[] , int num2[]) {
    		if(array == null || array.length == 0) {
    			return;
    		}
    		if(array.length == 2) {
    			num1[0] = array[0];
    			num2[0] = array[1];
    		}
    		
    		int bitResult = 0;
    		for (int i = 0; i < array.length; i++) {
    			bitResult ^= array[i];
    		}
    		int index = findFirst1(bitResult);
    		for (int i = 0; i < array.length; i++) {
    			if(isBit1(array[i], index)) {
    				num1[0] ^= array[i];
    			}
    			else {
    				num2[0] ^= array[i];
    			}
    		}
    		
    	}
    	
    	private boolean isBit1(int target, int index) {
    		return ((target >> index) & 1) == 1;
    	}
    	
    	private int findFirst1(int bitResult) {
    		int index = 0;
    		while(((bitResult & 1) == 0) && index < 32) {
    			bitResult >>= 1;
    			index++;
    		}
    		return index;
    	}
    
    展开全文
  • 程序中的魔鬼数字

    万次阅读 2012-09-30 14:28:58
    在代码中使用魔鬼数字(没有具体含义的数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量。  将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是...
      在代码中使用魔鬼数字(没有具体含义的数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量。
    

       将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量的名称没有意义,无法帮助理解代码,同样是一种魔鬼数字。

       在个别情况下,将数字定义为常量反而会导致代码更难以理解,此时就不应该强求将数字定义为常量。

    案例

    // 魔鬼数字,无法理解3具体代表产品的什么状态

    if (product.getProduct().getProductStatus() != 3)

    {

        throw new PMSException(PMSErrorCode.Product.ADD_ERROR);

    }

    // 仍然是魔鬼数字,无法理解NUM_THREE具体代表产品的什么状态

    if (product.getProduct().getProductStatus() != NUM_THREE)

    {

        throw new PMSException(PMSErrorCode.Product.ADD_ERROR);

    }

    //例子中虽然将数字定义为了常量,但代码却并不容易理解

    Point drawCenter = new Point();

    drawCenter.x = parentWindow.x + (parentWindow.width - clientWindow.width) / HALF_SIZE_DIV;

    drawCenter.y = parentWindow.y + (parentWindow.height - clientWindow.height) / HALF_SIZE_DIV;

    return drawCenter;

    //直接使用数字,代码反而更容易理解

    Point drawCenter = new Point();

    drawCenter.x = parentWindow.x + (parentWindow.width - clientWindow.width) / 2;

    drawCenter.y = parentWindow.y + (parentWindow.height - clientWindow.height) / 2;

    return drawCenter;

    展开全文
  • 公钥、密钥和数字证书

    千次阅读 多人点赞 2018-07-26 10:54:43
    转自 我理解的数字证书-1-公钥,私钥和数字证书 英文原文地址: http://www.youdzone.com/signature.html 若下文有任何错误,请告知我,谢谢。79996286@qq.com 主角介绍:Bob and Alice 提起RSA加密算法,公钥...
  • 代码中的魔鬼数字

    千次阅读 2018-05-15 15:19:04
    魔鬼数字的定义:在代码中没有具体含义的数字、字符串。魔鬼数字主要影响了代码可读性,读者看到的数字无法理解其含义,从而难以理解程序的意图。当程序中出现的魔鬼数字过多时,代码的可维护性将会急剧下降,代码变...
  • 数字和字母训练集

    2020-07-30 23:33:22
    10个数字和26个字母不同打印字体训练集,每一个含一千多种字符
  • 阿拉伯数字 0、1、2、3、4、5、6、7、8、9 书写规范
  • 向上取整⌈⌉和向下取整⌊⌋符号

    万次阅读 2018-01-16 09:45:49
    向下取整的运算称为Floor,用数学符号⌊⌋表示;向上取整的运算称为Ceiling,用数学符号⌈...向上向下 取整函数数只会对小数点后面的 数字不为零 的数进行操作, 要是给它一个整数 它就返回整数本身 对小数不为零的数
  • 小项目:手写数字识别,可识别小数点(一) 完整代码已经上传 GitHub(https://github.com/wwwwkd/Digit-Recognition) 代码是自己写的,有些不严谨,有更好的方法或者思路,希望大家之间相互指点相互进步。首先提供...
  • 数字

    2019-08-19 19:25:02
    给你一个长度为n的数字串,数字串里会包含1-m这些数字。如果连续的一段数字子串包含了1-m这些数字,则称这个数字字串为NUM串。你的任务是求出长度最短的NUM串是什么,只需要输出这个长度即可。 输入 输入数据有...
  • 用户输入一个数字,然后判断这个数字能否被5、6整除的情况,根据情况弹出警告框: var a = parseInt(prompt("请输入第一个数字")); if(a%5 == 0){ if(a%6 == 0){ alert("这个数字同时能被5和6整除"); }else{ alert...
  • java字符串数字数字的转换

    万次阅读 2018-11-07 19:43:53
    1:字符串数字数字 假设给定一个字符串,String str="1234"; 要转为转数字 可以这样:int a=Integer.valueOf(str); 输出即可System.out.println(a); 2.数字转字符串数字 假设给定一数字,int a=...
  • python-将字符串转为数字

    万次阅读 2019-02-20 13:11:19
    python-将字符串转为数字
  • 罗马数字数字1到10对照表

    万次阅读 2018-11-22 11:11:18
    常用的数字1到10对应的罗马数字对照表如下所示: 来源: http://www.luomashuzi.com
  • postgreSQL数字与字符串类型转换

    万次阅读 2019-07-10 16:39:47
    数字转字符串 select cast(123 as VARCHAR); 字符串转数字 select cast('123' as INTEGER); 以此类推,应该也可以转换为其他数据类型,欢迎留言补充。 ...
  • input框只能输入数字的两种方法

    万次阅读 多人点赞 2017-11-21 18:03:08
    通过onkeypress事件是输不上任何非数字字符  =48&&event.keyCode  通过onkeyup事件是输上后再去掉非数字字符
  • 很多系统导出的EXCEL内项目是文本型数字,很多公式无法使用。 所以要首先转化成数字。文本型数字前面都有小箭头,点击转化为数字即可。 但是当数据量大的时候就很费劲了。 这时可以先在其他任一单元格输入1 再...
  • 移动端h5点击input打开数字键盘

    万次阅读 2018-05-25 14:44:46
    在Android iOS 上input在获取焦点的时候,弹出数字键盘界面。 代码很简单,只需要修改一下input的type类型即可: &amp;lt;input type='tel' /&amp;gt;
  • 正则表达式只能输入数字

    万次阅读 2019-08-06 17:54:03
    ^[0-9]*$
1 2 3 4 5 ... 20
收藏数 3,439,168
精华内容 1,375,667
关键字:

数字