显示电路研发设计_第1页
显示电路研发设计_第2页
显示电路研发设计_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、第9章显示电路设计本章重点讨论输出结果在数码管上的显示。 电子线路输出一般都是 用灯的亮与不亮来表示输出的高低电平,这种显示不直观。数码管显 示能够更加直观、形象的描述现象。9.1两输入或门输出显示两输入或门是数字逻辑电路中最基本的门电路,电路图如下:真值表:aby000011101111两输入或门的程序设计可以有多种方式设计。输出结果主要通过38译码器译码转换为7段显示码的输入,其电路程序设计如下: 矚慫润 厲钐瘗睞枥庑赖。library ieee;use ieee.std _lo gic_1164.all;use ieee.std_logic_ un sig ned.all;*ENTIT

2、Y or1 ISPORT(a,b:IN STD_LOGIC;out_c: out stdo gic_vector(7 dow nto 0);out_38: out std_logic_vector(2 dow nto 0);END or1;*architecture rtl OF or1 ISsig nal y:std_logic;begi ny<=a OR b;out_38 <= "000"out_c <= "00111111" whe n y='O' else"00000110"END rtl;波

3、形图如下:9.2 3进制计数器上一章讲到过3进制计数器的设计原理,按照一般的显示需要两个 灯显示结果,在这里我们用一个数码管显示。 让读者能够更加直观的 理解3进制计数器的记数过程。其程序设计如下:聞創沟燴鐺險爱氇 谴净。顶层文件设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dsp3 ISPORT(enable:IN STD_LOGIC;clk:IN STD_LOGIC;out_38: out std_logic_vector(2 downto 0);segment:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );E

4、ND dsp3;ARCHITECTURE rt1 OF dsp3 ISCOMPONENT count3PORT(enable:IN STD_LOGIC;clk:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END COMPONENT;SIGNAL q:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINU0:count3 PORT MAP(enable,clk,q);out_38 <= "000"segment <= "00111111" when q="00&quo

5、t; else"00000110" when q="01" else"1011011"END rt1;再该程序中用 COMPONENT 命令调用了 3 进制计数器的设计程 序,其程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count3 ISPORT(enable:IN STD_LOGIC;clk:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END count3

6、;ARCHITECTURE rt1 OF count3 ISSIGNAL q_tmp:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN process(clk) beginIF(clk'event and clk='1')thenif(enable='1')then if(q_tmp="10")thenq_tmpv=(others二>'0');elseq_tmp<=q_tmp+1;end if;end if;end if;q<=q_tmp;end process;end rt1;波

7、形图如下:100 .On? 200.0ns300.0ns00 .Uns GDO.Dns 600.0n57 CD. 0ns 800.0ns900. DdllIIhdIenablef elk0 ou)302. .3601-tv segmantG segmenl5 segment-e segment segment segmenll ssgmenlO1 訂1aHOii19.3 24进制计数器24进制计数器显示和3进制计数器的显示思路一样。不同之处在 于前者需要两个数码管,在设计时必须考虑选择数码管。在任何自顶 向下的VHDL设计描述中,设计人员常常将整个设计的系统划分为 几个模块,然后采用结构描述方

8、式对整个系统进行描述。残骛楼諍锩瀨濟溆塹籟。顶层结构体的VHDL源代码24 进制计数器显示程序设计过程中就包含了记数部分、 显示部分。 另外为了使记数准确, 我们必须要获得稳定的频率, 即还包括稳定的 频率源部分。下面我们给出顶层结构体的 VHDL 源代码。其中 3 个 模块以元件的形式给出, 首先在结构体的说明部分进行元件说明, 然 后在结构体中进行例化调用。 同时在结构体的说明部分定义了中间信 号,主要用来在模块之间传递信息 。 酽锕极額閉镇桧猪訣锥。 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.

9、ALL;ENTITY clock ISPORT(clk:IN STD_LOGIC;enable:IN STD_LOGIC;sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);segment:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END clock;ARCHITECTURE rt1 OF clock ISCOMPONENT clk_div1000 PORT(clk:IN STD_LOGIC;clk_div:out STD_LOGIC);end component;component count24PORT(enable:IN STD_LOGIC;

10、clk0:IN STD_LOGIC;qh:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);ql:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;component displayPORT(clk:IN STD_LOGIC;qh:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ql:IN STD_LOGIC_VECTOR(3 DOWNTO 0); sel:out STD_LOGIC_VECTOR(2 DOWNTO 0);segment:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); end com

11、ponent;signal qh: STD_LOGIC_VECTOR(3 DOWNTO 0); signal ql: STD_LOGIC_VECTOR(3 DOWNTO 0);signal clk0:STD_LOGIC;beginu0:clk_div1000 PORT MAP(clk,clk0);u1:count24 PORT MAP(enable,clk0,qh,ql);u2:display PORT MAP(clk,qh,ql,sel,segment);end rt1;9.3.2 频率源 VHDL 源代码为了获得的稳定的频率源,我们才用 1000 赫兹频率作为输入,用 1000 进制 计数

12、器分频得到 1 赫兹频率。其程序如下: 彈贸摄尔霁毙攬砖卤 庑。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div1000 ISPORT(clk:IN STD_LOGIC;clk_div:out STD_LOGIC);END clk_div1000;ARCHITECTURE rt1 OF clk_div1000 ISSIGNAL q_tmp:integer range 0 to 999;BEGINprocess(clk)beginIF(clk'event and

13、clk='1')thenif(q_tmp=999)thenq_tmp<=0;elseq_tmp<=q_tmp+1;end if;end process;process(clk)beginIF(clk'event and clk='1')thenif(q_tmp=999)thenclk_div<='1'elseclk_div<='0'end if;end if;end process;end rt1;9.3.3 计数部分 VHDL 源代码24 进制计数器的计数主要是 24 进制,在这里我们把 24 分

14、为个位 和十位设计。其 VHDL 源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count24 ISPORT(enable:IN STD_LOGIC;clk0:IN STD_LOGIC;-cout:out STD_LOGIC;qh:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);ql:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END count24;ARCHITECTURE rt1 OF count24 ISSIGNAL qh_

15、temp,ql_temp:STD_LOGIC_VECTOR(3 DOWNTO 0);謀荞 抟箧飆鐸怼类蒋薔。BEGINprocess(clk0)beginIF(clk0'event and clk0='1')thenif (enable='1') thenif (qh_temp="0010" and ql_temp="0011") then qh_temp<="0000"ql_temp<="0000"elseif (ql_temp="1001"

16、) then ql_temp<="0000"qh_temp<=qh_temp+1;elseql_temp<=ql_temp+1;end if;end if;qh二qh_temp;qlv二ql_temp;end process;end rt1;934显示模块VHDL源代码显示模块的输入信号主要来自于计数部分的输出信息。在输出信号中,我们采用循环点亮两个 LED七段显示数码管显示输出。我们通 过信号来进行2个LED七段显示数码的选择,从而将输出信号送到 相应的LED七段显示数码上完成24进制计数器的结果显示。模块框 图如下: 厦礴恳蹒骈時盡继價骚。qhql计时

17、位选电路qOqlq3七段显示译码segment0 se呂ment1 segment 2 segmen13 segment4 segment5 segment 6enablecount8R Q 衣elCLK从图中可以看出,显示模块有四个部分构成:八进制计数器、计时位选择电路、七段显示译码电路。在外部时钟信号 clk 的作用下, 8 进制计数器的输出从 000 到 111 按顺序循环变化,输出信号为se。信号seI作为计时位选择电路的选 择信号,用来选择对应位的数据并将其转换为四位位矢量。 最后将计 时位选择电路的输出信号 q 送到七段显示译码电路的输入端口, 将其 转换成用来点燃 LED 七段显

18、示数码管的 segment 信号 。 茕桢广鳓鯡选块网羈 泪。下面描述显示模块中的四个子电路,然后描述其总体功能。 8 进 制计数器 VHDL 源代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count8 ISPORT(cIk:IN STD_LOGIC;seI:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END count8;ARCHITECTURE rt1 OF count8 ISSIGNAL seI_tmp:STD_LOGIC_VECTOR(2 DO

19、WNTO 0);BEGINprocess(cIk)beginIF(cIk'event and cIk='1')thenif(seI_tmp="111")thensel_tmp<=(others=>'0');elsesel_tmp<=sel_tmp+1;end if;end if;sel<=sel_tmp;end process;end rt1;计时位选择电路的功能是根据 8 进制计数器的计数输出的选择信 号来选择对应计时显示位的计时数据, 作为送致七段显示译码电路的 输入数据。在计时位选择电路中我们要将输入数据

20、都转化成 4 位宽度 的数据。其 VHDL 源代码如下: 鹅娅尽損鹌惨歷茏鴛賴。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY time_choose ISPORT(sel:IN STD_LOGIC_VECTOR(2 DOWNTO 0);qh:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ql:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END time_choose;ARCHITECTURE rt1 OF time_choose ISBE

21、GINPROCESS(sel,qh,ql)BEGINCASE sel ISWHEN "000"=>q<=ql;WHEN "001"=>q<=qh;WHEN OTHERS=>q<="XXXX"END CASE;END PROCESS;END rt1;七段显示译码电路的功能是将显示的数据转换成用来点燃LED七段显示数码管的segment信号。其VHDL源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY seg7 ISPORT(q:IN STD_LO

22、GIC_VECTOR(3 DOWNTO 0);segment:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END seg7;ARCHITECTURE rt1 OF seg7 ISBEGINPROCESS(q)BEGINCASE q ISWHEN "0000"=>segment<="0111111"WHEN "0001"=>segment<="0000110"WHEN "0010"=>segment<="1011011"

23、WHEN "0011"=>segment<="1001111"WHEN "0100"=>segment<="1100110"WHEN "0101"=>segment<="1101101"WHEN "0110"=>segment<="1111101"WHEN "0111"=>segment<="0100111"WHEN "1000

24、"=>segment<="1111111"WHEN "1001"=>segment<="1101111"WHEN OTHERS=>segment<="XXXXXXX"END CASE;END PROCESS;END rt1;下面对 24进制计数器显示模块总体功能描述。 在描述 24 进制计数 器显示模块时, 我们以引用元件的形式来调用以上描述的子电路。 其 VHDL 源代码如下: 籟丛妈羥为贍偾蛏练淨。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY display ISPORT(clk:IN STD_LOGIC;qh:IN STD_LOGIC_VECTOR(3 DOWNTO 0); ql:IN STD_LOGIC_

温馨提示

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

评论

0/150

提交评论