EDA实验五.显示驱动电路设计

合集下载

DigitalClock

DigitalClock

EDA课程设计报告(数字钟设计)学院:信息科学与技术学院班级:2008050202姓名:杨颉学号:200805020220指导教师:曾伟、吴雄英日期:2011年6月——2011年7月内容摘要随着微电子技术和计算机技术的发展,电子信息产品更新换代的速度日新月异。

实现这种进步的主要原因就是电子设计与制造技术的发展,其核心就是电子设计自动化(EDA,Electronics Design Automation)技术,EDA技术的发展和推广应用极大地推动了电子信息产业的发展。

EDA技术在不同的发展时期有不同的内容,其含义已经不只局限在当初电路版图设计自动化的概念上,而当今的EDA技术更多的是指芯片内的电子系统设计自动化。

本次设计的关于数字钟的EDA实验就是这样的一种体现。

数字钟学习的目的是掌握多位计数器相连的设计方法;掌握十进制、六进制、二十四进制计数器的设计方法;巩固多位共阴极扫描显示数码管的驱动及编码;掌握CPLD、FPGA技术的层次化设计方法;掌握用原理图输入的设计思想以及整个数字系统的设计。

学会电路设计自动化软Protel DXP进行电路板计算机辅助设计的能力以及掌握电路原理图设计和印刷电路板PCB设计的方法和技术。

此数字钟具有时,分显示功能,以12/24小时为计数循环;能实现清零,调节小时,分钟的功能,关键词:EDA、数字钟、计数器、数码管、FPGA、计数器、译码器、DXP、PCB一、课设项目名称数字钟的设计与实现二、课设实验项目的目的和任务Ⅰ.设计目的1. 数字钟学习的目的是掌握多位计数器相连的设计方法;2. 掌握六十进制,十二进制,二十四进制计数器的设计方法;3. 巩固多位共阴级扫描显示数码管的驱动及编码;4. 对利用原理图输入设计相关模块有一定的了解;5. 掌握EDA技术的层次化设计方法;6. 熟悉Protel DXP 2004软件的操作;7. 学会原理图的绘制;8.学会PCB板的制作。

Ⅱ.设计要求1.具有时、分、秒计数且时、分显示功能,以12或24小时循环计时。

数码管显示控制器 eda 课程设计 报告电路图

数码管显示控制器 eda 课程设计 报告电路图

燕山大学EDA课程设计报告书题目:数码管显示控制器姓名:***班级:电子信息工程三班学号:************一、设计题目及要求题目:数码管显示控制器要求:1.能自动一次显示出数字0、1、2、3、4、5、6、7、8、9(自然数列),1、3、5、7、9(奇数列),0、2、4、6、8(偶数列),0、1、2、3、4、5、6、7、0、1(音乐符号序列);然后再从头循环;2.打开电源自动复位,从自然数列开始显示。

二、设计过程及内容本实验的总体电路由分频器,计数器,转换电路和数码管显示电路四模块组成。

模块一分频器为了使实验结果更便于观察,我设计了分频器电路。

选用实验箱上366Hz的时钟信号,用74161接成366进制计数器,把366Hz的时钟信号作为计数器的输入,使计数器的进位输出作为下一模块的时钟信号,通过这种模式从而起到分频的作用。

分频器的电路图如上图所示:其仿真波形为:模块二计数器根据题目要求,数码管显示的是一个包含30个数的循环,为使这些状态能够循环显示,我采用2片74161以置数的方式接成30进制,设计了30进制的计数器,并将第五位的输出Q0~Q4作为下一模块的输入。

使计数器的每一个计数状态与对应显示的数字建立一种一一对应关系,从而实现数列的循环显示。

电路图如下图所示:仿真波形为:模块三地址转换电路由于前一步骤中计数器的输出是五个端,而七段显示译码器只有四个输入端,因此我设计了这部分的地址转换电路。

在这一模块中我将计数器的5个输出端转换成4个输出端。

这一模块主要应用组合逻辑电路的知识,将0~29这三十个状态与显示的数字的码一一对应,并画出卡诺图,进行化简,找出对应关系,然后写出相应输出端的表达式,画出逻辑图即可得到地址转换电路。

电路图如下所示:模块四数码管显示电路将前一模块的四个地址输入端接到7448的输入端上,接好其它控制端,即组成了显示电路。

电路图如下;模块五总电路将设计好的四个模块相应端接好,如下图所示:波形如下;三、硬件设计方案本实验Device Family选择为“ELEX10K”所选择的编码器件“EPF10K10LC 84-3”,设置好引脚,连接好实验电路,将编译无误地程序下载到实验箱上,进行仿真,最终实验结果与预期要求完全吻合。

