7段数码管控制接口的设计
(完整word版)八位七段数码管动态显示电路设计

八位七段数码管动态显示电路的设计一七段显示器介绍七段显示器,在许多产品或场合上经常可见。
其内部结构是由八个发光二极管所组成,为七个笔画与一个小数点,依顺时针方向为A、B、C、D、E、F、G与DP等八组发光二极管之排列,可用以显示0~9数字及英文数A、b、C、d、E、F。
目前常用的七段显示器通常附有小数点,如此使其得以显示阿拉伯数之小数点部份。
七段显示器的脚位和线路图如下图4.1所示( 其第一支接脚位于俯视图之左上角)。
图4.1、七段显示器俯视图由于发光二极管只有在顺向偏压的时候才会发光。
因此,七段显示器依其结构不同的应用需求,区分为低电位动作与高电位动作的两种型态的组件,另一种常见的说法则是共阳极( 低电位动作)与共阴极( 高电位动作)七段显示器,如下图4.2所示。
( 共阳极) ( 共阴极)图4.2、共阳极(低电位动作)与共阴极(高电位动作)要如何使七段显示器发光呢?对于共阴极规格的七段显示器来说,必须使用“ Sink Current ”方式,亦即是共同接脚COM为VCC,并由Cyclone II FPGA使接脚成为高电位,进而使外部电源将流经七段显示器,再流入Cyclone II FPGA的一种方式本实验平台之七段显示器模块接线图如下图4.5所示。
此平台配置了八组共阳极之七段显示器,亦即是每一组七段显示器之COM接脚,均接连至VCC电源。
而每一段发光二极管,其脚位亦均与Cyclone II FPGA接连。
四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。
八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
图4.5、七段显示器模块接线图七段显示器之常见应用如下可作为与数值显示相关之设计。
⏹电子时钟应用显示⏹倒数定时器⏹秒表⏹计数器、定时器⏹算数运算之数值显示器二七段显示器显示原理七段显示器可用来显示单一的十进制或十六进制的数字,它是由八个发光二极管所构成的( 每一个二极管依位置不同而赋予不同的名称,请参见图4.1 ) 。
七段数码管设计电路

EDA基础及应用实验项目报告项目题目:七段数码管显示电路设计姓名:胡小琴院系:电子信息工程学院专业:电子信息工程(对口高职)学号: 201315294127指导教师:徐正坤综合成绩:完成时间: 2015年5月22日一、项目实验内容摘要1、设计一个共阴7段数码管控制接口,要求:在时钟信号的控制下,使8位数码管动态刷新显示0—9。
2、设计一个基本功能十进制计数器,实现十进制计数器输出的动态显示。
二、项目实验源代码程序1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY countbasic ISPORT(CLK:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END countbasic ;ARCHITECTURE behav OF countbasic ISBEGINPROCESS(CLK)V ARIABLE Q:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENIF Q<9 THEN Q:=Q+1;ELSE Q:=(OTHERS=>'0');END IF;END IF;IF Q="1001" THEN COUT<='1';ELSE COUT<='0';END IF;DOUT<=Q;END PROCESS;END behav;程序2 ENTITY countbasic_vhd_tst ISEND countbasic_vhd_tst;ARCHITECTURE countbasic_arch OF countbasic_vhd_tst IS -- constants-- signalsSIGNAL CLK : STD_LOGIC;SIGNAL COUT : STD_LOGIC;SIGNAL DOUT : STD_LOGIC_VECTOR(3 DOWNTO 0); constant clk_cycle : time := 100 ns;COMPONENT countbasicPORT (CLK : IN STD_LOGIC;COUT : OUT STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;BEGINi1 : countbasicPORT MAP (-- list connections between master ports and signalsCLK => CLK,COUT => COUT,DOUT => DOUT);processbeginclk <= '1';wait for clk_cycle;clk <= '0';wait for clk_cycle;end process;END countbasic_arch;程序3LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Seg7_Dsp isPORT(CP : IN STD_LOGIC; -- CLOCKSEGOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- SEG7 Display O/PSELOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- Select SEG7 O/PNUMOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- Number Display Signal OUTNUM : IN STD_LOGIC_VECTOR( 3 DOWNTO 0); -- Number Display Signal INM : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END Seg7_Dsp;ARCHITECTURE a OF Seg7_Dsp ISSIGNAL SEG : STD_LOGIC_VECTOR( 7 DOWNTO 0); -- SEG7 Display Signal SIGNAL SEL : STD_LOGIC_VECTOR( 7 DOWNTO 0); -- Select SEG7 Signal BEGINConnection : BlockBeginM <= "0010";SELOUT <= SEL; -- Seg7 Disp Selection SEGOUT(7 DOWNTO 0) <= SEG; -- Seven Segment Display NUMOUT <= NUM;End Block Connection;Free_Counter : Block -- 计数器-- 产生扫描信号Signal Q : STD_LOGIC_VECTOR(24 DOWNTO 0);Signal S : STD_LOGIC_VECTOR(2 DOWNTO 0);BeginPROCESS (CP) -- 计数器计数BeginIF CP'Event AND CP='1' thenQ <= Q+1;END IF;END PROCESS;S <= Q(15 DOWNTO 13); --about 300 Hz--扫描信号SEL <= "11111110" WHEN S=0 ELSE"11111101" WHEN S=1 ELSE"11111011" WHEN S=2 ELSE"11110111" WHEN S=3 ELSE"11101111" WHEN S=4 ELSE"11011111" WHEN S=5 ELSE"10111111" WHEN S=6 ELSE"01111111" WHEN S=7 ELSE"11111111";End Block Free_Counter;SEVEN_SEGMENT : Block -- Binary Code -> Segment 7 CodeBegin--SEG <= "00111111"WHEN NUM = 0 ELSE"00000110"WHEN NUM = 1 ELSE"01011011"WHEN NUM = 2 ELSE"01001111"WHEN NUM = 3 ELSE"01100110"WHEN NUM = 4 ELSE"01101101"WHEN NUM = 5 ELSE"01111101"WHEN NUM = 6 ELSE"00000111"WHEN NUM = 7 ELSE"01111111"WHEN NUM = 8 ELSE"01101111"WHEN NUM = 9 ELSE"01110111"WHEN NUM = 10 ELSE"01111100"WHEN NUM = 11 ELSE"00111001"WHEN NUM = 12 ELSE"01011110"WHEN NUM = 13 ELSE"01111001"WHEN NUM = 14 ELSE"01110001"WHEN NUM = 15 ELSE"00000000";End Block SEVEN_SEGMENT;END a;三、项目实验工具软件项目试验工具:EL-SOPC400试验箱、主芯片:EP4CE22F17C8、计算机与QUARTUS Ⅱ软件四、实验步骤1、建立项目文件以及VHDL文件同前几个实验一样2、将前两个程序按照一点的步骤设置然后进行仿真3、将三个实验添加到项目中来并设置为顶层文件4、建立顶层图,选择“File→New→Block Diorgram Schematic File”按OK 就可以建立一个顶层图,我们在把他进行保存,名字为默认的文件名,并将“Add file to current project”选项选中,让他加入到工程中去。
十六进制七段数码显示管设计

十六进制七段数码显示管设计电子科技大学实验报告学生姓名:学号:指导教师:王振松一、实验室名称:现代测试技术实验室二、实验项目名称:3位十六进制七段数码显示管设计三、实验原理:对4个7段LED数码管的每个LED显示屏都是按照一个“数字8”的模式安排了7个发光二极管组成部分。
每段LED可以单独照明,这7个段的每个LED的阳极是连接在一起,成为一个共同的阳极电路节点,但LED的阴极保持独立。
如需要每一位显示不同的数字,则需利用人眼的视觉残留效应进行动态刷新显示,以30次/秒的速度以此显示4个十六进制数。
所以是s[1:0]的数值必须以此速度从0~3计数。
同时输出an[3:0]的数值必须和s[1:0]同步,这样就保证在正确的时间显示正确的数字。
当然同时要使用使能端控制第三位数码管使其熄灭。
四、实验目的:1. 进一步熟悉Xilinx公司EDA开发系统软件平台的操作。
2. 学会将50M的晶振经多次分频后得到低频脉冲信号。
3. 学会用Verilog HDL中的case语句来创建七段译码器。
4. 学会使用原理图作为顶层图实现数字电路。
5. 掌握数码管动态扫描显示技术。
6. 学会用BASYS2 FPGA开发板下载执行并验证代码。
五、实验内容:1)利用HDL代码输入方式在Xilinx ISE 13.4平台上实现一个十六进制七段数码显示管设计;2)使用原理图作为顶层图实现数字电路,使用模块实例语句连接前面所设计的七段译码器模块;3)生成比特流文件下载到开发板上进行验证。
六、实验器材(设备、元器件):1)计算机(安装Xilinx ISE 13.4软件平台);2)BASYS2 FPGA开发板一套(带USB-MiniUSB下载线)。
七、实验步骤:1、在Xilinx ISE 13.4平台中,新建一个工程LED。
我们选用的BASYS2 FPGA开发板采用的是Spartan3E XC3S100E芯片和CP132封装,设置好器件属性。
7段数码管控制接口

