led数码管

FPGA之静态数码管显示

一曲冷凌霜 提交于 2020-02-06 07:54:26
数码管显示0~F,每隔0.5秒变换一次 数码管连接方式不同分为 共阴极 数码管和 共阳极 数码管。 数码管引脚: 上图两个com引脚实际是连在一起的,其他引脚的公共端,称为 位选 ,位选的高低电平决定改数码管能否点亮,其他管脚为 段选 信号,决定数码管上哪个二极管发光。 共阴极数码管 连接方式 共阳极数码管连接方式: 共阳八段极数码管真值表 数码管原理图 以第五个数码管为例,LEDSEG CH6通过470R的电阻连接到Q6三极管的基极,第五个数码管的位选SEL5连接到Q6三极管的集电极,Q6三极管的发射极;连接电源。所以在代码中,只需将LEDSEG CH6(代码意义的位选)赋值为0(低电平),则数码管真正的选段就连通电源了,此数码管位共阳极数码管。在数码管电路图中,六个数码管公用八个段选信号,段选信号与FPGA管脚连接。所以,静态显示的时候,六个数码管显示的一样。 本次设计的系统框图 顶层模块原理图 顶层模块设计 module seg_led_static_top ( input sys_clk , //系统时钟 input sys_rst_n , //系统复位信号(低有效) output [ 5 : 0 ] sel , //数码管位选 output [ 7 : 0 ] seg_led //数码管段选 ) ; //parameter define parameter TIME

数码管识别

♀尐吖头ヾ 提交于 2020-01-21 21:27:20
由于七段数码管显示数字和字符比较直观、清晰、响应速度快,所以它被广泛应用在现场仪器仪表中。通过摄像头获取数码管数字图片,也可以根据数码管编码方式比较容易识别出其中的数字。 计数器、频率计上的数码管显示动态变化的数字 根据不同的显示原理,七段数码管可以使用LED、LCD、OLED、场致发光管等制作,颜色也有很多种类。其中红色LED的数码管比较常见。 红色七段数码管0~9显示的图片 数码管的七个笔画根据不同的点亮组合,可以形成不同的数字、字母以及字符。理论上可以总共有127(2^7-1)个不同的编码组合。下面的表示是常见的字符、数字编码方式。在不同的场合,下面的编码会有略微调整。 七段数码管显示不同数字和字符 识别数码管的数字、字母,只要根据图片的灰度信息即可。根据每个笔画段的亮度,判断对应的LED段是否点亮,进而可以确定所对应的数字或者字母。 有的时候数码管的右下角还有一个小数点位,用于显示数字的小数点的位置。它也可以配合字符、数字来表达其他的含义。 七段数码管灰度图像 相比于汉字、英文字符的印刷体,七段数码管的字体并没有太多的变化。它会在尺寸、比例、笔画的粗细、字体的倾角方面有差异。 如果已知数码管的字体,可以比较方便在归一化之后的图像中确定下每个笔画段所占具的图像位置。 下图显示了常见到的七段数码段各个笔画对应的序列位置,以及0~9数字对应的七段点亮编码。 七段数码管0

两个数码管显示16位数

梦想与她 提交于 2020-01-15 04:15:01
背景 此篇文章是4x4矩阵键盘的衍生品。 4x4的矩阵键盘一共16个按键,每个按键对应相应的键值,分别为0~15。每按一个键,对应的键值并联到4个LED灯上,以二进制的形式表示(比如键值5,二进制为 'b0101 ,对应的LED灯亮灭情况为:亮灭亮灭),同时也并联到数码管上,通过数码管显示出目前对应的键值。 然而,一个数码管足够显示0~F(即0到15)这16个键值,如果想完完全全转换成十进制来显示,即键值10显示为 10 而非 a ,键值11显示为 11 而非 b ,那该如何操作呢? 以上即为不安分守己的瞎折腾背景。 开始 之前,写过一篇 关于小梅哥74HC595驱动设计的思考 ,该驱动可充分利用两片级联的74HC595芯片,将16位串行数据转换为16位并行数据。实际应用中,由于开发板上有8个数码管;每个数码管又有8个段,正好16位数据。驱动将16位并行数据 data[15:0] 输入,输出串行的16位数据 ds ,并利用两片级联芯片将16位数据 ds 再次转为并行数据输出,以此驱动数码管,并显示相应数据。选择对应的数码管(以 sel[7:0] 信号表示),数码管上对应需要显示的段(以 seg[7:0] 信号表示)。 目前74HC595驱动已经写好,只等数码管的位选和段选数据输入。产生16位数据的verilog文件以梅哥的hex8.v文件为参考,并作些许修改

GPIO应用-LED

。_饼干妹妹 提交于 2020-01-10 15:49:30
LED 由8个发光二极管LED按照组成数字0到9的方式进行物理连接,形成LED数码管,简称LED LED的选择 需要根据实际应用的需求来决定,若只需要显示数字“0”~“9”,需要7段LED即可。 若同时需要显示小数点,则需要8段LED 8段数码管由8个发光二极管LED组成。 MCU是通过I/O引脚来控制LED某段发光二极管的亮暗,从而达到显示某个数字的目的。 控制LED亮暗 确定选用的数码管是共阴极数码管或共阳极数码管。 共阴极数码管:公共端需要接地,8段数码管的信号端高电平有效,只需要在各段加上高电平信号即可使相应的段发光。 共阳极数码管:公共端接电源阳极,8段数码管的信号端低电平有效,只需要在各段加上低电平信号即可使相应的段发光。 例如共阳极8段数码管,[hgfedcba]=[0111 1111]时,h段亮,显示为小数点;[hgfedcba]=[1100 0000]时,除h、g段均亮,显示为数字“0”或字母“O”。 单个LED只能显示一个数字或字母,实际中使用多个LED显示多个数字或字母。 电气参数 能承受的最大电流;额定电压;限流电阻;电流放大电路。 对LED编程 通过一个8位数据线的数据口来控制段。 8段数码管的公共端根据共阴或共阳接到固定的低电平或高电平,现在接到MCU的一个输出引脚(片选信号)由MCU控制,这些n个数码管合在一起称为n连排数码管。

单片机运用,七段数码管如何用单片机控制

自作多情 提交于 2020-01-08 10:44:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 相信大家都见过数码管,数码管上面有abcdefg七个笔画,构成一个“日”字。那么它在单片机电路上一般是起什么作用呢?数码管都知道它是半导体发光器件,那么它的具体原理你知道多少?本文将会逐步解析这些问题,给你还原一个真实的数码管。 数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimal point),其基本单元是发光二极管。数码管是一类价格便宜使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数的器件。 在电器特别是家电领域应用极为广泛,如显示屏、空调、热水器、冰箱等等。绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。 数码管常用段数一般为7段有的另加一个小数点,还有一种数码管是类似于3位“+1”型。数码管位数有半位,1,2,3,4,5,6,8,10位等等。..。,数码管根据LED的接法不同分为共阴和共阳两类,了解数码管的这些特性,数码管对编程是很重要的,因为不同类型的数码管,除了数码管的硬件电路有差异外,数码管编程方法也是不同的。数码管的发光原理是一样的,只是数码管的电源极性不同而已。数码管颜色有红,绿,蓝,黄等几种。数码管广泛用于仪表

数码管和灯

不想你离开。 提交于 2020-01-05 02:54:42
对 led 中所涉及到的几个地址的说明: #define CS1BASE (0x11000000) #define SEGP ((0x10000000+0x248)) #define DIGIP ((CS1BASE+0x0800)) #define LEDP ((CS1BASE+0x 0C 00)) 上述几个值都是由硬件设计人员给出的。其中, DIGIP 为位寄存器地址(总共有 8 个数码管,用来控制要对哪个数码管进行操作); SEGP 为段寄存器地址(其作用有两个:一是控制某个数码管的具体显示内容;二是设定要控制哪个灯 ); LEDP 为控制灯的亮与灭(即只存在两个有效的值:0和1) 例子如下: void myledtest() { //数组的内容分别为:8 7 6 unsigned long int tt[ 3 ] = { 0x0000fe , 0x0000e0 , 0x0000be }; int i = 0 ; while (i < 3 ) { //所有数码管的显示清空,即不显示 * (unsigned short * )(DIGIP) = 0x00 ; //指定数码管显示的内容 * (unsigned short * )(SEGP) = tt[i]; //指定用哪个数码管来显示 * (unsigned short * )(DIGIP) = 0x0080 >> i; i ++

STM32ZET6学习记录之数码管部分

↘锁芯ラ 提交于 2019-12-26 12:35:10
开发板原理图 上图可以看到数码管是共阳连接,说明给一个低电平的时候数码管的相应段会被点亮。 相关的准备工作和LED总体类似(因为数码管和LED用的线路是相同的都是GPIOC的前八个引脚) 区别只在定义宏的时候将LED_PORT_RCC\LED_PORT\LED_PIN改为SMG_PORT_RCC\SMG_PORT\SMG_PIN即可,其余均完全类似,挂接总线和初始化的管脚操作均类似。 当然为了方便管理和提高程序的可移植性我们还是创建了一个名为SMG的文件夹。(在魔术棒中配置相应的编译路径)。 之后将初始化函数调用到主函数中即可。 以上都是和LED实验的相似点。 之后不同的是,我们用数码管显示一般通过 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal) 函数。该函数可以对指定的GPIOx进行值写入,也就是批量。通常我们会使用好几段数码管来显示我们的目标。再使用ResetBits和SetBits函数会很繁琐。 此时我们可以将我们要显示的目标转换成数码管中对应的二进制,换算成16进制的数,保存在一个数组当中,之后我们再对数组进行调用即可。 因为数码管分共阳和共阴连接。但是我们不必写两组数组。 我们可只写共阴的数组,若是共阳解法我们就取反,共阴就直接调用即可。 /***********************************

【蓝桥杯|单片机组】| 数码管与LED流水灯动态显示

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-04 17:54:32
void LedScan() { /*数码管操作*/ static unsigned char i=0; static bit ledflag=0; static unsigned char j=0; P2=(P2&0X1F)|0X80; P0=0XFF; P2&=0X1F; P2|=0X90; P0=0XFF; P2&=0X1F; P2&=0X1F; P0=0X80>>i; P2|=0XC0; P2&=0X1F; P0=LedBuff[i]; P2|=0Xe0; P2&=0X1F; /*LED操作*/ if(led1000>=1000) { led1000=0; if(ledflag==0) { P0=~(0X01<<j); //LED亮 P2|=0X90; P2&=0X1F; ledflag=1; j++; // j 自加的位置很关键,若置于与led1000同一位置内,小灯一次点亮的顺序是LED1->LED3->LED5->LED7 } // 这是因为小灯在熄灭的同时j也会自加一次,从一个LED到下一个LED实际j自加了两次 else if(ledflag==1) { P0=0xff; //LED 灭 P2|=0X90; P2&=0X1F; ledflag=0; } if(j==8) j=0;} i++; if(i==8) i=0; } 讲LedScan()置于中断函数即可

AVR单片机教程——数码管

烂漫一生 提交于 2019-12-01 07:29:52
先解答之前一个思考题:如果不把引脚配置为输出而写高电平,连接LED会怎样? 实验结果是,LED会亮,但相比于输出高电平的情况,亮度很低。这是为什么呢? 通过上一篇教程我们知道,引脚输入输出模式是由寄存器DDRx中DDxn位控制的,可以推断出 pin_mode 函数会改变一个引脚对应的DDxn值,输入为0,输出为1,而其复位后的值为0,即输入,因此如果不把引脚配置为输出,它的模式就是输入。类似地 pin_write 函数会改变PORTxn,其值为函数的第二个参数。 所以不配置输出而写高电平的结果就是,这一引脚的DDxn为0,PORTxn为1,是带上拉电阻的输入模式。上拉电阻相当于VCC接电阻后再接在引脚上,外部电路是引脚接一个电阻再接一个LED到地,总体可以等效为LED被一个电阻限流后接在VCC和地之间,因此LED会亮。 这个电阻的阻值是上拉电阻和本来的限流电阻的阻值之和,上拉电阻是比较大的(根据datasheet P432 Figure30-164可以估算出上拉电阻约40kΩ),相比于限流电阻就是外电阻的输出高电平的情况,LED上的电流小很多,因此亮度也相应低了。 这是一个模拟电路的问题,只用数字电路的分析方法是解决不了的。这个简答的问题也反映了单片机相关知识的综合性。 今天来讲数码管,就是开发板左边那两个日字。 早期数码管也成为辉光灯,依靠气体放点发光,现在一般指7段数码管