实验六 LED点阵显示驱动电路设计

实验六 LED点阵显示驱动电路设计

实验六LED16×16 汉字图形点阵显示电路一、实验目的1、掌握计数器设计。

2、掌握点阵LED显示模块的工作原理。

3、掌握VHDL基本逻辑电路的综合设计应用。

二、实验原理LED 点阵的行为扫描选通信号、列为数据输入。

显示采用逐行扫描方式,数据端不断输入数据,行扫描按一定顺序逐行选通,扫描一个周期(16次)产生一帧画面。

图1以4×4 共阴LED 阵列为例,给出了LED 阵列的组合方式,行选通低有效,数据高有效;数据端输入数据,选通行根据相应数据亮灯,接着送入第二行数据,选通第二行,依次完成一屏的扫描。

图1 LED阵列结构所要显示的点阵数据可存储在可编程芯片中的存储器中,电路结构框图如下所示:点阵显示驱动电路CLK_ROW为点阵扫描时钟;DIR[1..0]为点阵显示方式控制信号,00时左滚动显示,01时右滚动显示,10时闪烁显示。

DZ[15..0]为16位点阵数据输出,ADD_SCAN[3..0]为点阵扫描地址输出。

ROM用于存储点阵数据。

三、实验设备计算机软件:Quartus IIEDA实验箱。

主芯片:EPM7128SLC84-15或EP1K100QC208-3。

下载电缆,导线等。

四、实验内容及步骤1、制作ROM初始化文件,即mif文件。

方法如下:首先使用字模软件提取要显示的点阵信息。

然后在quartusII中新建一个256×16的mif文件,并输入上面提取的点阵数据,如下图2、使用宏功能向导定制一个LPM_ROM,元件名为ROM_DOT,用于存储点阵数据. ROM 位宽16位,深度8位。

3、输入以下参考代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY test_wait ISPORT (CLK_ROW: IN STD_LOGIC;DIR : IN STD_LOGIC_VECTOR(1 DOWNTO 0 );DZ: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);ADD_SCAN: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY test_wait;ARCHITECTURE ART OF test_wait ISCOMPONENT ROM_DOT ISPORT(ADDRESS : IN STD_LOGIC_VECTOR (7 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0));END COMPONENT ROM_DOT;SIGNAL ADD_ROM: STD_LOGIC_VECTOR(7 DOWNTO 0);ATTRIBUTE KEEP : BOOLEAN;ATTRIBUTE KEEP OF ADD_ROM:SIGNAL IS TRUE;SIGNAL CNT0 : STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINPROCESS(CLK_ROW)BEGINIF CLK_ROW'EVENT AND CLK_ROW='1' THENCNT0<=CNT0+1;END IF;END PROCESS;ADD_SCAN<=CNT0(3 DOWNTO 0);PROCESS(CNT0,DIR) ISBEGINCASE DIR ISWHEN "00" => --左滚动ADD_ROM <= ("0000" & CNT0(3 DOWNTO 0)) + CNT0(15 DOWNTO 8); WHEN "01" => --右滚动ADD_ROM(3 DOWNTO 0) <=CNT0(3 DOWNTO 0)-CNT0(11 DOWNTO 8);IF CNT0(3 DOWNTO 0) < CNT0(11 DOWNTO 8) THENADD_ROM(7 DOWNTO 4) <= CNT0(15 DOWNTO 12) + 1;ELSEADD_ROM(7 DOWNTO 4) <= CNT0(15 DOWNTO 12) ;END IF;WHEN OTHERS => --闪烁显示ADD_ROM(3 DOWNTO 0) <= CNT0(3 DOWNTO 0);ADD_ROM(7 DOWNTO 4) <= CNT0(14 DOWNTO 11);END CASE;END PROCESS;U1: ROM_DOT PORT MAP(ADDRESS=>ADD_ROM,Q=>DZ);END ARCHITECTURE ART;4、选择恰当的CPLD/FPGA芯片,并按如下要求进行引脚锁定。

组合电路——7段数码管显示驱动电路设计报告

组合电路——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;七、波形仿真结果。

EDA设计课程实验报告数码管动态显示实验报告

EDA设计课程实验报告数码管动态显示实验报告

EDA设计课程实验报告实验题目:数码管动态显示实验学院名称:专业:电子信息工程班级:姓名:高胜学号小组成员:指导教师:一、实验目的学习动态扫描显示的原理;利用数码管动态扫描显示的原理编写程序,实现自己的学号的显示。