7段数码管控制接口一、实验目的1.掌握7段共阴极数码管工作的基本原理;2.进一步掌握VHDL语言的基本语句。
二、硬件要求主芯片Altera EPM7128SLC84-15,时钟信号,7段数码管显示器,拨码开关。
三、实验内容设计一个数码管显示的控制电路,使其驱动EDA实验箱上数码管显示模块正常工作。
具体要求如下:1)在时钟信号的驱动下,八个数码管选通工作,显示0~F的数值。
选通信号为sel0~sel2。
2)控制模块输出给显示模块a~g,从而控制显示模块的显示内容。
四、实验原理数码管为共阴极数码管。
本模块的输入口共有21个,为11个段信号输入口和3个位信号输入口,分别为A、B、C、D、E、F、G、DP、SEL0、SEL1、SEL2。
其中SEL0、SEL1、SEL2位于16×16点阵模块区,它们经3-8译码器后送给数码管作位选信号,其对应关系如表1。
表1 LED数码管显示接口及对应的显示状态五、实验源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shumaguan ISPORT ( CLK :IN STD_LOGIC;T:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SG :OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END;ARCHITECTURE BHV OF shumaguan ISSIGNAL CNT8:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINP1:PROCESS(CLK)BEGINIF CLK'EVENT AND CLK ='1' THEN CNT8 <= CNT8 + 1; END IF;END PROCESS P1;SEL <= CNT8;P2:PROCESS(T)BEGINCASE T ISWHEN "0000"=>SG<="0111111";WHEN "0001"=>SG<="0000110";WHEN "0010"=>SG<="1011011";WHEN "0011"=>SG<="1001111";WHEN "0100"=>SG<="1100110";WHEN "0101"=>SG<="1101101";WHEN "0110"=>SG<="1111101";WHEN "0111"=>SG<="0000111";WHEN "1000"=>SG<="1111111";WHEN "1001"=>SG<="1101111";WHEN "1010"=>SG<="1110111";WHEN "1011"=>SG<="1111100";WHEN "1100"=>SG<="0111001";WHEN "1101"=>SG<="1011110";WHEN "1110"=>SG<="1111001";WHEN "1111"=>SG<="1110001";WHEN OTHERS =>NULL;END CASE;END PROCESS P2;END;六、波形仿真结果。
七段LED数码管显示电路设计(精)

实验七七段LED数码管显示电路设计一、实验目的1.学习EDA软件的基本操作2.学习使用原理图进行设计输入3.初步掌握软件输入、编译、仿真和编程的过程4.学习实验开发系统的使用方法二、实验说明本实验通过七段LED数码管显示电路的设计,初步掌握EDA 设计方法中的设计输入、编译、综合、仿真和编程的基本过程。
七段LED数码管显示电路有四个数据输入端(D0-D3),七个数据输出端(A-G。
三、实验要求1、完成七段LED数码管显示电路的原理图输入并进行编译2、对设计的电路经行仿真验证3、编程下载并在实验开发系统上验证设计结果四、实验步骤1、新建工程2、新建Verilog HDL文件3、在文本输入窗口键入代码4、保存HDL文件5、编译文件直至没有错误6、新建波形文件7、添加观察信号8、添加输入激励,保存波形文件9、功能仿真七段LED数码管显示电路真值表:输入D3D2D1D0G F E D C B A 000000111111 100010000110 200101011011 300111001111 401001100110 501011101101 601101111101 701110001111 810001111111910011101111 A10101110111 B10111111100 C11001111001 D110111011110 E11101111001 F11111110001五、电路原理图啊Verilog代码描述:module qiduan(data_in,data_out;input [3:0]data_in;output [6:0]data_out;reg [6:0]data_out;always @(data_inbegincasex(data_in4'b0000:data_out<=7'b0111111;4'b0001:data_out<=7'b0000110; 4'b0010:data_out<=7'b1011011; 4'b0011:data_out<=7'b1001111; 4'b0100:data_out<=7'b1100110; 4'b0101:data_out<=7'b1101101; 4'b0110:data_out<=7'b1111100; 4'b0111:data_out<=7'b0000111; 4'b1000:data_out<=7'b1111111; 4'b1001:data_out<=7'b1100111; 4'b1010:data_out<=7'b1110111; 4'b1011:data_out<=7'b1111100; 4'b1100:data_out<=7'b0111001; 4'b1101:data_out<=7'b1011110; 4'b1110:data_out<=7'b1111001; 4'b1111:data_out<=7'b1110001; default:data_out<=7'b0000000; endcaseendendmodule仿真波形:六、实验体会七段LED数码管显示电路是常用的数码管之一,它有四个数据输入端(D0-D3),七个数据输出端(A-G。
七段数码管显示电路设计

实验五七段数码管显示电路设计一、实验目的1、了解数码管的工作原理。
2、学习七段数码管显示译码器的设计。
3、学习Verilog的CASE语句及多层次设计方法。
二、实验原理七段数码管是电子开发过程中常用的输出显示设备。
在实验系统中使用的是两个四位一体、共阴极型七段数码管。
由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。
反之则不亮。
共阳极性的数码管与之相么。
四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。
八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
三、实验内容本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。
在实验中时,数字时钟选择1KHZ作为扫描时钟,用四个开关做为输入,当四个开关置为一个二进制数时,在数码管上显示其十六进制的值。
实验箱中的拨动开关与FPGA的接口电路,以及开关FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。
四、实验步骤1、打开QUARTUSII软件,新建一个工程。
2、建完工程之后,再新建一个V erilog File,打开V erilog编辑器对话框。
3、按照实验原理和自己的想法,在VHDL编辑窗口编写V erilog程序,用户可参照光盘中提供的示例程序。
源程序:module scan_led(clk_1k,d,dig,seg); //模块名scan_ledinput clk_1k; //输入时钟input[31:0] d; //输入要显示的数据output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg[7:0] seg_r; //定义数码管输出寄存器reg[7:0] dig_r; //定义数码管选择输出寄存器reg[3:0] disp_dat; //定义显示数据寄存器reg[2:0]count; //定义计数寄存器assign dig = dig_r; //输出数码管选择assign seg = seg_r; //输出数码管译码结果always @(posedge clk_1k) //定义上升沿触发进程begincount <= count + 1'b1;endalways @(posedge clk_1k)begincase(count) //选择扫描显示数据3'd0:disp_dat = d[31:28]; //第一个数码管3'd1:disp_dat = d[27:24]; //第二个数码管3'd2:disp_dat = d[23:20]; //第三个数码管3'd3:disp_dat = d[19:16]; //第四个数码管3'd4:disp_dat = d[15:12]; //第五个数码管3'd5:disp_dat = d[11:8]; //第六个数码管3'd6:disp_dat = d[7:4]; //第七个数码管3'd7:disp_dat = d[3:0]; //第八个数码管endcasecase(count) //选择数码管显示位3'd0:dig_r = 8'b01111111; //选择第一个数码管显示3'd1:dig_r = 8'b10111111; //选择第二个数码管显示3'd2:dig_r = 8'b11011111; //选择第三个数码管显示3'd3:dig_r = 8'b11101111; //选择第四个数码管显示3'd4:dig_r = 8'b11110111; //选择第五个数码管显示3'd5:dig_r = 8'b11111011; //选择第六个数码管显示3'd6:dig_r = 8'b11111101; //选择第七个数码管显示3'd7:dig_r = 8'b11111110; //选择第八个数码管显示endcaseendalways @(disp_dat)begincase(disp_dat) //七段译码4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示94'ha:seg_r = 8'h88; //显示a4'hb:seg_r = 8'h83; //显示b4'hc:seg_r = 8'hc6; //显示c4'hd:seg_r = 8'ha1; //显示d4'he:seg_r = 8'h86; //显示e4'hf:seg_r = 8'h8e; //显示fendcaseendendmodule4、编写完V erilog程序后,保存起来。
7段数码管控制接口设计

七、实验参考程序
注意:q的位数根据具体 时钟确实,7段显示译码 接线以具体情况为准。
八、仿真结果
九、实验报告要求
1. 整理实验结果,填写实验报告。 2.小结实验心得体会。 3.回答思考题:
还可以有几种方法实现试验要求?
将外部时钟进行分频处理(编写分频功能模 块);
使用分频后的时钟进行计数,得到数码管输出 控制的计数状态;
当程序下载成功时,7段数码管依次分时显示递 增或递减数据。
试验方框图如下图所示:
clk
分 分 分 divclk 分 分 分 counter 分 分 分
Y[6..0]
rst
分分分分分分分分
实验三:利用可编程逻辑器件 进行7段数码管控制接口的设计
实验目的 1、 通过实验复习可编程逻辑器件开发软件的设 计操作流程; 2、掌握七段数码管的功能和设计方法; 3、掌握用硬件描述语言的方法设计七段数码管 控制模块; 4、利用用可编程逻辑器件进行7段数码 管定时更新。
三、实验器材
1.台式计算机 1台。 2.可编程逻辑器件实验箱1套。 3.下载电缆一套。 4.示波器一台。 5.万用表1台
六、实验内容和步骤
设计输入: 1、启动Quartus软件; 2、新建工程; 3、根据设计类型选择新建图形或语言文件; 4、根据讲课内容及实验指导书中介绍的方法完
成整个实验的设计输入。
电路的编译与适配
1、选择芯片型号; 2、编译生成 * •pof文件(CPLD)及* •sof文 件(FPGA); 3、分配引脚; 4、电路仿真与时序分析; 5、对芯片进行编程下载,直到硬件实现。
掌握计数器的功能
掌握用图形和语言相结合的方法设计计数器, 并进行软件功能仿真和固件代码下载,最后 在实验箱实现设计的功能。
组合电路——7段数码管显示驱动电路设计报告

实验一、组合电路——7段数码管显示驱动电路设计一、实验目的了解EDA实验箱7位八段数码管显示模块的工作原理,设计标准扫描驱动电路模块,以备后面实验用。
二、硬件要求主芯片为Cyclone V E,型号为EP4CE22F17C8,7位八段数码管显示器,四位拨码开关。
三、实验内容用四位拨码开关产生8421BCD码,用CPLD分别产生7段数码管扫描驱动电路,然后进行仿真,观察波形,正确后编程下载实验测试。
四、实验原理1、72、动信号a,b,c,d,e,f,g。
通过调节四位拨码开关的状态,数码管应显示与之对应的字符。
五、实验连线输入:将芯片管角a0~a3分别接4个拨码开关;输出:将芯片管角led7s0~7分别接到数码管7段驱动信号a、b、c、d、e、f、g上。
六、实验源程序:decl7s.vhdlibrary ieee;use ieee.std_logic_1164.all;entity decl7s isport(a:in std_logic_vector(3 downto 0);led7s:out std_logic_vector(6 downto 0));end;architecture one of decl7s isbeginprocess(a)begincase a iswhen "0000" => led7s<="0111111"; when "0001" => led7s<="0000110"; when "0010" => led7s<="1011011"; when "0011" => led7s<="1001111"; when "0100" => led7s<="1100110"; when "0101" => led7s<="1101101"; when "0110" => led7s<="1111101"; when "0111" => led7s<="0000111"; when "1000" => led7s<="1111111"; when "1001" => led7s<="1101111"; when "1010" => led7s<="1110111"; when "1011" => led7s<="1111100"; when "1100" => led7s<="0111001"; when "1101" => led7s<="1011110"; when "1110" => led7s<="1111001"; when "1111" => led7s<="1110001"; when others => null;end case;end process;end;七、波形仿真结果。
嵌入式ARM键盘接口和七段数码管的控制实验

实验三键盘接口和七段数码管的控制实验一、实验目的1. 学习4X4键盘的与CPU的接口原理2. 掌握键盘芯片HD7279的使用,及8位数码管的显示方法;二、实验内容1. 通过4X4按键完成在数码管上的各种显示功能,以及LCD上显示。
三、实验设备1.EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆。
2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四、实验原理键盘和7段数码管的控制实验,是通过键盘的控制芯片HD7279A来完成的。
它的信号线及控制线连接到S3C2410上,驱动线直接连到8位共阴的7段数码管上。
由于其芯片的接口电压是5V的,而S3C2410的接口电压是3.3V,所以,HD7279A的信号、控制线经过CPLD 把电压转换到3.3V,然后送入CPU中。
HD7279是一片具有串行接口的可同时驱动8位共阴式数码管或独立的LED的智能显示驱动芯片。
该芯片同时还可连接多达64键的键盘矩阵,单片即可完成显示键盘接口的全部功能。
内部含有译码器可直接接受BCD码或16进制码并同时具有两种译码方式。
此外还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等,具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。
HD7279在与S3C2410接口中,它使用了4根接口线。
片选信号#CS(低电平有效),时钟信号CLK,数据收发信号DATA,中断信号#KEY(低电平送出),EL-ARM-830+实验箱与其的接口中,使用了三个通用I/O接口,和一个外部中断,实现了与HD7279A的连接,S3C2410的外部中断接HD7279的中断#KEY,三个I/O口分别与HD7279A的其他控制、数据信号线相连。
HD7279的其他管脚分别接4X4按键和8位数码管。
当程序运行时,按下按键,平时为高电平的HD7279A的#KEY就会产生一个低电平,送给S3C2410的外部中断5请求脚,在CPU中断请求位打开的状态下,CPU会立即响应外部中断5的请求,PC指针就跳入中断异常向量地址处,进而跳入中断服务子程序中,由于外部中断4/5/6/7使用同一个中断控制器,所以,还必须判断一个状态寄存器,判断是否是外部中断5的中断请求,当判断出是外部中断5的中断请求,则程序继续执行,CPU 这时,通过发送#CS片选信号选中HD7279A,再发送时钟CLK信号和通过DATA线发送控制指令信号给HD7279A,HD7279A得到CPU发送的命令后,识别出该命令,然后,扫描按键,把得到键值回送给CPU,同时,在8位数码管上显示相关的指令内容,CPU在得到按键后,有时,程序还会给此键值一定的意义,然后再通过识别此按键的意义,进而进行相应的程序处理。
八位七段数码管动态显示电路设计方案

八位七段数码管动态显示电路的设计一七段显示器介绍七段显示器,在许多产品或场合上经常可见。
其内部结构是由八个发光二极管所组成,为七个笔画与一个小数点,依顺时针方向为A、B、C、D、E、F、G与DP等八组发光二极管之排列,可用以显示0~9数字及英文数A、b、C、d、E、F。
目前常用的七段显示器通常附有小数点,如此使其得以显示阿拉伯数之小数点部份。
七段显示器的脚位和线路图如下图4.1所示( 其第一支接脚位于俯视图之左上角)。
图4.1、七段显示器俯视图由于发光二极管只有在顺向偏压的时候才会发光。
因此,七段显示器依其结构不同的应用需求,区分为低电位动作与高电位动作的两种型态的组件,另一种常见的说法则是共阳极( 低电位动作)与共阴极( 高电位动作)七段显示器,如下图4.2所示。
( 共阳极) ( 共阴极)图4.2、共阳极(低电位动作)与共阴极(高电位动作)要如何使七段显示器发光呢?对于共阴极规格的七段显示器来说,必须使用“ Sink Current ”方式,亦即是共同接脚COM为VCC,并由Cyclone II FPGA使接脚成为高电位,进而使外部电源将流经七段显示器,再流入Cyclone II FPGA的一种方式本实验平台之七段显示器模块接线图如下图4.5所示。
此平台配置了八组共阳极之七段显示器,亦即是每一组七段显示器之COM接脚,均接连至VCC电源。
而每一段发光二极管,其脚位亦均与Cyclone II FPGA接连。
四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。
八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
图4.5、七段显示器模块接线图七段显示器之常见应用如下可作为与数值显示相关之设计。
⏹电子时钟应用显示⏹倒数定时器⏹秒表⏹计数器、定时器⏹算数运算之数值显示器二七段显示器显示原理七段显示器可用来显示单一的十进制或十六进制的数字,它是由八个发光二极管所构成的( 每一个二极管依位置不同而赋予不同的名称,请参见图4.1 ) 。
七段数码管动态显示控制

实验二七段数码管动态显示控制一、实验目的利用AT89S52和使用两位数码管显示器,循环显示两位数00-99。
其中P2.0和P2.1端口分别控制数码管的个位和十位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过驱动三极管给数码管相应的位供电,这时只要P3口送出数字的显示代码,数码管就能正常显示数字。
二、实验要求1、使用两位数码管显示器,循环显示两位数00-99;2、具有电源开关和指示灯,有复位键;3、数码管动态显示,即扫描方式,每一位每间隔一段时间扫描一次。
字符的亮度及清晰度与每位点亮的停留时间和每位显示的时间内轮换导通次数有关。
三、实验电路四、实验器材AT89S52;动态扫描显示;共阳极数码管;电阻五、实验原理说明图1 AT89S52引脚图图2 共阳极七段数码管引脚图1AT89S52引脚图,说明如下:按照功能,AT89S52的引脚可分为主电源、外接晶体振荡或振荡器、多功能I/O 口、控制和复位等。
1.多功能I/O口AT89S52共有四个8位的并行I/O口:P0、P1、P2、P3端口,对应的引脚分别是P0.0 ~ P0.7,P1.0 ~ P1.7,P2.0 ~ P2.7,P3.0 ~ P3.7,共32根I/O线。
每根线可以单独用作输入或输出。
①P0端口,该口是一个8位漏极开路的双向I/O口。
在作为输出口时,每根引脚可以带动8个TTL输入负载。
当把“1”写入P0时,则它的引脚可用作高阻抗输入。
当对外部程序或数据存储器进行存取时,P0可用作多路复用的低字节地址/数据总线,在该模式,P0口拥有内部上拉电阻。
在对Flash存储器进行编程时,P0用于接收代码字节;在校验时,则输出代码字节;此时需要外加上拉电阻。
②P1端口,该口是带有内部上拉电阻的8位双向I/O端口,P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。
七段数码管引脚图

由于很多多都需要这个数码管引脚图,于是今天专门用qq截了图,请大家记好引角的顺序《七段数码管引脚图》数码管使用条件:a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 100mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的,4位数码管引脚图请在本站搜索我也提供了数码管使用注意事项说明:(1)数码管表面不要用手触摸,不要用手去弄引角;(2)焊接温度:260度;焊接时间:5S(3)表面有保护膜的产品,可以在使用前撕下来。
数码管测试方法与数字显示译码表图三、测试:同测试普通半导体二极管一样。
注意!万用表应放在R×10K档,因为R×1K档测不出数码管的正反向电阻值。
对于共阴极的数码管,红表笔接数码管的“-”,黑表笔分别接其他各脚。
测共阳极的数码管时,黑表笔接数码管的vDD,红表笔接其他各脚。
另一种测试法,用两节一号电池串联,对于共阴极的数码管,电池的负极接数码管的“-”,电池的正极分别接其他各脚。
对于共阳极的数码管,电池的正极接数码管的VDD,电池的负极分别接其他各脚,看各段是否点亮。
对于不明型号不知管脚排列的数码管,用第一种方法找到共用点,用第二种方法测试出各笔段a-g、Dp、H等。
uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x03;delay_ms(1500);}return;}void display4(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x04;bit_secl=bit_secl<<1; delay_ms(1500);}return;}void display5(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x05;bit_secl=bit_secl<<1; delay_ms(1500);}return;}void display6(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x06;bit_secl=bit_secl<<1; delay_ms(1500);}return;}void display7(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x07;delay_ms(1500);}return;}void display8(void){uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x08;bit_secl=bit_secl<<1;delay_ms(1500);}return;}void display0(void){uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x00;bit_secl=bit_secl<<1;delay_ms(1500);}return;}void main(void){for(; ;){display0();display1();display2();display3();display4();display5();display6();display7();display8();}}数码管引脚图,一般都是一样的。
七段数码管引脚图

