数码管led显示器控制电路_第1页
数码管led显示器控制电路_第2页
数码管led显示器控制电路_第3页
数码管led显示器控制电路_第4页
数码管led显示器控制电路_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专题二.

经典模块设计——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端口资源。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--gfedcba

when"0000"=>seg<="0111111";--0when"0001"=>seg<="0000110";--1when"0010"=>seg<="1011011";--2when"0011"=>seg<="1001111";--3when"0100"=>seg<="1100110";--4when"0101"=>seg<="1101101";--5when"0110"=>seg<="1111101";--6when"0111"=>seg<="0000111";--7when"1000"=>seg<="1111111";--8when"1001"=>seg<="1100111";--9when"1010"=>seg<="1110111";--Awhen"1011"=>seg<="1111100";--bwhen"1100"=>seg<="0111001";--cwhen"1101"=>seg<="1011110";--dwhen"1110"=>seg<="1111001";--Ewhen"1111"=>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数码管的段码信号。分频模块去抖动模块键盘扫描译码模块50MHz键盘扫描译码模块程序(1)--输出’1’的段码--输出’2’的段码--输出’3’的段码--输出’4’的段码--数码管灯灭键盘扫描译码模块程序(2)keyscan程序: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; --输出键值1 elsif(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)可以达到满意的效果。动态显示电路框图分频器计数器段码数据设置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位位码输出,每一位分别控制一个数码管的点亮。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(6downto0);--7位段码输出scan:OUTstd_logic_vector(7downto0)--8位位码输出);enddispdec;architectureaofdispdecissignaldata:std_logic_vector(3downto0);beginprocess(qcnt,d0,d1,d2,d3,d4,d5,d6,d7)begincaseqcntis--根据计数值,输出相应的位码,并设置要显示的数据when0=>scan<="11111110";data<=d0;when1=>scan<="11111101";data<=d1; when2=>scan<="11111011";data<=d2; when3=>scan<="11110111";data<=d3; when4=>scan<="11101111";data<=d4; when5=>scan<="11011111";data<=d5;when6=>scan<="10111111";data<=d6;when7=>scan<="01111111";data<=d7;whenothers=>scan<="11111111";data<=d0;endcase;endprocess;process(data)--对显示数据译码begincasedataiswhen"0000"=>seg<="0111111";--0when"0001"=>seg<="0000110";--1when"0010"=>seg<="1011011";--2when"0011"=>seg<="1001111";--3when"0100"=>seg<="1100110";--4when"0101"=>seg<="1101101";--5when"0110"=>seg<="1111101";--6when"0111"=>seg<="0000111";--7when"1000"=>seg<="1111111";--8when"1001"=>seg<="1100111";--9when"1010"=>seg<="1110111";--Awhen"1011"=>seg<="1111100";--bwhen"1100"=>seg<="0111001";--cwhen"1101"=>seg<="1011110";--dwhen"1110"=>seg<="1111001";--Ewhen"1111"=>seg<="1110001";--Fwhenothers=>seg<="0000000";endcase;endprocess;enda;仿真结果以1KHz频率动态扫描显示,依次输出8个数码管的段码和位码。123456LED动态显示分位译码电路设计要求:采用动态显示方式,将一个两位数用两个数码管显示出来。一个数码管显示个位,另一个显示十位。顶层原理图如上图所示,为LED分位译码显示顶层原理图。由fdiv分频模块,cnt计数模块,fenwei分位模块和dispdec显示译码模块四个模块组成。输入为:sysclk:50MHz系统时钟。num[6..0]:一个要显示的两位数,0~99。输出为: SEG【6..0】:7位段码输出。 SCAN【7..0】:8位位码输出,每一位分别控制一个数码管的点亮。50MHz1KHz分位模块LED动态显示分位译码电路程序1.fenwei分位模块Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;entityfenweiisport(num:INintegerrange0to99;numshi:OUTintegerrange0to9;numge:OUTintegerrange0to9);endfenwei;architectureaoffenweiisbeginnumge<=numMOD10;numshi<=num/10;enda;2.显示译码模块dispdecLibraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;entitydispdecisport(qcnt:INintegerrange0to1;--计数值输入d0,d1:INintegerrange0to9;--分位得到的十位数和个位数seg:OUTstd_logic_vector(6downto0);--7位段码输出scan:OUTstd_logic_vector(7downto0)--8为位码输出);enddispdec;architectureaofdispdecissignaldata:integerrange0to9;beginprocess(qcnt,d0,d1)begincaseqcntiswhen0=>scan<="11111110";data<=d0;when1=>scan<="11111101";data<=d1;whenothers=>scan<="11111111";data<=d0;endcase;endprocess;process(data)begincasedataiswhen0=>seg<="0111111";--0when1=>seg<="0000110";--1when2=>seg<="1011011";--2when3=>seg<="1001111";--3when4=>seg<="1100110";--4when5=>seg<="1101101";--5when6=>seg<="1111101";--6when7=>seg<="0000111";--7when8=>seg<="1111111";--8when9=>seg<="1100111";--9whenothers=>seg<="0000000";endcase;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论