二、设计任务及要求1、在SmartSOPC实验箱上完成数码管动态显示自己学号的后八个数字。

2、放慢扫描速度演示动态显示的原理过程。

三、系统设计1、整体设计方案数码管的八个段a,b,c,d,e,f,g,h(h是小数点)都分别连接到SEG0~SEG7,8个数码管分别由八个选通信号DIG0~DIG7来选择,被选通的数码管显示数据,其余关闭。

如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG0~DIG7分别被单独选通,并在此同时,在段信号输入口SEG0~SEG7加上该对应数码管上显示的数据,于是随着选通信号的扫描就能实现动态扫描显示的目的。

虽然每次只有1个数码管显示,但只要扫描显示速率足够快,利用人眼的视觉余辉效应,我们仍会感觉所有的数码管都在同时显示。

2、功能模块电路设(1)输入输出模块框图(见图1)图1(2)模块逻辑表达(见表1)表1(数码管显示真值表)clk_1k dig seg↑01111111 C0↑10111111 F9注:数码管显示为01180121(3)算法流程图(见图2)(4)Verilog源代码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; //显示fendcaseendendmodule四、系统调试(1)仿真代码`timescale 1ns/1nsmodule scan_ledfz;reg clk_1k;reg[31:0] d;wire[7:0] dig;wire[7:0] seg;parameter dely=100;scan_led u1(clk_1k,d,dig,seg);always #(dely/2)clk_1k=~clk_1k;initial beginclk_1k=0;d=32'h01180134;#dely ;#dely ;#dely ;#dely ;#dely ;#(dely*20);#dely $finish;endinitial $monitor($time,,,"%b,%d,%h,%h",clk_1k,d,dig,seg); endmodulemodule 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=3'b000; //定义计数寄存器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; //显示fendcaseendendmodule位码代码仿真代码`timescale 1ns/1nsmodule smg_tp; //测试模块的名字reg [2:0] c; //测试输入信号定义为reg型wire[7:0] dig; //测试输出信号定义为wire型parameter DEL Y=100; //延时100秒wei u1(c,dig); //调用测试对象initial begin //激励波形设定c=3'b0;#DEL Y c=3'b001 ;#DEL Y c=3'b010 ;#DEL Y c=3'b100 ;#DEL Y c=3'b101 ;#DEL Y c=3'b110 ;#DEL Y c=3'b111 ;#DEL Y $finish;endinitial $monitor($time,,,"dig=%d,c=%b ",dig,c); //输出格式i定义endmodulemodule wei(c,dig); //命名模块名字input[2:0] c;output[7:0] dig; //定义输入与输出reg[7:0] dig_r;reg[2:0] c_r; // 定义dig_r与c_r2个reg型数据assign dig=dig_r; //将reg型数据转化为wire型数据always @(*) //检测c_r的数据是否变化begin c_r=c;case (c_r)3'b000:dig_r=8'b11111110; //c_r的数据变化而dig_r对于的数据变化3'b001:dig_r=8'b11111101;3'b010:dig_r=8'b11111011;3'b011:dig_r=8'b11110111;3'b100:dig_r=8'b11101111;3'b101:dig_r=8'b11011111;3'b110:dig_r=8'b10111111;3'b111:dig_r=8'b01111111;default: dig_r=8'b11111111;endcase //结束case语句end //结束always语句endmodule //结束程序译码器代码仿真代码`timescale 1ns/1nsmodule duan_tp; //测试模块的名字reg[3:0] a; //测试输入信号定义为reg型wire[7:0] seg; //测试输出信号定义为wire型parameter DEL Y=100; //延时100秒duan u1(a,seg); //调用测试对象initial begin //激励波形设定a=4'b0;#DELY a=4'b0001;#DELY a=4'b0010;#DELY a=4'b0011;#DELY a=4'b0100;#DELY a=4'b0101;#DELY a=4'b0110;#DELY a=4'b0111;#DELY a=4'b1000;#DELY a=4'b1001;#DELY a=4'b1010;#DELY a=4'b1011;#DELY a=4'b1100;#DELY a=4'b1101;#DELY a=4'b1110;#DELY a=4'b1111;#DELY $finish;endinitial $monitor($time,,,"seg=%d,a=%b",seg,a); //输出格式i定义endmodulemodule duan(a,seg); //命名模块名字input[3:0] a;output[7:0] seg; //定义输入与输出reg[7:0] seg_r;reg[3:0] a_r; // 定义seg_r与a_r2个reg型数据assign seg=seg_r; //将reg型数据转化为wire型数据always @(*) //检测c_r的数据是否变化begin a_r=a;case(a_r) //七段译码4'b0000:seg_r = 8'hc0; //显示04'b0001:seg_r = 8'hf9; //显示14'b0010:seg_r = 8'ha4; //显示24'b0011:seg_r = 8'hb0; //显示34'b0100:seg_r = 8'h99; //显示44'b0101:seg_r = 8'h92; //显示54'b0110:seg_r = 8'h82; //显示64'b0111:seg_r = 8'hf8; //显示74'b1000:seg_r = 8'h80; ///显示84'b1001:seg_r = 8'h90; //显示94'b1010:seg_r = 8'h88; //显示a4'b1011:seg_r = 8'h83; //显示b4'b1100:seg_r = 8'hc6; //显示c4'b1101:seg_r = 8'ha1; //显示d4'b1110:seg_r = 8'h86; //显示e4'b1111:seg_r = 8'h8e; ///显示f endcase //结束case语句end //结束always语句endmodule //结束程序(2)仿真波形图(3)引脚图五、实验感想通过这次实验,让我学习动态扫描显示的原理;利用数码管动态扫描显示的原理编写程序,实现自己的学号的显示。