由于很多多都需要这个数码管引脚图,于是今天专门用qq截了图,请大家记好引角的顺序《七段数码管引脚图》数码管使用条件:a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA峰值电流 100mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的,4位数码管引脚图请在本站搜索我也提供了数码管使用注意事项说明:(1)数码管表面不要用手触摸,不要用手去弄引角;(2)焊接温度:260度;焊接时间:5S(3)表面有保护膜的产品,可以在使用前撕下来。
数码管测试方法与数字显示译码表图三、测试:同测试普通半导体二极管一样。
注意!万用表应放在R×10K档,因为R×1K档测不出数码管的正反向电阻值。
对于共阴极的数码管,红表笔接数码管的“-”,黑表笔分别接其他各脚。
测共阳极的数码管时,黑表笔接数码管的vDD,红表笔接其他各脚。
另一种测试法,用两节一号电池串联,对于共阴极的数码管,电池的负极接数码管的“-”,电池的正极分别接其他各脚。
对于共阳极的数码管,电池的正极接数码管的VDD,电池的负极分别接其他各脚,看各段是否点亮。
对于不明型号不知管脚排列的数码管,用第一种方法找到共用点,用第二种方法测试出各笔段a-g、Dp、H等。
uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x03;delay_ms(1500);}return;}void display4(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x04;bit_secl=bit_secl<<1; delay_ms(1500);}return;}void display5(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x05;bit_secl=bit_secl<<1; delay_ms(1500);}return;}void display6(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x06;bit_secl=bit_secl<<1; delay_ms(1500);}return;}void display7(void) {uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x07;delay_ms(1500);}return;}void display8(void){uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x08;bit_secl=bit_secl<<1;delay_ms(1500);}return;}void display0(void){uchar n;uchar bit_secl=0x01;for(n=0;n<8;n++) //显示数字{P0=bit_secl;P2=0x00;bit_secl=bit_secl<<1;delay_ms(1500);}return;}void main(void){for(; ;){display0();display1();display2();display3();display4();display5();display6();display7();display8();}}数码管引脚图,一般都是一样的。
共阴极7段数码管

共阴极7段数码管LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
图1是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED的电流通常较小,一般均需在回路中接上限流电阻。
假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。
而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
其它字符的显示原理类同,读者自行分析即可。
共阳极7段数码管LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
图1是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED的电流通常较小,一般均需在回路中接上限流电阻。
假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。
而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
7段LED数码管引脚

7段LED数码管引脚
常见的数码管由七个条状和一个点状发光二极管管芯制成,叫七段数码管如下图所示,根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。
根据管脚资料,您可以判断使用的是何总接口类型.
<LED数码管引脚图>
LED数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。
在一定范围内,其正向电流与发光亮度成正比。
由于常规的数码管起辉电流只有1~2mA,最大极限电流也只有10~30mA,所以它的输入端在5V电源或高于TTL高电平(3.5V)的电路信号相接时,一定要串加限流电阻,以免损坏器件。
数码管显示控制设计—间隔1s依次显示数字0(PLC设计课件)

T5
TON
Time
IN
Q
PT
ET
T6
TON
Time
IN
Q
PT
ET
T7
TON
Time
IN
Q
PT
ET
T8
TON
Time
IN
Q
PT
ET
T9
TON
Time
IN
Q
PT
ET
二、梯形图设计-比较指令
M0.0
T#4S
T1
TON
Time
IN
Q
PT
ET
T1.ET
T1.ET
Q0.0
A灯
T#1S
T#2S
M0.0启动后,T1定时器开始定时,ET值开始发生变化;此时ET值小于2s,
01 01 01 01 01 01 01 01
16#55 T1.Q
16#aa T2.Q
16#ff
T3.Q 16#00
I0.1
T#1S
T1
T2
TON
Time
IN
Q
TON
Time
IN
Q
PT
ET
PT
ET
T#1S
T#1S
T3
TON
Time
IN
Q
PT
ET
项目四:数码管显示控制设计
任务一
间隔1s依次点亮各段
9876543210
9S 8S 7S 6S 5S 4S 3S 2S 1S
开 始
二、梯形图设计-知识回顾
M0.0 T1.Q
Q0.0
T2.Q T4.Q
T5.Q
使用多个定时器实现
基于PLC的七段码显示数码管控制

基于PLC的七段码显示数码管控制【摘要】主要介绍了S7-200型PLC传输指令和移位指令的特点和使用方法,并以七段码显示为例,给出了应用不同类型的指令进行显示和编程的方法。
【关键词】传送指令;移位指令;程序设计;七段显示译码指令生活中,经常能见到电梯楼层显示、抢答器、交通灯剩余时间数码显示以及生产线上的显示系统,可以显示数字或字母,本文利用S7-200系列PLC的指令实现对七段显示数码管的控制。
在西门子S7-200系列PLC中,有多种方法可以实现七段码显示,其中比较常用的有基本指令、传送指令和七段显示译码指令SEG,笔者结合自己的工作经验,对几种控制七段码显示的指令进行比较,供大家学习和参考。
1.传输指令和七段码显示译码指令1.1 传输指令传送指令用于在各个编程元件之间进行数据传送[1]。
西门子S7-200系列PLC的传输指令包括单个传送指令和块传送指令。
单个传送指令助记符为MOV,当传送的数据长度不同时,助记符也不尽相同。
单个传送指令根据传送数据长度可以分为:字节传送指令MOVB,字传送指令MOVW,双字传送指令MOVDW,实数传送指令MOVR,利用传送指令可以在不改变原数据值的情况下将IN中的数据传送到OUT。
块传送指令用来进行一次传送多个数据。
单个传送指令的应用如图1所示图1 传送指令的应用在传送指令中,EN端为允许输入端;ENO端为允许输出端。
当输入I0.1为“1”时,传送指令将MB0中的字节传送给MB1,如果指令正确执行,则输出Q4.0为“1”,否则,如果输入I0.0为“0”,则数据不传送。
一旦传送成功,输出Q4.0将一直保持为1,直到将Q4.0复位。
在为变量赋初始值时,为了保证传送只执行一次,一般MOV方块指令和边缘触发指令联合使用。
1.2 移位指令移位指令是使位组合的字节数据、字数据或双字数据向指定方向移位的指令[2]。
根据移位的数据长度可分为字节型移位、字型移位、双字型移位。
还可以进行循环移位。
计数器7段数码管控制接口技术课程设计报告材料

《EDA技术综合设计》课程设计报告报告题目:计数器7段数码管控制接口技术作者所在系部:作者所在专业:作者所在班级:作者姓名:作者学号:指导教师姓名:完成时间:内容摘要掌握VHDL语言基本知识,并熟练运用VHDL语言来编写程序,来下载实践到硬件上,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
利用VHDL语言设计一个七段数码管控制引脚,在时钟信号的控制下,使6位数码管动态刷新显示十进制计数器及其进位,十二进制计数器,四位二进制可逆计数器,六十进制计数器的计数结果,这期间需要seltime分频器来动态的给各个计数器分配数码管,并显示数字的变化。
关键词:VHDL语言编程七段数码管控制引脚芯片目录一概述 (1)二方案设计与论证 (1)三单元电路设计与参数计算 (1)3.1数码管译码器 (1)3.2 十进制计数器 (2)3.3六十进制计数器 (3)3.4四位二进制可逆计数器 (5)3.5时间数据扫描分时选择模块 (6)3.6顶层文件 (8)四总的原理图 (9)五器件编程与下载 (9)六性能测试与分析(要围绕设计要求中的各项指标进行) (10)七实验设备 (10)八心得体会 (10)九参考文献 (10)课程设计任务书一、概述设计一个共阴7段数码管控制接口,在硬件时钟电路的基础上,采用分频器,输出一个1S的时钟信号。
一个带使能输入、进位输出及同步清0的增1十进制计数器。
一个带使能输入及同步清0的六十进制同步加法计数器和一个四位二进制可逆计数器。
要求:在时钟信号的控制下,使6位数码管动态刷新显示上述计数器的计数结果。
二、方案设计与论证首先VHDL语言编写底层文件和三个计数器的程序,再编写分频器和数码管的程序,最后用例化语句编写顶层文件,分别都调试在确认无误后把顶层文件下载到试验箱,连接导线,完成后实现在时钟信号的控制下,6位数码管动态刷新显示三个计数器的技术结果。
三、单元电路设计1.数码管译码器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity deled isport(num:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0));end deled;architecture fun of deled isbegin-- abcdefgled<="1111110"when num="0000"else "0110000"when num="0001"else"1101101"when num="0010"else"1111001"when num="0011"else"0110011"when num="0100"else"1011011"when num="0101"else"1011111"when num="0110"else"1110000"when num="0111"else"1111111"when num="1000"else"1111011"when num="1001"else"1110111"when num="1010"else"0011111"when num="1011"else"1001110"when num="1100"else"0111101"when num="1101"else"1001111"when num="1110"else"1000111"when num="1111";end fun;原理图2.十进制计数器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,clr,en:in std_logic;co:out std_logic;q:buffer std_logic_vector(3 downto 0)); end cnt10;architecture behave of cnt10 isbeginprocess(clk,clr,en)beginif(en='0')then q<="0000";elsif(clk'event and clk='1')thenif(clr='1')then q<="0000";elsif(q=9)then q<="0000";co<='1';else q<=q+1;co<='0';end if;end if;end process;end behave;原理图仿真波形图3.六十进制计数器程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt60 ISPORT(clk,clr,en:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END cnt60;ARCHITECTURE behave OF cnt60 ISSIGNAL qh,ql:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(clk,clr,en)BEGINIF(en='1')THEN ql<="0000";qh<="0000";ELSIF(clk'event and clk='1')THENIF(clr='1')THEN ql<="0000";qh<="0000";ELSIF(ql=9)THEN ql<="0000";IF(qh=5)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;q<=qh&ql;END PROCESS;END behave;原理图波形图4.四位二进制可逆计数器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kn4 isport(clk,clr,plus_sub:in std_logic;q:buffer std_logic_vector(3 downto 0));end kn4;architecture behave of kn4 isbeginprocess(clk,clr,plus_sub)beginif(clk'event and clk='1')thenif(clr='1')then q<="0000";elsif(plus_sub='1')thenif(q=15)then q<="0000";else q<=q+1;end if;elsif(plus_sub='0')thenif(q=0)then q<="1111";else q<=q-1;end if;end if;end if;end process;end behave;原理图波形图5.时间数据扫描分时选择模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk,reset,ci:in std_logic;Kn4,cnt10:in std_logic_vector(3 downto 0);cnt60:in std_logic_vector(7 downto 0);daout:out std_logic_vector(3 downto 0);dp:out std_logic;sel:out std_logic_vector(2 downto 0));end seltime;architecture fun of seltime issignal count:std_logic_vector(2 downto 0);beginsel<=count;process(clk,reset)beginif(reset='0')thencount<="000";elsif(clk'event and clk='1')thenif(count>="101")thencount<="000";elsecount<=count+1;end if;end if;case count iswhen"000"=>daout<=cnt10(3 downto 0);dp<='0'; when"001"=>daout(3 downto 1)<="000";daout(0)<=ci;dp<='0'; when"010"=>daout<=kn4(3 downto 0);dp<='0'; when"011"=>daout<=cnt60(7 downto 4);dp<='0'; when others=>daout<=cnt60(3 downto 0);dp<='0'; end case;end process;end fun;原理图6.顶层文件程序library ieee;use ieee.std_logic_1164.all;entity ss_top isport(clk,clr,en,plus_sub,clkdsp:in std_logic;a,b,c,d,e,f,g,dpout:out std_logic;sel:out std_logic_vector(2 downto 0));end ss_top;architecture one of ss_top iscomponent cnt60port(clk,clr,en:in std_logic;q:out std_logic_vector(7 downto 0));end component;component kn4port(clk,clr,plus_sub:in std_logic;q:buffer std_logic_vector(3 downto 0)); end component;component cnt10port(clk,clr,en:in std_logic;co:out std_logic;q:buffer std_logic_vector(3 downto 0)); end component;component deledPORT(num:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0)); end component;component seltimeport(clk,reset,ci:in std_logic;cnt60:in std_logic_vector(7 downto 0);kn4:in std_logic_vector(3 downto 0);cnt10:in std_logic_vector(3 downto 0);dp:out std_logic;daout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0)); end component;signal cnt60_out:std_logic_vector(7 downto 0);signal kn4_out:std_logic_vector(3 downto 0);signal cnt10_out:std_logic_vector(3 downto 0);signal cnt10_co:std_logic;signal ledout:std_logic_vector(6 downto 0);signal seltime_out:std_logic_vector(3 downto 0);Begina<=ledout(6);b<=ledout(5);c<=ledout(4);d<=ledout(3);e<=ledout(2);f<=ledout(1);g<=ledout(0);u1:deled port map(num=>seltime_out,led=>ledout);u2:cnt10 port map(clk=>clk,clr=>clr,en=>en,co=>cnt10_co,q=>cnt10_out);u3:cnt60 port map(clk=>clk,clr=>clr,en=>en,q=>cnt60_out);u4:kn4 port map(clk=>clk,clr=>clr,plus_sub=>plus_sub,q=>cnt16_out);u5:seltimeport map(clk=>clkdsp,reset=>clr,ci=>cnt10_co,cnt60=>cnt60_out,kn4=>kn4_out,cnt10=>cnt10_out,daout=>seltime_out,dp=>dpout,sel=>sel);end one;四、总的原理图五、器件编程与下载用VHDL语言编译四种计数器的、译码器和分时器的程序,然后把他们用例化语句编译成顶层文件,仿真成功以后下载到试验箱通过数码管显示出结果,试验成功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
when "0001"=>Y<="0110000"; when "0011"=>Y<="1111001"; when "0101"=>Y<="1011011"; when "0111"=>Y<="1110000"; when "1001"=>Y<="1111011"; when "1011"=>Y<="0011111"; when "1101"=>Y<="0111101"; when others=>Y<="1000111";
利用VHDL语言设计组合逻辑电路概要 利用VHDL语言设计组合逻辑电路概要 VHDL
组合逻辑语句 (意味着是并行语句) 意味着是并行语句) 执行” 在同一时刻) 并行语句就是 “执行” 并行 (在同一时刻) 前面我们见到的例子都是组合逻辑电路的表 述方法: 述方法: 布尔方程 WHEN-ELSE” “WHEN-ELSE”语句 “WITH-SELECT-WHEN”语句 WITH-SELECT-WHEN” 并行语句的顺序不重要(!!!!) 并行语句的顺序不重要(!!!!)
利用VHDL语言设计组合逻辑电路概要 利用VHDL语言设计组合逻辑电路概要 VHDL
例如, 假如我们有如下两行语句代码: 例如, 假如我们有如下两行语句代码: c; x <= a OR b OR c; (e=‘ y <= x WHEN (e=‘1’) ELSE ‘0’; 这与如下的语句是同样的效果 : (e=‘ y <= x WHEN (e=‘1’) ELSE ‘0’; c; x <= a OR b OR c; 我们所写的语句的顺序是无关重要的, 我们所写的语句的顺序是无关重要的,因为它 并行工作) 们是并行语句 (并行工作)
在VHDL语言中进行组合逻辑电路设计 VHDL语言中进行组合逻辑电路设计
我们可以用很多方法来描述组合逻辑 在接下来的内容中, 在接下来的内容中, 我们将来看一些描述 组合逻辑的示例, 组合逻辑的示例,以明白组合逻辑电路的 HDL语言描述方法 HDL语言描述方法 我们应该从以下所学的知识进行举一反三, 我们应该从以下所学的知识进行举一反三, 灵活应用到我们的设计当中; 灵活应用到我们的设计当中;即我们学到 的不仅仅是简单的一些知识, 的不仅仅是简单的一些知识,而更是一种 设计的方法
其方框图如下图所示: 其方框图如下图所示:
计数器程序
process(clk,rst) variable cn:std_logic_vector(3 downto 0); begin count<=cn; if rst='1' then cn:="0000";--异步清零; elsif clk'event and clk='1' then if cn="1111" then cn:="0000";--同步清零 可通过修改同 else 步清零条件来 cn:=cn+1; 修改计数范围 end if; end if; end process; end cnt_arch;
mux4_1: PROCESS (a, b, c, BEGIN 00” IF s = “00” 01” ELSIF s = “01” 10” ELSIF s = “10” ELSE x <= d ; END IF; END PROCESS mux4_1 ; d, s) THEN x <= a ; THEN x <= b ; THEN x <= c ;
b c d x
mux
例 (2):利用“WITH-SELECT-WHEN”设计 (2):利用“WITH-SELECT-WHEN”
这里也能在一行中把所有的条件都写上: 这里也能在一行中把所有的条件都写上: WITH s SELECT 000” 001” 010” x <= a WHEN ”000” | “001” | “010”, 101” 111” b WHEN “101” | “111”, -- ‘|’ or” 说明是 “or” 运算符 c WHEN OTHERS;
赋哪个值依赖于所选的信号条件 WHEN 语句 必须 互斥 (all different) OTHERS” 经常使用 “WHEN OTHERS” 来囊括未定义的情 况 Only one reference to the signal, 只有一个 <=) 赋值运算符 (<=)
WITH selection_signal SELECT signal_name <= value_1 WHEN value_1 of selection_signal, value_2 WHEN value_2 of selection_signal, ... value_n WHEN value_n of selection_signal, value_x WHEN OTHERS;
x <=(a AND NOT(s(1)) AND NOT(s(0))) OR (b AND NOT(s(1)) AND s(0)) OR a (c AND s(1) AND NOT(s(0))) OR b (d AND s(1) AND s(0)) ;
c d s
2
x
mux
例(2)利用“WITH-SELECT-WHEN”设计 (2)利用 WITH-SELECT-WHEN” 利用“
什么是一个 VHDL的 “进程” ? VHDL的 进程”
进程要么唤醒,要么是沉睡(active or inactive) 进程要么唤醒, 一个进程通常有一个敏感信号列表( 一个进程通常有一个敏感信号列表(sensitivity
list) list)
–当在敏感信号列表 中的一个信号变化时, 进程就被 唤 中的一个信号变化时, 醒(wakes up )并且所有的时序语句 都执行一遍 –例如, 对有时钟的敏感信号列表而言,在信号clock 的 例如, 对有时钟的敏感信号列表而言,在信号clock 变化沿处将激活进程
例(1):利用布尔方程(公式)进行设计 (1):利用布尔方程(公式) 利用布尔方程
在VHDL中支持所有的标准的Boolean运算 VHDL中支持所有的标准的Boolean运算 中支持所有的标准的Boolean AND, OR, NOT, XOR, XNOR, NAND 例如: 的多路选择器, 例如: 一个 4选1 的多路选择器,如下图所 示
在VHDL语言中进行时序逻辑电路设计பைடு நூலகம்VHDL语言中进行时序逻辑电路设计
时序逻辑语句 (意味着按照时序规定来执行语句) 意味着按照时序规定来执行语句) 有时我们需要建立复杂的模型函数. 有时我们需要建立复杂的模型函数. 在这种情 况下, 算法” 况下, 我们能使用一个 “算法” 或者一个模型 来描述这个函数, 来描述这个函数,这只能由时序语句来完成了 在时序语句中, 在时序语句中, 语句的顺序是很重要的 (见后 面的例子) 面的例子) 进程) 我们使用一个 process (进程)来标志一个时 序语句块的开始和结束 每个完整的进程都可以视为一个大的并发性语 在一个结构体中有很多个进程) 句 (在一个结构体中有很多个进程)
例 (2):利用“WITH-SELECT-WHEN”设计 (2):利用“WITH-SELECT-WHEN”
前面我们所见的 4选1 多路选择开关还能有如 下描述: 下描述: WITH s SELECT 00” s=“00” x <= a WHEN “00”, -- means when s=“00” s 01” b WHEN “01”, 2 a 10” c WHEN “10”, d WHEN OTHERS;
显示器程序
process(a) begin case a is when "0000"=>Y<="1111110"; when "0010"=>Y<="1101101"; when "0100"=>Y<="0110011"; when "0110"=>Y<="1011111"; when "1000"=>Y<="1111111"; when "1010"=>Y<="1110111"; when "1100"=>Y<="1001110"; when "1110"=>Y<="1001111"; end case; end process;
b c d
s
2
x
mux
例 (3):利用“WHEN-ELSE”设计 (3):利用“WHEN-ELSE”
WITH-SELECTWITH-SELECT-WHEN 和 WHEN-ELSE 的区别是什 WHEN么? –WITH-SELECT-WHEN 仅仅允许 一个 控制信 WITH-SELECT号 –WHEN-ELSE 支持许多不同的控制信号 WHEN–例如: 一个 优先编码器 例如: j <= w x y z when when when when (a (b (c (d = = = = ‘1 ’) ‘1 ’) ‘1 ’) ‘1 ’) else else else else
利用可编程逻辑器件进行 7段数码管控制接口的设计
目的 1.了解 了解7 1.了解7段数码管显示的原理及接口 驱动方法。 驱动方法。 2.利用可编程逻辑器件进行 利用可编程逻辑器件进行7 2.利用可编程逻辑器件进行7段数码 管定时更新。 管定时更新。