您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 数码管led显示器控制电路
专题二.经典模块设计——LED数码管显示控制电路设计数码管显示原理数码管的组成:LED数码管是由发光二极管构成的,常用的有8段。数码管的分类:有共阴和共阳极两种。多个LED的阴极连在一起的为共阴极数码管,阳极连在一起的为共阳极数码管。共阴极数码管的公共端接地,阳极(a到h)接高电平,数码管点亮。共阳极数码管的公共端接电源,阴极(a到h)接低,数码管点亮。数码管的段码和位码数码管的位码就是提供给公共端的电平。位码的作用是控制数码管的亮灭。数码管的段码就是提供给a,b,c,d,e,f,g,h的电平。段码的作用是控制数码管显示什么字符。单个数码管需要9个端口来控制。位码段码举例:位码和段码例1:显示字符“1”。(共阴极数码管)位码应该接低电平。段码按照hgfedcba的顺序,应该为“00000110”。例2:显示字符“A”。(共阳极数码管)位码应该接高电平。段码按照hgfedcba的顺序,应该为“10001000”。LED数码管显示控制电路静态显示方式动态显示方式(1)LED静态显示控制电路静态显示方式将每一个数码管的段码端a~h连接到CPLD/FPGA的IO端口上,公共端接地(对于共阴极LED)。每个数码管需要8个IO口线,N个数码管共需要N×8条IO口线。当CPLD/FPGA有相当多的IO端口资源,并且显示的位数较少时(通常为1~2位),可以直接使用静态显示的方式。数码管静态显示方式的优点是连线简单,软件编程简单。缺点是需要耗费大量的IO端口资源。CPLD/FPGA……8×N静态显示的方式CPLD/FPGA驱动LED静态显示译码程序Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;Entitydisplayis--共阴极数码管段码译码port(data:INstd_logic_vector(3downto0);seg:OUTstd_logic_vector(6downto0)--gfedcba);Enddisplay;architectureaofdisplayisbeginprocess(data)begincasedatais--gfedcbawhen0000=seg=0111111;--0when0001=seg=0000110;--1when0010=seg=1011011;--2when0011=seg=1001111;--3when0100=seg=1100110;--4when0101=seg=1101101;--5when0110=seg=1111101;--6when0111=seg=0000111;--7when1000=seg=1111111;--8when1001=seg=1100111;--9when1010=seg=1110111;--Awhen1011=seg=1111100;--bwhen1100=seg=0111001;--cwhen1101=seg=1011110;--dwhen1110=seg=1111001;--Ewhen1111=seg=1110001;--Fwhenothers=seg=0000000;--全灭endcase;endprocess;enda;仿真结果将要显示的数据译成段码在数码管上显示出来。静态显示应用举例:设计一个4路独立键盘输入电路,读取键盘的键值,并将键值在一位静态共阴极LED数码管中显示出来。输入为时钟信号CLK(50MHz),按键状态KEY1,KEY2,KEY3,KEY4。输出为LED数码管的段码SEG[6..0]。电路模块输入信号:clk:时钟,50MHz;reset:复位信号;key1,key2,key3,key4:按键信号输入;输出信号:SEG[6..0]:静态LED数码管的段码信号。ledappinstclkclkresetresetkey1key1key2key2key3key3key4key4SEG[6..0]SEG[6..0]clkresetdindoutdebounceinst2clkresetdindoutdebounceinst3clkresetdindoutdebounceinst4clkresetdindoutdebounceinst5clk10hzkey1key2key3key4seg[6..0]ctrlinst6VCCresetINPUTVCCkey1INPUTVCCkey2INPUTVCCkey3INPUTVCCkey4INPUTSEG[6..0]OUTPUTVCCclkINPUTclkinclkoutfdiv200hzinstn250000SignedIntegerParameterValueTypeclkinclkoutfdiv10hzinst13n5000000SignedIntegerParameterValueType分频模块去抖动模块键盘扫描译码模块50MHz键盘扫描译码模块程序(1)ctrlinstclk10hzclk10hzkey1key1key2key2key3key3key4key4seg[6..0]seg[6..0]--输出’1’的段码--输出’2’的段码--输出’3’的段码--输出’4’的段码--数码管灯灭键盘扫描译码模块程序(2)ctrlinstclk10hzclk10hzkey1key1key2key2key3key3key4key4seg[6..0]seg[6..0]clk10hzkey1key2key3key4keyvalue[2..0]keyscaninst7data[2..0]seg[6..0]displayinst8keyscan程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitykeyscanisport(clk10hz:INstd_logic;key1,key2,key3,key4:INstd_logic;keyvalue:OUTintegerrange0to4);endkeyscan;architectureaofkeyscanisbeginprocess(clk10hz)--100msbeginif(clk10hz'eventandclk10hz='1')thenif(key1='0')thenkeyvalue=1;--输出键值1elsif(key2='0')thenkeyvalue=2;--输出键值2elsif(key3='0')thenkeyvalue=3;--输出键值3elsif(key4='0')thenkeyvalue=4;--输出键值4elsekeyvalue=0;--输出键值0endif;endif;endprocess;enda;display程序:Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;Entitydisplayisport(data:INintegerrange0to4;seg:OUTstd_logic_vector(6downto0)--gfedcba);Enddisplay;architectureaofdisplayisbeginprocess(data)begincasedatais--gfedcbawhen1=seg=0000110;--1when2=seg=1011011;--2when3=seg=1001111;--3when4=seg=1100110;--4whenothers=seg=0000000;--全灭endcase;endprocess;enda;(2)LED动态显示控制电路在显示的数据较多时,会用到多个数码管,如果用静态显示方式会占用很多IO(8×N),这时可以采用动态扫描方式来实现。动态扫描方式的硬件连接是:将每个数码管的段码引脚并联接到CPLD/FPGA的IO端口上,每个数码管的公共端是独立的,通过控制公共端来控制相应数码管的亮、灭。N个LED数码管以动态方式显示时,需要8+N个IO口线。其中8个IO口线用作输出段码,N个IO口线输出位码。段码共用,位码独立动态显示方式实现方法是依次点亮各个LED数码管,轮流向各个数码管送出段码和位码,循环进行显示。一个数码管显示之后下一个数码管马上显示,利用人眼的视觉暂留特性,得到多个数码管同时显示的效果。采用数码管的动态显示方式,数码管的扫描频率的快慢控制相当重要。扫描频率太慢,会产生数码管逐个显示的效果。扫描频率太快也不好,会造成数码管的亮度不够,因为数码管需要一定的时间才能达到一定的亮度。通常扫描频率为1KHz(即数码管显示1ms)可以达到满意的效果。ab...hG1G2G3G4G5G6G7G8动态显示电路框图分频器计数器段码数据设置sysclk50Mhz1khzclk1khz位码数据设置SCAN[7..0]qcnt[2..0]SEG[6..0]如上图所示,为LED动态显示顶层原理图。由fdiv分频模块,cnt计数模块和dispdec显示译码模块三个模块组成。输入为:sysclk:50MHz系统时钟。d0~d7:8个显示数据,分别显示在8个数码管上。输出为:SEG【6..0】:7位段码输出。SCAN【7..0】:8位位码输出,每一位分别控制一个数码管的点亮。clkinclkoutfdivinstN50000SignedIntegerParameterValueTypeclkqcnt[2..0]cntinst1VCCsysclkINPUTSEG[6..0]OUTPUTSCAN[7..0]OUTPUTqcnt[2..0]d0[3..0]d1[3..0]d2[3..0]d3[3..0]d4[3..0]d5[3..0]d6[3..0]d7[3..0]seg[6..0]scan[7..0]dispdecinst13VCCd0[3..0]INPUTVCCd1[3..0]INPUTVCCd2[3..0]INPUTVCCd3[3..0]INPUTVCCd4[3..0]INPUTVCCd5[3..0]INPUTVCCd6[3..0]INPUTVCCd7[3..0]INPUTdisplayinstsysclksysclkd0[3..0]d0[3..0]d1[3..0]d1[3..0]d2[3..0]d2[3..0]d3[3..0]d3[3..0]d4[3..0]d4[3..0]d5[3..0]d5[3..0]d6[3..0]d6[3..0]d7[3..0]d7[3..0]SEG[6..0]SEG[6..0]SCAN[7..0]SCAN[7..0]50MHz1KHzCPLD/FPGA驱动LED动态显示程序显示译码模块dispdecLibraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;entitydispdecisport(qcnt:INintegerrange0to7;--计数值输入d0,d1,d2,d3,d4,d5,d6,d7:INstd_logic_vector(3downto0);--显示数据seg:OUTstd_logic_vector(6dow
本文标题:数码管led显示器控制电路
链接地址:https://www.777doc.com/doc-363373 .html