EDA实验5数码管(LED)驱动显示设计

EDA实验5数码管(LED)驱动显示设计

EDA实验5数码管(LED)驱动显示设计实验六数码管(LED)驱动显示设计一、实验目的1.学习7段数码显示译码器设计;2.学习硬件扫描显示电路的设计。

二、实验原理1、7段数码显示译码器原理通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示(数码管可以显示0~F),最方便的方法就是利用译码程序在FPGA/CPLD中来实现。

EL-EDA-Ⅲ实验系统的显示采用8位八段共阴极数码管(高电平有效),所对应的接口序号为:8段驱动接口:a、b、c、d、e、f、g、Dp;例6-1作为7段译码器,输入为需要显示的数,输出信号LED7S 的7位分别接如图1数码管的7个段,高位在左,低位在右。

例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。

注意:这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,例6-1参考程序中的output [6:0] LED7S 应改为output [7:0] LED7S。

图6-1共阴数码管及其电路【例6-1】module DECL7S (A, LED7S);input [3:0] A;output [6:0] LED7S;reg [6:0] LED7S;always @(A)begincase(A)4'b0000 : LED7S<=7'b0111111;//从此句可以看出LED7S[7]应该接到数码管的//g段上4'b0001: LED7S <= 7'b0000110 ;4'b0010: LED7S <= 7'b1011011;4'b0011: LED7S <= 7'b1001111;4'b0100: LED7S <= 7'b1100110 ;4'b0101: LED7S <= 7'b1101101;4'b0110: LED7S <= 7'b1111101 ;4'b0111: LED7S <= 7'b0000111 ;4'b1000: LED7S <= 7'b1111111 ;4'b1001: LED7S <= 7'b1101111 ;4'b1010: LED7S <= 7'b1110111 ;4'b1011: LED7S <= 7'b1111100 ;4'b1100: LED7S <= 7'b0111001 ;4'b1101: LED7S <= 7'b1011110 ;4'b1110: LED7S <= 7'b1111001 ;4'b1111: LED7S <= 7'b1110001 ;endcaseendendmodule2、8位数码扫描显示原理四位拨码开关产生8421BCD码,经译码电路后成为7段数码管(不包括小数点段位)的字形显示驱动信号(a…g)。

可编程逻辑器件实验EDA-七段数码管显示电路

可编程逻辑器件实验EDA-七段数码管显示电路

实验四 七段数码管显示电路
一、实验目的
实现十六进制计数显示。

二、硬件需求
EDA/SOPC 实验箱一台。

三、实验原理
七段数码管分共阳极与共阴极两种。

共阳极数码管其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。

共阴极数码管则与之相反,它是将发光二极管的阴极短接后作为公共阴极,当驱动信号为高电平、公共阴极接低电平时,才能发光。

图2-13为共阳极数码管和共阴极数码管的内部结构图。

a b c d e f g h
a
b
c
d
e
f
g
h
a b c d e f g h
DIG
DIG
共阴极七段数码管
共阳极七段数码管
图2-13 共阳极数码管和共阴极数码管的内部结构图
用七段数码管除了可以显示0~9的阿拉伯数字外,还可以显示一些英语字母。

下表是常见的字母与7段显示关系(共阴极数码管)。

编写一个0~F 轮换显示的电路(注意:选用实验箱中的共阳数码管DP1A ,FPGA 上
P25引脚连接50MHz时钟。

实验时为了便于观察,要将50MHz时钟经过分频得到1Hz时钟)。

