《数码管led显示器控制电路课件》由会员分享,可在线阅读,更多相关《数码管led显示器控制电路课件(36页珍藏版)》请在金锄头文库上搜索。
1、专题二. 经典模块设计,LED数码管显示控制 电路设计,数码管显示原理,数码管的组成:LED数码管是由发光二极管构成的,常用的有8段。,数码管的分类:有共阴和共阳极两种。多个LED的阴极连在一起的为共阴极数码管,阳极连在一起的为共阳极数码管。 共阴极数码管的公共端接地,阳极(a到h)接高电平,数码管点亮。 共阳极数码管的公共端接电源,阴极(a到h)接低,数码管点亮。,数码管的段码和位码,数码管的位码就是提供给公共端的电平。位码的作用是控制数码管的亮灭。 数码管的段码就是提供给a,b,c,d,e,f,g,h的电平。段码的作用是控制数码管显示什么字符。 单个数码管需要9个端口来控制。,举例:位码和
2、段码,例1:显示字符“1”。(共阴极数码管) 位码应该接低电平。 段码按照hgfedcba的顺序, 应该为“00000110”。,例2:显示字符“A”。(共阳极数码管) 位码应该接高电平。 段码按照hgfedcba的顺序, 应该为“10001000”。,LED数码管显示控制电路,静态显示方式 动态显示方式,(1)LED静态显示控制电路,静态显示方式将每一个数码管的段码端ah连接到CPLD/FPGA的IO端口上,公共端接地(对于共阴极LED)。每个数码管需要8个IO口线,N个数码管共需要N8条IO口线。 当CPLD/FPGA有相当多的IO端口资源,并且显示的位数较少时(通常为12位),可以直接使
3、用静态显示的方式。,数码管静态显示方式的优点是连线简单,软件编程简单。 缺点是需要耗费大量的IO端口资源。,8N,静态显示的方式,CPLD/FPGA驱动LED静态显示译码程序,Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all; Entity display is -共阴极数码管段码译码 port( data: IN std_logic_vector(3 downto 0); seg: OUT std_logic_vector(6 dow
4、nto 0) -gfedcba ); End display;,architecture a of display is begin process(data) begin case data is -gfedcba when 0000 = seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg = 0000000; -全灭 end case; end process; end a;,仿真结果,将要显示的数据译成段码在数码管上显示出来。,静态显示应用举例:,设计一个4路独立键盘输入电路,读取键盘的键值,并将键值在一
5、位静态共阴极LED数码管中显示出来。 输入为时钟信号CLK(50MHz),按键状态KEY1,KEY2,KEY3,KEY4。 输出为LED数码管的段码SEG6.0。,电路模块,输入信号: clk:时钟,50MHz; reset:复位信号; key1, key2, key3, key4:按键信号输入; 输出信号: SEG6.0:静态LED数码管的段码信号。,分频模块,去抖动模块,键盘扫描译码模块,50MHz,键盘扫描译码模块程序(1),-输出1的段码,-输出2的段码,-输出3的段码,-输出4的段码,-数码管灯灭,键盘扫描译码模块程序(2),keyscan程序:,library ieee; use
6、ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity keyscan is port( clk10hz: IN std_logic; key1, key2, key3, key4: IN std_logic; keyvalue: OUT integer range 0 to 4 ); end keyscan;,architecture a of keyscan is begin process(clk10hz) -100ms begin if(clk10hze
7、vent and clk10hz=1) then if(key1=0) then keyvalue = 1; -输出键值1 elsif(key2=0) then keyvalue = 2; -输出键值2 elsif(key3=0) then keyvalue = 3; -输出键值3 elsif(key4=0) then keyvalue = 4; -输出键值4 else keyvalue = 0; -输出键值0 end if; end if; end process; end a;,display程序:,Library ieee; Use ieee.std_logic_1164.all; Us
8、e ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all; Entity display is port( data: IN integer range 0 to 4; seg: OUT std_logic_vector(6 downto 0) -gfedcba ); End display; architecture a of display is begin process(data) begin case data is -gfedcba when 1 = seg seg seg seg seg = 0000000; -全灭
9、end case; end process; end a;,(2)LED动态显示控制电路,在显示的数据较多时,会用到多个数码管,如果用静态显示方式会占用很多IO(8N),这时可以采用动态扫描方式来实现。 动态扫描方式的硬件连接是: 将每个数码管的段码引脚并联接到CPLD/FPGA的IO端口上,每个数码管的公共端是独立的,通过控制公共端来控制相应数码管的亮、灭。,N个LED数码管以动态方式显示时,需要8+N个IO口线。其中8个IO口线用作输出段码,N个IO口线输出位码。,段码共用,位码独立,动态显示方式,实现方法是依次点亮各个LED数码管,轮流向各个数码管送出段码和位码,循环进行显示。一个数码管
10、显示之后下一个数码管马上显示,利用人眼的视觉暂留特性,得到多个数码管同时显示的效果。 采用数码管的动态显示方式,数码管的扫描频率的快慢控制相当重要。扫描频率太慢,会产生数码管逐个显示的效果。扫描频率太快也不好,会造成数码管的亮度不够,因为数码管需要一定的时间才能达到一定的亮度。通常扫描频率为1KHz(即数码管显示1ms)可以达到满意的效果。,动态显示电路框图,SCAN7.0,SEG6.0,如上图所示,为LED动态显示顶层原理图。由fdiv分频模块,cnt计数模块和dispdec显示译码模块三个模块组成。 输入为: sysclk:50MHz系统时钟。 d0d7:8个显示数据,分别显示在8个数码管
11、上。 输出为: SEG【6.0】:7位段码输出。 SCAN【7.0】:8位位码输出,每一位分别控制一个数码管的点亮。,50MHz,1KHz,CPLD/FPGA驱动LED动态显示程序,显示译码模块dispdec Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all; entity dispdec is port( qcnt: IN integer range 0 to 7; -计数值输入 d0, d1, d2, d3, d4, d5, d6,
12、 d7: IN std_logic_vector(3 downto 0); -显示数据 seg: OUT std_logic_vector(6 downto 0); -7位段码输出 scan: OUT std_logic_vector(7 downto 0) -8位位码输出 ); end dispdec;,architecture a of dispdec is signal data: std_logic_vector(3 downto 0); begin process(qcnt, d0, d1, d2, d3, d4, d5, d6, d7) begin case qcnt is -根据
13、计数值,输出相应的位码,并设置要显示的数据 when 0 = scan scan scan scan scan scan scan scan scan = 11111111; data = d0; end case; end process;,process(data) -对显示数据译码 begin case data is when 0000 = seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg = 0000000; end case; end process; end a;,仿真结果,以1KHz频率动态扫
14、描显示,依次输出8个数码管的段码和位码。,1,2,3,4,5,6,LED动态显示分位译码电路,设计要求: 采用动态显示方式,将一个两位数用两个数码管显示出来。一个数码管显示个位,另一个显示十位。,顶层原理图,如上图所示,为LED分位译码显示顶层原理图。由fdiv分频模块,cnt计数模块,fenwei分位模块和dispdec显示译码模块四个模块组成。 输入为: sysclk:50MHz系统时钟。 num6.0:一个要显示的两位数,099。 输出为: SEG【6.0】:7位段码输出。 SCAN【7.0】:8位位码输出,每一位分别控制一个数码管的点亮。,50MHz,1KHz,分位模块,LED动态显示
15、分位译码电路程序,1. fenwei分位模块 Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all; entity fenwei is port( num: IN integer range 0 to 99; numshi: OUT integer range 0 to 9; numge: OUT integer range 0 to 9 ); end fenwei; architecture a of fenwei is begin numge = num MOD 10; numshi = num/10; end a;,2. 显示译码模块dispdec Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all; entity dispdec is port( qcnt: IN integer range 0 to 1; -计数值输入 d0, d1: IN integer range 0 to 9; -分位得到的十位数和个位数 seg: OUT std_l