EDA课程设计八位数码管扫描显示电路的设计资料
8位数码扫描显示电路设计实验
实验一基本组合电路设计(1)实验目的:熟悉 Quartus U的文本输入设计法和原理图输入设计法,学习简单组合电路以及多层次电路的设计、仿真和硬件测试。
(2)实验内容:I.利用Quartus U完成2选1多路选择器的文本编辑输入。
【参考程序】:ENTITY mux21a ISPORT ( a, b, s: IN BIT;y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINPROCESS (a,b,s)BEGINIF s = ' O' THEN y <= a ;ELSE y<= b ;END IF;END PROCESS;END ARCHITECTURE one ;n .将实验I中的2选1多路选择器生成一个元件 mux21a利用原理图输入设计方法实现图1-1的双2选1多路选择器,并将此文件放在同一目录中。
最后进行编译、仿真,并对其仿真波形作出分析说明。
川.对U进行引脚锁定及硬件下载测试。
建议选择实验电路模式5,用键1(PIOO, 引脚号为1)控制sO;用键2(PIO1,引脚号为2)控制s1; a3、a2和a1分别接clock5(引脚号为16)、clockO (引脚号为93)和clock2 (引脚号为17);输出信号outy接扬声器spker (引脚号为129)。
通过短路帽选择clock5接1024Hz 信号,clock0接256Hz信号,clock2接8Hz信号。
最后进行编译、下载和硬件测试实验(通过选择键1、键2、控制s0、s1,可使扬声器输出不同音调)。
(3)实验报告:1.实验U的原理图。
2•实验U的仿真波形报告分析说明。
3.实验川硬件测试的详细实验说明。
图1-1 双2选1多路选择器实验_二基本时序电路设计(1)实验目的:熟悉Quartus U的VHDL文本设计过程,学习简单时序电路的设计、仿真和硬件测试。
EDA 数码管动态扫描电路
数码管动态扫描电路设计试设计一个数码管动态显示的扫面控制电路。
它能将8路位二进制数显示在实验箱上的8个数码管上。
要求:当输入为‘0000’----‘1001’时显示为0—9,‘1010’---‘1111’时显示ABCDEF字母。
先将该控制电路分为几个模块,然后用VHDL的结构化描述方式实现该电路。
3—8译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LIN_EDA ISPORT(ABC:IN STD_LOGIC_VECTOR(2 DOWNTO 0);BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END;ARCHITECTURE ONE OF LIN_EDA ISBEGINPROCESS(ABC)BEGINCASE ABC ISWHEN "000"=>BT<="00000001";WHEN "001"=>BT<="00000010";WHEN "010"=>BT<="00000100";WHEN "011"=>BT<="00001000";WHEN "100"=>BT<="00010000";WHEN "101"=>BT<="00100000";WHEN "110"=>BT<="01000000";WHEN "111"=>BT<="10000000";WHEN OTHERS=>NULL;END CASE;END PROCESS;END;3位二进制计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY OK_B ISPORT(CLK1:IN STD_LOGIC;Q:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0));END;ARCHITECTURE BBC OF OK_B ISSIGNAL Q1:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(CLK)BEGINIF CLK1'EVENT AND CLK1='1' THENQ1<=Q1+1;END IF;END PROCESS;Q<=Q1;END;7段译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.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"=>DECL7S<="0111111";WHEN "0001"=>DECL7S<="0000110";WHEN "0010"=>DECL7S<="1011011";WHEN "0011"=>DECL7S<="1001111";WHEN "0100"=>DECL7S<="1100110";WHEN "0101"=>DECL7S<="1101101";WHEN "0110"=>DECL7S<="1111101";WHEN "0111"=>DECL7S<="0000111";WHEN "1000"=>DECL7S<="1111111";WHEN "1001"=>DECL7S<="1101111";WHEN "1010"=>DECL7S<="1110111";WHEN "1011"=>DECL7S<="1111100";WHEN "1100"=>DECL7S<="0111001";WHEN "1101"=>DECL7S<="1011110";WHEN "1110"=>DECL7S<="1111001";WHEN "1111"=>DECL7S<="1110001";WHEN OTHERS=>NULL;END CASE;END PROCESS;END;顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sccbc_led ISPORT(B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);BT1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END;ARCHITECTURE CNT_ABC OF sccbc_led IS COMPONENT LIN_EDAPORT(ABC:IN STD_LOGIC_VECTOR(2 DOWNTO 0);BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT;COMPONENT OK_BPORT(CLK1:IN STD_LOGIC;Q:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT;COMPONENT DECL7SPORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END COMPONENT;COMPONENT ABC_HPORT(B1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT INTEGER RANGE 0 TO 15 );END COMPONENT;SIGNAL B:STD_LOGIC;SIGNAL A2:INTEGER;BEGINU1:ABC_H PORT MAP(B1=>B,A1=>A2);U2:DECL7S PORT MAP(A=>A2,LED7S=>LED7S1);U3:OK_B PORT MAP(CLK1=>CLK,Q=>B);U4:LIN_EDA PORT MAP(ABC=>B,BT=>BT1);END ARCHITECTURE CNT_ABC ;数据选择器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ABC_H ISPORT(B1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT INTEGER RANGE 0 TO 15 );END;ARCHITECTURE ABC_C OF ABC_H ISBEGINPROCESS(B1)BEGINCASE B1 ISWHEN "0000"=>A1<=0; WHEN "0001"=>A1<=1; WHEN "0010"=>A1<=2; WHEN "0011"=>A1<=3; WHEN "0100"=>A1<=4; WHEN "0101"=>A1<=5; WHEN "0110"=>A1<=6; WHEN "0111"=>A1<=7; WHEN "1000"=>A1<=8; WHEN "1001"=>A1<=9; WHEN "1010"=>A1<=10; WHEN "1011"=>A1<=11; WHEN "1100"=>A1<=12; WHEN "1101"=>A1<=13; WHEN "1110"=>A1<=14; WHEN "1111"=>A1<=15; WHEN OTHERS=>NULL; END CASE;END PROCESS;END;。
实验五 八位数码扫描显示电路设计
实验五八位数码扫描显示电路设计[实验目的]1、熟悉7段数码显示译码器设计;2、学习硬件扫描显示电路的设计。
*[实验仪器]PC机、EDA实验箱一台Quartus II 6.0软件[实验内容](1) 实验内容1:说明例7-1中各语句的含义,以及该例的整体功能。
对该例进行编辑、编译、综合、适配、仿真,给出仿真波形。
实验方式:若考虑小数点,SG的8个段分别与PIO49、PIO48、…、PIO42(高位在左)、BT的8个位分别与PIO34、PIO35、…、PIO41(高位在左);电路模式不限。
将GW48EDA 系统左下方的拨码开关全部向上拨,时钟CLK可选择clock0,通过跳线选择16384Hz信号。
引脚锁定后进行编译、下载和硬件测试实验。
(2) 实验内容2:修改例7-1的进程P1中的显示数据直接给出的方式,增加8个4位锁存器,作为显示数据缓冲器,使得所有8个显示数据都必须来自缓冲器。
缓冲器中的数据可以通过不同方式锁入,如来自A/D采样的数据、来自分时锁入的数据、来自串行方式输入的数据,或来自单片机等。
[实验原理]图3-4所示的是8位数码扫描显示电路,其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
[参考设计文本描述] 图3-4 8位数码扫描显示电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN_LED ISPORT ( CLK : IN STD_LOGIC;SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--段控制信号输出BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );--位控制信号输出END;ARCHITECTURE one OF SCAN_LED ISSIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL A : INTEGER RANGE 0 TO 15;BEGINP1:PROCESS( CNT8 )BEGINCASE CNT8 ISWHEN "000" => BT <= "00000001" ; A <= 1 ;WHEN "001" => BT <= "00000010" ; A <= 3 ;WHEN "010" => BT <= "00000100" ; A <= 5 ;WHEN "011" => BT <= "00001000" ; A <= 7 ;WHEN "100" => BT <= "00010000" ; A <= 9 ;WHEN "101" => BT <= "00100000" ; A <= 11 ;WHEN "110" => BT <= "01000000" ; A <= 13 ;WHEN "111" => BT <= "10000000" ; A <= 15 ;WHEN OTHERS => NULL ;END CASE ;END PROCESS P1;P2:PROCESS(CLK)BEGINIF CLK'EVENT AND CLK = '1' THEN CNT8 <= CNT8 + 1;END IF;END PROCESS P2 ;P3:PROCESS( A ) –-译码电路BEGINCASE A ISWHEN 0 => SG <= "0111111"; WHEN 1 => SG <= "0000110";WHEN 2 => SG <= "1011011"; WHEN 3 => SG <= "1001111";WHEN 4 => SG <= "1100110"; WHEN 5 => SG <= "1101101";WHEN 6 => SG <= "1111101"; WHEN 7 => SG <= "0000111";WHEN 8 => SG <= "1111111"; WHEN 9 => SG <= "1101111";WHEN 10=> SG <= "1110111"; WHEN 11 => SG <= "1111100";WHEN 12=> SG <= "0111001"; WHEN 13 => SG <= "1011110";WHEN 14=> SG <= "1111001"; WHEN 15 => SG <= "1110001";WHEN OTHERS =>NULL ;END CASE ;END PROCESS P3;END;[实验报告要求]1、写出实验源程序,画出仿真波形;2、分析实验结果,以及它们的硬件测试实验结果写进实验报告。
8位8段LED数码管动态扫描显示
8位8段LED数码管动态扫描显示
项目名称:8位8段LED数码管动态扫描显示班级:09电二姓名:解健学号:09020313
一.实验目的
1.掌握数码管动态扫描显示原理及实现方法。
2.掌握动态扫描显示电路驱动程序的编写方法。
二.实验电路
第一步:先在Proteu软件中设计仿真电路原理图。
第四步:最后观察设计的电路图是否能得到预想的效果,若不能,进行检查,找到毛病且纠正。
流程图
开始灭显示器I=0延时Counter=0Counter=0选择段选择段点亮所有位按数值点亮位延时延时
Counter++YCounter<8NI++YNNCounter++YCounter<8N停止Y结束I<30
实验现象:
显示器点亮所有段,持续约1,然后灭显示器,持续2,最后显示“hello-93”,保持。
附:程序
#include#include#defineTRUE1#definedataPortP0#defineledConPortP 2
{unignedchari,counter=0;
for(i=0;i<30;i++){
voiddelay_5u(void){_nop_();_nop_();}
voiddelay_50u(void){unignedchari;for(i=0;i<4;i++){delay_5u() ;}}
voiddelay_100u(void){delay_50u();delay_50u();}
for(j=0;j<10;j++)delay_100u();ucM--;}}。
八位数码扫描显示电路设计
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shuma isport(clk:in std_logic;--时钟seg:out std_logic_vector(7 downto 0);--段显示控制(abcdefg)scan:out std_logic_vector(7 downto 0));--数码管地址选择控制end entity shuma;architecture one of shuma issignal cnt8:integer range 0 to 7;signal data:integer range 0 to 15;begin ----------扫描数码管地址计数器process(clk)beginif clk'event and clk='1' thencnt8<=cnt8+1;end if;end process; -----------数码管地址扫描process(cnt8)begincase cnt8 iswhen 0=>scan<="00000001";data<=1;when 1=>scan<="00000010";data<=2;when 2=>scan<="00000100";data<=4; when 3=>scan<="00001000";data<=5; when 4=>scan<="00010000";data<=7; when 5=>scan<="00100000";data<=9; when 6=>scan<="01000000";data<=13; when 7=>scan<="10000000";data<=15; when others=>null;end case;end process; -----------7段译码process(data)begincase data is ---abcdefgwhen 0=>seg<="11111100";when 1=>seg<="01100000";when 2=>seg<="11011010";when 3=>seg<="11110010";when 4=>seg<="01100110";when 5=>seg<="10110110";when 6=>seg<="10111110";when 7=>seg<="11100000";when 8=>seg<="11111110";when 9=>seg<="11110110";when 10=>seg<="11101110";when 11=>seg<="00111110";when 12=>seg<="10011100";when 13=>seg<="01111010";when 14=>seg<="10011110";when 15=>seg<="10001110";when others=>null;end case;end process;end architecture one;。
8位数码扫描显示电路设计
EDA与VHD1语言课程实验报告实验名称:班级:学号:姓名:实验日期:8位数码扫描显示电路设计2012.10.27实验五8位数码扫描显示电路设计一、实验目的:学习硬件扫描显示电路的设计。
二、实验原理:图1所示是8位数码扫描显示电路。
图1中g~a为数码管段信号输入端,每个数码管的七个段(g、f、e、d、c、b、a)都分别连在一起;k1~k8 为数码管的位选信号输入端。
8个数码管分别由8个位选信号k1、k2、…k8来选通,被选通的数码管才显示数据,未选通的数码管关闭。
如在某一时刻,k3为高电平,其余选通信号均为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。
因此,如果希望在8个数码管上显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
AAAAAAAAK1 K2 K3 K4 K5 K6 K7 K3图1 8位数码扫描显示电路三、实验内容1:用VHDL语言设计8位数码扫描显示电路,显示输出数据直接在程序中给出。
1、程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan play ISPORT( CLK:IN STD_LOGIC;SI:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);BI:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ;ARCHITECTURE bhv OF scan play ISSIGNAL S: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL B: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK) --产生动态扫描显示的控制信号VARIABLE SIO: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE BIO:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINIF CLK'EVENT AND CLK='1' THENIF BIO < 8 THEN BIO:=BIO+1; ELSE BIO:=(others=>'0');END IF;IF SIO < 8 THEN SIO:=SIO+1; ELSE SIO:=(others=>'0');END IF;END IF;S<=SIO;B<=BIO;END PROCESS;PROCESS(S)BEGINCASE S ISWHEN "0000"=> SI<="00000001";WHEN "0001"=> SI<="00000010";WHEN "0010"=> SI<="00000100";WHEN "0011"=> SI<="00001000";WHEN "0100"=> SI<="00010000";WHEN "0101"=> SI<="00100000";WHEN "0110"=> SI<="01000000";WHEN "0111"=> SI<="10000000";WHEN OTHERS=> SI<="00000000"; END CASE;END PROCESS;PROCESS(B)BEGINCASE B ISWHEN "0000"=> BI<="0111111";WHEN "0001"=> BI<="0000110";WHEN "0010"=> BI<="1011011";WHEN "0011"=> BI<="1001111";WHEN "0100"=> BI<="1100110";WHEN "0101"=> BI<="1101101";WHEN "0110"=> BI<="1111101";WHEN "0111"=> BI<="0100111";WHEN "1000"=> BI<="1111111";WHEN "1001"=> BI<="1101111";WHEN "1010"=> BI<="1110111";WHEN "1011"=> BI<="1111100";WHEN "1100"=> BI<="0111001";WHEN "1101"=> BI<="1011110";WHEN "1110"=> BI<="1111001";WHEN OTHERS=> BI<="1110001"; END CASE; END PROCESS; END bhv;注意:编程下载之前,将扬声器下方的 JDSP 跳线开关跳至“ close ”任意电 路模式皆可。
8位数码管动态显示电路设计
电子课程设计—8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:姓名:学号:指导老师:2014年12月目录一、设计任务与要求................................................. (3)二、总体框图................................................. (3)三、选择器件................................................. (3)四、功能模块................................................. (9)五、总体设计电路图................................................. . (10)六、心得体会.................................................. .. (12)8位数码管动态显示电路设计一、设计任务与要求1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。
2. 要求在某一时刻,仅有一个LED数码管发光。
3. 该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。
4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。
5、研究循环地址码发生器的时钟频率和显示闪烁的关系。
二、总体框图设计的总体框图如图2-1所示。
图2-1总体框图三、选择器件1、数码管数码管是一种由发光二极管组成的断码型显示器件,如图1所示。
U13DCD_HEX图1 数码管数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED 的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
单片机课程设计-8位8段LED数码管动态扫描显示资料
华南理工大学广州汽车学院单片机课程设计题目:8位8段LED数码管动态扫描专业:电子信息工程班级:09电信(1 )班姓名:付锦辉学号:200930062745一、内容要求:在8位8段LED数码管显示8.8.8.8.8.8.8.8.”持续500ms,之后灭显示器200ms;然后显示“ WELCOM-1 ”(由于8位8段LED数码管显示不能显示字母 W 和M,所以改为显示“ HELLO-93 ”)二、目的和意义1、掌握数码管动态扫描显示原理及实现方法。
2、掌握动态扫描显示电路驱动程序的编写方法。
三、总体方案设计思路LED 数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,再选通相应的数码管后,即显示字段上得到显示字形码。
这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。
动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。
其接口电路是把所有显示器的 8 个笔画段 A-DP 同名端并联在一起,而每个显示器的公共极 COM 各自独立地接受 I/O 线控制, CPU 向字段输出口送出字段形码是,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM 端,而这一端是由 I/O 控制的,所以就可以自行决定何时显示哪一位了。
而所谓动态扫描是指采用分时的方法,轮流控制各个显示器的 COM 端,使各个显示器轮流点亮。
再轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上个位显示器并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪烁感。
采用总线驱动器 74HC245 提供 LED 数码管的段驱动,输出高电平时点亮相应段;采用集电极开路的BCD-十进制译码器/驱动器完成LED数码管位驱动,输出低电平时选通相应位。
P2 口每个口线输出灌电流不足以驱动一个数码管显示器的位-公共极,所依通过集电极开路的BCD-十进制译码器/驱动器7445驱动,即节约P2 口线,又增加驱动能力。
EDA数码管课程设计
《EDA技术及应用》课程设计报告题目:八位数码管扫描显示电路的设计院(系):机电与自动化学院专业班级:电气自动化技术学生姓名:学号:指导教师:2012年6月10日至2012年6月23日华中科技大学武昌分校12硬件资源元件引脚EP3C引脚序号电路使用说明LED 数码显示A 133该部分电路为固定电路。
使用LED数码显示时请按照器件引脚分配表进行引脚分配后再下载到芯片中。
B 135C 136D 137E 138F 141G 142Dp 12874LS138 S1 125 S2 126 S3 1273、LED连接图4、课程设计使用设备(1)EDA及SOPC综合实验平台;(2)导线若干;(3)PC机;(4)Quartus II开发工具软件。
34目录1. 课程设计题目及要求 (1)1.1设计题目 (1)1.2LED显示器的动态扫描驱动电路. (1)1.3设计方案论证 (1)2. LED显示器动态扫描驱动电路各单元电路设计 (3)2.1计数器与译码器的设计 (3)2.2一位共阳极LED动态驱动电路设计 (4)2.3 七段数码管的设计 (5)3. LED显示器动态扫描系统设计 (7)3.1整体电路图及工作原理 (7)3.2VHDL程序设计 (7)3.3电路参数计算 (10)4. Quartus运行调试 (12)4.1时序仿真 (12)4.2硬件逻辑验证 (13)4.3调试结果分析 (13)4.4调试中出现的问题及解决方法 (14)5.设计总结 (15)6. 参考文献 (16)附录 1 系统硬件电路图 (17)附录 2 实物照片(现场接线及调试显示照片) (18)51. 课程设计题目及要求1.1设计题目八位数码管扫描显示电路的设计设计主要内容:本课题要求掌握使用Quartus II设计数字系统的设计思路和设计方法。
学习VHDL基本逻辑电路的综合设计应用。
掌握VHDL语言的语法规范,掌握时序电路描述方法。
掌握多个数码管动态扫描显示的原理及设计方法。
基于EDA的8位数码管显示
河南科技8位数码管显示电路设计2012——20113学年第五学期EDA技术课程考试专业班级:电气106姓名:耀学号:考核老师:1 引言EDA技术是当前数字系统设计领域比较火热的一种工具,他可以大大缩短设计需要的时间,降低成本的同时也提高了系统的稳定性。
使用VHDL语言描述硬件系统使得EDA技术有了更为广阔的空间。
本设计使用了基于Altera公司的开发软件工具Quartus II,使用Verilog HDL语言设计了一款很实用的八位共阴数码管显示驱动电路,由Quartus II生成的RTL图如下:2.1 设计思路设计总框图如下:2.2 总体原理图图1 总体原理图2.3 总体功能介绍由总体原理图可知,原理图中共有五个输入和两个输出。
CLK为时钟输入端,DATA为预显示数据的加载端,在实际应用中可用通信总线代替27位并行总线输入数据,将并口改为串口来简化电路。
LOAD为数据加载端DATA的使能端。
D为移位寄存器的数据加载端,MD 为数据加载端D的使能端。
输出端口LED为数码管显示数据输出端,端口K为数码管位选数据输出端。
总体功能介绍:由CLK输入时钟控制信号,DATA加载待显示的数据。
先将LOAD置0,使加载端DATA的数据被存入内部寄存器。
然后,随着时钟信号的输出,转制电路将内部寄存器中的数据按十进制,依次在输出端口DOUT输出低位到高位。
输出端口COUT为8位移位寄存器的时钟控制端,当寄存器DOUT中被存入数据时,COUT端被置1,使的移位寄存器的时钟输入信号变的有效。
D为移位寄存器的数据加载端,在D端输入FE,通过移位寄存器控制共阴数码管的位选。
MD为数据加载端D的使能端,先将MD置1,使D端口的数据存入移位寄存器中,在数据存入后,将MD置0阻止D端口的数据存入。
输出端口K接数码管的位选端1~8,以控制数码管的动态显示。
3 各个模块的实现3.1二进制转十进制二进制转十进制是通过将待显示的数据用内部的寄存器存储,然后对其除以10取整数部分和对其除以10取余数来实现二进制转十进制。
EDA实验数码管扫描显示电路
实验三数码管扫描显示电路一、实验目的1、掌握数码管动态扫描显示数据的原理;2、掌握利用EDA软件和VHDL语言设计较复杂时序逻辑电路的方法;二、实验原理实验参考程序:LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;USE IEEE.Std_Logic_Unsigned.ALL;ENTITY Dynamic_Disp ISPORT(Clock:IN Std_Logic;En:OUT Std_Logic_Vector(0 to 7); --分别接到八个数码管的公共端Disp:OUT Std_Logic_Vector(0 to 6)); --接数码管的7个控制端END ENTITY Dynamic_Disp;ARCHITECTURE behav OF Dynamic_Disp ISSIGNAL Counter:Integer Range 0 to 7;BEGINPROCESS(Clock)V ARIABLE Num:Integer Range 0 to 9;BEGINIF rising_edge(Clock) THENIF Counter=7 THENCounter<=0;ELSECounter<=Counter+1;END IF;Num:=Counter;CASE Counter ISWHEN 0=>En<="01111111";WHEN 1=>En<="10111111";WHEN 2=>En<="11011111";WHEN 3=>En<="11101111";WHEN 4=>En<="11110111";WHEN 5=>En<="11111011";WHEN 6=>En<="11111101";WHEN 7=>En<="11111110";WHEN OTHERS=>En<="111111";END CASE;CASE Num ISWHEN 0 =>Disp<="1111110";WHEN 1 =>Disp<="0110000";WHEN 2 =>Disp<="1101101";WHEN 3 =>Disp<="1111001";WHEN 4 =>Disp<="0110011";WHEN 5 =>Disp<="1011011";WHEN 6 =>Disp<="1011111";WHEN 7 =>Disp<="1110000";WHEN 8 =>Disp<="1111111";WHEN 9 =>Disp<="1110011";WHEN OTHERS=>Disp<="0000000";END CASE;END IF;END PROCESS;END;常用的显示器件有发光二极管、数码管、液晶显示器等,其中最常用的是数码管。
8位计数器EDA课程设计报告
课程设计说明书题目8个LED循环显示、计数器的设计起止日期 2009。
12.18-2010.1.4 电子设计自动化设计任务书系(部):电子与通信工程系专业:电气工程及其自动化指导教师:长沙学院课程设计鉴定表目录1、课程设计目的 (5)2、课程设计题目 (5)3、设计内容 (5)3。
1 设计思路 (5)3.2 设计步骤 (5)4、程序中各引脚的分配 (12)5、程序结构框图 (13)6、完整程序 (14)7、课程设计总结 (21)参考文献 (22)一、课程设计目的系统提供一个50MHZ的时钟,要求用VHDL语言设计一个8位计数器,同时有一个8位led循环显示灯,当灯亮一次,数码管上就记一次数。
通过做此计数器,知道分频的概念,并且知道如何分频,同时知道什么是数码管的动态显示,怎么做出数码管的动态显示。
二、课程设计题目8个LED循环显示、计数器的设计。
三、设计内容1、设计思路:由于要设计一个8个led灯循环显示的计数器。
则重要的设计部分在于让led灯循环显示,同时在显示的同时数码管的数加1;要让led灯亮的同时,数码管上面的数字加1,则需要在同一个脉冲下完成计数器加一,led等循环亮一位。
由于系统给定的时钟是50Mhz,显然数码管和led灯不能正常工作,这就涉及到要将50mhz频率分频,将频率变小,使计数器和led灯能正常工作;Led灯设计思路:led灯要实现循环显示,即第一个灯亮之后,在出现一个上升沿脉冲后,第二个灯亮,第一个灯灭,来一个脉冲移动一个,并实现循环,为了实现循环,设计思路是讲来一次脉冲将最高位补到最低位,次最高位变成最高位。
数码管的设计思路:由于数码管要求是动态显示,显然还要分出一个置位工作扫描频率,由于人的视觉暂留,频率应该大于24hz,为了数码管显示效果,我分出了1000hz的频率来扫描8位数码管的工作.分频的设计思路:分频是为了将50mhz的频率减小,即在50mhz(clk)出现n个上升沿之前另一个clk1不翻转,而在n个上升沿时翻转,在2n之前一直保持翻转后的状态,到2n时,计数器清零,同时再实现翻转,这样就能做出任意较小的频率实现设计。
8位8段led数码管动态扫描显示
项目名称:8位8段LED数码管动态扫描显示班级:09电二姓名:解健学号:09020313一.实验目的1.掌握数码管动态扫描显示原理及实现方法。
2.掌握动态扫描显示电路驱动程序的编写方法。
二.实验电路三.元器件元器件编号元器件名称说明U2 7445 集电极开路的BCD十进制译码器/驱动器U3 74HC245 8位总线驱动器U1 AT89C52 AT89C52单片机RP1 RESPACK8 具有公共端的排电阻7SEG-MPX8-CC-BLUE 共阴极8位7段LED蓝色显示器四.实验步骤第一步:先在Proteus软件中设计仿真电路原理图。
第二步:再在Keil C51软件中编写且编译程序,程序后缀必须是.c。
然后在打开的“Option for Target‘Target 1’”选项卡,“Target”标签下频率设置为“11.0592”,“Output”标签下,将“Creat HEX File”项打勾选中,设置生成一个.hex文件。
第三步:接着将.hex文件导入原理图中U1芯片。
双击U1,打开Edit Component对话框,选择生成的hex文件。
第四步:最后观察设计的电路图是否能得到预想的效果,若不能,进行检查,找到毛病且纠正。
流程图实验现象:显示器点亮所有段,持续约1s ,然后灭显示器,持续2s,最后显示“hello-93”,保持。
附:程序#include<intrins.h> #include<REGX52.H>#define TRUE 1 #define dataPort P0 #define ledConPort P2unsigned char code ch[8]={0x76,0x79,0x38,0x38,0x3f,0x40,0x6f,0x4f}; void time(unsigned int ucMs); void main(void) NNNN YYYY开始 选择段点亮所有位 Counter=0 I=0I++I<30灭显示器延时选择段按数值点亮位Counter=0延时Counter<8停止结束Counter++Counter<8Counter++延时{unsigned char i,counter=0;for(i=0;i<30;i++){for(counter=0;counter<8;counter++) { ledConPort=counter;dataPort=0xff;time(5);}}ledConPort=0xff;time(2000);while(TRUE){for(counter=0;counter<8;counter++){ ledConPort=counter;dataPort=ch[counter];time(5);}}}void delay_5us(void){_nop_();_nop_();}void delay_50us(void){ unsigned char i;for(i=0;i<4;i++){delay_5us();}}void delay_100us(void){delay_50us();delay_50us();}void time(unsigned int ucMs) {unsigned char j;while(ucMs>0){for(j=0;j<10;j++) delay_100us();ucMs--;}}。
8位数码扫描显示电路设计
设计项目成绩评定表设计报告书目录一、设计目的 0二、设计思路 0三、设计过程 03。
1、系统方案论证 03。
2、模块电路设计 0四、系统调试与结果 (2)五、主要元器件与设备 (2)六、课程设计体会与建议 (3)6。
1、设计体会 (3)6.2、设计建议 (3)七、参考文献 (4)一、设计目的1、学习硬件扫描显示电路的设计。
2、熟悉Quartus II 6。
0的Verilog HDL 文本设计过程,学习简单时序电路的设计、仿真和硬件的测试。
二、设计思路1、设计8位数码扫描显示电路。
2、采用文本编辑法,利用Verilog HDL 语言描述8位数码扫描显示电路。
3、设计时序控制电路.三、设计过程3.1、系统方案论证如下图1所示的是8位数码扫描显示电路,其中每个数码管的8个段:h, g, f, e, d, c,b, a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1, k2, k3,......k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k2为高电平,其余选通信号为低电平,这是仅k3对应的数码管显示来自段信号端的数据,其余7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1, k2, k3, (8)别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
图1 8位数码扫描显示电路3.2、模块电路设计用VHDL设计一个8位数码扫描显示电路,利用QuartusⅡ6.0进行编辑输入、编译及时序仿真。
引脚锁定及硬件测试。
电路模式不限,将实验系统左上方(即8个数码管左边)的跳线开关选择向下插(注意:实验结束后要恢复原位)。
8位数码扫描显示的I/O分配表如下图2所示。
输入信号:时钟信号clk。
输出信号:段显示控制信号 seg[7:0];数码管地址控制信号 cnt8[2:0]。
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:8位计数显示译码电路的设计
WHEN "1111"=>LED7S<="01110001";WHEN OTHERS=>NULL;END CASE;END PROCESS;END one;Dec7s.vhd 源程序通过编译后,生成的元件符号中a[3..0]是数据输入端,接收cnt4e 的计数状态。
设计8位计数显示译码电路顶层文件。
生成的cnt4e 和Dec7s 图形符号只是代表两个分立的电路设计结果,并没有形成系统。
顶层设计文件就是调用cnt4e 和Dec7s 两个功能元件,将它们组装起来,形成一个完整的设计。
top.bdf 是本例的顶层设计文件,在Quartus II 集成环境下,首先为顶层设计建立工程项目(top ),然后打开一个新文件并进入图形编辑方式。
在图形编辑框中,调出cnt4e 元件符号两个和Dec7s 元件符号两个以及输入(input )和输出(output )元件符号。
top 顶层设计结果图编译顶层设计文件。
不管是用文本编辑方式还是用图形编辑方式形成的电路设计文件,都要通过计算机的编译。
在完成对图形编辑文件的编译后,若要生成元件符号,则要执行“File”→“Greate/Update”菜单下的“Create Symbol Files for Current File”命令,为图形设计文件生成元件符号。
仿真顶层设计文件8位计数显示译码电路的仿真波形【实验数据整理与归纳】Dec7s 元件符号top11.bdftop11.vwf【实验结果与分析】计数译码系统电路的仿真波形如图top11.vwf所示,其中数据“3F”是电路输出端q[0:15]送给七段数码管显示“00”的数据;“06”是显示“01”的数据;依此类推。
仿真结果验证了设计的正确性。
【实验中遇到的问题及解决方案】1.由于对软件不够熟悉,不知道如何生成元件符号。
解决方案:上网搜寻教程。
2.仿真失败。
解决方案:根据软件提示发现是没有生成网表,生成网表后仿真成功。
8位数码管动态显示电路设计
电子课程设计—8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:姓名:学号:指导老师:2014年12月目录一、设计任务与要求................................................. (3)二、总体框图................................................. (3)三、选择器件................................................. (3)四、功能模块................................................. (9)五、总体设计电路图................................................. . (10)六、心得体会.................................................. .. (12)8位数码管动态显示电路设计一、设计任务与要求1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。
2. 要求在某一时刻,仅有一个LED数码管发光。
3. 该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。
4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。
5、研究循环地址码发生器的时钟频率和显示闪烁的关系。
二、总体框图设计的总体框图如图2-1所示。
图2-1总体框图三、选择器件 1、数码管数码管是一种由发光二极管组成的断码型显示器件,如图1所示。
U13DCD_HEX图1 数码管数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED 的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《EDA技术及应用》课程设计报告题目:八位数码管扫描显示电路的设计院(系):机电与自动化学院专业班级:电气自动化技术1001学生姓名:学号: 20102822018指导教师:何为2012年6月10日至2012年6月23日《EDA技术及应用》课程设计任务书一、设计题目八位数码管扫描显示电路的设计二、设计主要内容本课题要求掌握使用Quartus II设计数字系统的设计思路和设计方法。
学习VHDL基本逻辑电路的综合设计应用。
掌握VHDL语言的语法规范,掌握时序电路描述方法。
掌握多个数码管动态扫描显示的原理及设计方法。
设计一个八位数码管共阴极动态扫描显示控制电路,要求显示学生自己的学号。
利用实验室设备完成系统设计并进行运行调试。
1、具体设计内容如下:(1)静止显示学号;(2)动态循环显示学号。
2、提供设计报告,报告要求包括以下内容:设计思路、设计输入文件、设计与调试过程、模拟仿真结果和设计结论。
三、原始资料1、LED显示模块原理LED有段码和位码之分,所谓段码就是让LED显示出“8.”的八位数据,一般情况下要通过一个译码电路,将输入的4位2进制数转换为与LED显示对应的8位段码。
位码也就是LED的显示使能端,对于共阳级的LED而言,高电平使能。
要让8个LED同时工作,显示数据,就是要不停的循环扫描每一个LED,并在使能每一个LED的同时,输入所需显示的数据对应的8位段码。
虽然8个LED是依次显示,但是受视觉分辨率的影响,看到的现象是8个LED同时工作。
多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
2、系统结构图信号名与芯片引脚对照表硬件资源元件引脚EP3C引脚序号电路使用说明LED 数码显示A 133该部分电路为固定电路。
使用LED数码显示时请按照器件引脚分配表进行引脚分配后再下载到芯片中。
B 135C 136D 137E 138F 141G 142Dp 12874LS138 S1 125 S2 126 S3 1273、LED连接图4、课程设计使用设备(1)EDA及SOPC综合实验平台;(2)导线若干;(3)PC机;(4)Quartus II开发工具软件。
四、要求的设计成果(1)根据控制要求设计硬件电路原理图。
(2)编写用于系统仿真的VHDL源程序。
(3)系统仿真及验证结果。
(4)编写《EDA技术及应用课程设计》报告,课程设计报告内容包括:①设计方案、课程设计过程和设计思想、方法、原理。
②画出系统的原理图。
③VHDL语言程序及仿真波形。
④参考资料、参考书及参考手册。
⑤其他需要说明的问题,例如操作说明、程序的调试过程、遇到的问题及解决方法、对课程设计的认识和建议等。
⑥《可编程控制器技术课程设计》报告可以手写,也可以用电脑编排打印,报告格式按照《华中科技大学武昌分校课程设计管理办法》执行。
课程设计报告要求内容正确完整,图表清晰,叙述简明,语句通顺,字数不得少于2000汉字。
⑦课程设计报告按封面、任务书、设计说明书、图纸、实物照片贴页(实物照片贴在A4复印纸上)、成绩评定表的顺序装订。
五、进程安排内容时间下达课程设计任务书。
讲解课程设计的任务与要求、1天进度安排、指导时间、注意事项、提供参考资料。
学生到实验室熟悉设备。
搜集资料、方案论证、初步设计。
1天设计VHDL语言程序。
2天在实验装置上进行硬件测试。
3天方案优化、总结完善、整理资料、撰写课程设计报告。
2天答辩、课程设计总结。
1天共计10天(2周)六、主要参考资料[1] 郑燕,赫建国. 基于VHDL与Quartus II软件的可编程逻辑器件应用于开发.北京:国防工业出版社,2011.[2] Altera. Pin Information for the Cyclone III EP3C10 Device.San José:Altera Corp,2008.[3] 潘松,黄继业.EDA技术实用教程——VHDL版.北京:科学出版社,2010.指导教师(签名):20 年月日目录1.课程设计题目及要求 (7)1.1课程设计题目 (7)1.2课程设计要求 (7)1.3系统总体方案设计 (7)2. LED的工作原理 (8)2.1 LED工作原理 (8)2.2 LED动态扫描显示原理 (9)3.系统设计 (9)3.1硬件电路设计 (9)3.2 VHDL代码设计 (9)4.运行调试......................................................,,13 4.1时序仿真. (13)4.2 硬件逻辑验证..................................................,15 4.3调试结果分析 (16)4.4 调试中出现的问题及解决方法 (16)5 总结..............................................,,,,,,,,,,,,,,,166.参考文献 (17)7. 附录1系统硬件电路图 (18)附录2实物照片 (19)1.课程设计题目及要求1.1课程设计题目八位数码管静态扫描显示电路的设计1.2课程设计要求本课题要求掌握使用Quartus II设计数字系统的设计思路和设计方法。
学习VHDL基本逻辑电路的综合设计应用。
掌握VHDL语言的语法规范,掌握时序电路描述方法。
掌握多个数码管动态扫描显示的原理及设计方法。
设计一个八位数码管共阴极动态扫描显示控制电路,要求显示学生自己的学号。
利用实验室设备完成系统设计并进行运行调试。
1.3系统总体方案设计设计流程图如下:生成VHDL源程序VHDL逻辑综合﹑优化自动优化﹑布局﹑布线∕适配编程、下载首先,我们要对所要设计的八位数码管静态扫描显示电路充分理解,同时在了解了所给的硬件器材的基础上需进行“源程序的编辑和编译”——用一定的逻辑表达手段将设计表达出来;其次要进行“逻辑综合”——将用一定的逻辑表达手段表达出来的设计,经过一系列的操作,分解成一系列的基本逻辑电路及对应关系;然后要进行“目标器件的布线∕适配”——在选定的目标器件中建立这些基本逻辑电路及对应关系;最后,目标器件的编程下载——将前面的软件设计经过编程变成具体的设计系统,同时在设计过程中要进行有关“仿真”——模拟有关设计结果,看是否与设计构想相符。
系统结构框图如下:硬件资源元件引脚EP3C引脚序号电路使用说明LED 数码显示A 133该部分电路为固定电路。
使用LED数码显示时请按照器件引脚分配表进行引脚分配后再下载到芯片中。
B 135C 136D 137E 138F 141G 142Dp 12874LS138S1 125S2 126S3 1272. LED的工作原理2.1 LED工作原理LED为分段式半导体显示器,通常称为七段发光二极管显示器。
下图为七段发光二极管显示器共阴极和共阳极的电路图。
对共阴极显示器的公共端应接地,给a-g输入相应高电平,对应字段的发光二极管显示十进制数;对共阳极的公共端应接+5V电源,给a-g输入端相应低电平,对应字段的发光二极管也显示十进制数。
2.2 LED动态扫描显示原理LED有段码和位码之分,所谓段码就是让LED显示出“8.”的八位数据,一般情况下要通过一个译码电路,将输入的4位2进制数转换为与LED显示对应的8位段码。
位码也就是LED的显示使能端,对于共阳级的LED而言,高电平使能。
要让8个LED同时工作,显示数据,就是要不停的循环扫描每一个LED,并在使能每一个LED的同时,输入所需显示的数据对应的8位段码。
虽然8个LED是依次显示,但是受视觉分辨率的影响,看到的现象是8个LED同时工作。
多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
3 系统设计3.1 硬件电路设计3.2 VHDL程序设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_signed.all;entity scan_seg8 isport(clk3,clk5:in std_logic;rst: in std_logic;seg_da:out std_logic_vector(7 downto 0);seg_sel:out std_logic_vector(2 downto 0));end scan_seg8;architecture ado of scan_seg8 issignalseg_buf1,seg_buf2,seg_buf3,seg_buf4,seg_buf0:std_logic_vector(3 downto 0);signal seg_buf5,seg_buf6,seg_buf7,seg_buf8:std_logic_vector(3 downto 0);signal seg_cnt:std_logic_vector(2 downto 0);signal seg_temp:std_logic_vector(3 downto 0);signal clk:std_logic;beginprocess(clk5)beginif clk5'event and clk5='1' thenclk<=not clk;end if;end process;process(clk5,rst)beginif clk5' event and clk5='1' thenif clk='1' thenseg_buf1<="0010";seg_buf2<="0010";seg_buf3<="1000";seg_buf4<="0010";seg_buf5<="0000";seg_buf6<="0001";seg_buf7<="0000";seg_buf8<="0010";elseseg_buf1<="1111";seg_buf2<="1111";seg_buf3<="1111";seg_buf4<="1111";seg_buf5<="1111";seg_buf6<="1000";seg_buf7<="0001";seg_buf8<="0000";end if;end if;end process;process (clk3,rst)beginif clk3' event and clk3='1' thenif rst='1' thenseg_cnt<="000";elseseg_cnt<=seg_cnt+1;end if;end if;end process;seg_sel<=seg_cnt;process(seg_cnt,seg_buf1,seg_buf2,seg_buf3,seg_buf4,seg_buf5,seg_buf6 ,seg_buf7,seg_buf8)begincase seg_cnt iswhen o"0" => seg_temp<=seg_buf1;when o"1" => seg_temp<=seg_buf2;when o"2" => seg_temp<=seg_buf3;when o"3" => seg_temp<=seg_buf4;when o"4" => seg_temp<=seg_buf5;when o"5" => seg_temp<=seg_buf6;when o"6" => seg_temp<=seg_buf7;when o"7" => seg_temp<=seg_buf8;when others=> seg_temp<="XXXX";end case;end process;process(seg_temp)begincase seg_temp iswhen "0000"=> seg_da<="00111111";when "0001"=> seg_da<="00000110";when "0010"=> seg_da<="01011011";when "0011"=> seg_da<="01001111";when "0100"=> seg_da<="01100110";when "0101"=> seg_da<="01101101";when "0110"=> seg_da<="01111101";when "0111"=> seg_da<="00000111";when "1000"=> seg_da<="01111111";when "1001"=> seg_da<="01101111";when "1010"=> seg_da<="01110111";when "1011"=> seg_da<="01111100";when "1100"=> seg_da<="00111001";when "1101"=> seg_da<="01011110";when "1110"=> seg_da<="01111001";when "1111"=> seg_da<="00000000";when others=> null;end case;end process;end architecture ado;4 运行调试4.1 时序仿真(1)建立波形文件。