五、实验步骤
(1)实验程序
(2)仿真结果
为方便观察程序功能,分频改为6分频,从上图可以看出数码管输出能够连续变化,同时输出正确稳定的七位码。

(3)管脚绑定
(4)实验实际结果
从实际的上电结果可以看出,每过一秒,数码管数值增1,并发生跳变显示。

EDA实验二 八位七段数码管动态显示电路的设计

EDA实验二  八位七段数码管动态显示电路的设计

实验名称八位七段数码管动态显示电路的设计一、实验目的1、了解数码管的工作原理。

2、学习七段数码管显示译码器的设计。

3、学习Verilog的CASE语句及多层次设计方法。

二、实验原理七段数码管是电子开发过程中常用的输出显示设备。

在实验系统中使用的是两个四位一体、共阴极型七段数码管。

其单个静态数码管如下图4-1所示。

图4-1 静态七段数码管由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

共阳极性的数码管与之相么。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

三、实验内容本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。

在实验中时,数字时钟选择1KHZ作为扫描时钟,用四个开关做为输入,当四个开关置为一个二进制数时,在数码管上显示其十六进制的值。

实验箱中的拨动开关与FPGA的接口电路,以及开关FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。

数码管显示模块的电路原理如图4-2所示,表4-1是其数码管的输入与FPGA的管脚连接表。

图4-2 数字时钟信号模块电路原理信号名称对应FPGA管脚名说明7SEG-A G6 七段码管A段输入信号7SEG-B G7 七段码管B段输入信号7SEG-C H3 七段码管C段输入信号7SEG-D H4 七段码管D段输入信号7SEG-E H5 七段码管E段输入信号7SEG-F H6 七段码管F段输入信号7SEG-G J4 七段码管G段输入信号7SEG-DP L8 七段码管dp段输入信号7SEG-SEL0 G5 七段码管位选输入信号7SEG-SEL1 G3 七段码管位选输入信号7SEG-SEL2 F4 七段码管位选输入信号表4-1 数码管与FPGA的管脚连接表四、实验步骤1、打开QUARTUSII软件,新建一个工程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安邮电学院实验中心实验报告
院系电子工程学院班级
学号姓名
成绩教师签字
实验日期
实验名称显示驱动电路设计
_______________________________________________________
一、实验目的
二、实验所用仪表及主要器材
三、实验原理简述
四、实验测量记录:(如数据、表格、曲线、计算等)
五、实验遇到的问题及解决办法:(余留问题,体会等)
一、实验目的
(1)掌握七段译码器的工作原理。

(2)学习显示驱动电路的BHDL描述方法。

(3)学习运用波形激励来仿真程序的正确性。

(4)了解数码管扫描显示的原理及实现。

二、实验所用仪表及主要器材
PC,可编程逻辑实验电路板,下载线,USB电源线,双踪示波器,数字万用表,导线若干。

三、实验内容
在MAX+PULSII环境下,用VHDL语言按照输入—>编译—>仿真。

(1将两个二位二进制数相乘结果用数码管显示。

在MAX+plusII环境下,用VHDL语言描述下列逻辑电路,并编译,仿真。

程序
library ieee;
use ieee.std_logic_1164.all;
entity e is
port(en,a,b,c,d:in std_logic;
y:out std_logic_vector(6 downto 0));
end;
architecture rtl of e is
signal indata:std_logic_vector(3 downto 0);
begin
process(indata,en)
begin
indata<=d&c&b&a;
if(en='0') then
case indata is
when"0000"=>y<="1111110";
when"0001"=>y<="0110000";
when"0010"=>y<="1101101";
when"0011"=>y<="1111001";
when"0100"=>y<="0110011";
when"0101"=>y<="1011011";
when"0110"=>y<="1011111";
when"0111"=>y<="1110000";
when"1000"=>y<="1111111";
when"1001"=>y<="1111011";
when"1010"=>y<="1110111";
when"1011"=>y<="0011111";
when"1100"=>y<="1001110";
when"1101"=>y<="0111101";
when"1110"=>y<="1001111";
when"1111"=>y<="1000111";
when others=>y<="ZZZZ";
end case;
else
y<="1111111";
end if;
end process;
end;
仿真结果:
四、实验心得
在本次实验中我学会了使用MAX+PLUSII软件的文本编程的方式设计电路。

在本次实验的文本编译环节中出现不少问题:
(1)保存时文件名与实体名不一致,导致程序编译结果不正确。

(2)写程序时没有按照语法规则编写,使得文件编译频繁报错,标点的错误也会导致整个程序无法编译。

相关文档
最新文档