物理与电子工程学院
课程设计
题 目:专 业:班 级:姓 名:实验地点:指导老师:成 绩:
智能八路抢答器的设计 学号: 物理与电子工程学院
0
( 2010.07 )
智能八路抢答器的设计
1 引 言
电子产品在生活中有着极其广泛的应用,包括计算机、数字通信、智能仪器仪表、自动控制及航天等领域中。这些给人们带来了生活,工作等方面带来了极大的方便。电子产品的发展,使得这门课程对于我们来说是很有必要学好。在这次的电子产品的制作中,本人制作八路智能抢答器。抢答器在比赛等场合中不可缺少的设备。
智力竞赛是一种生动活泼的教育形式和方法,它通过抢答和必答等方式引起参赛者和观众的兴趣,并在短时间内(如30秒等),增加人们的科学知识和生活知识。进行智力抢答时,一般分为若干组,主持人对各个组提出问题,有必答题和抢答题两种。答题有时间,若在规定时间内未能回答问题,则发出超时警告。对抢答题,要准确判断那组优先,并予以指示和鸣叫(如响铃等)。回答正确与否,由主持人判别并进行加分和减分,成绩结果通过电子装置显示
物理与电子工程学院
指导老师:
1.1 设计内容
用单片机设计并实现智能八路抢答器。
1.2 设计要求
1. 复习编码器、十进制加/减计数器的工作原理,设计可预置时间的定时电路分
析与设计时序控制电路。画出定时抢答器的整机逻辑电路图,掌握智力抢答器的工作原理及其设计方法,并对各种元器件的功能和应用有所了解。并能对其在电路中的作用进行分析。了解电路设计流程的原理图。明白每个电路的设计流程。
1.3 系统主要功能
1.3.1
基本功能
1. 设计一个智能竞赛抢答器,可同时供8个选手或8个代表队参加比赛,他们
的编号分别是A,B,C,D,E,F,G,H,各用一个抢答按钮,按钮的编号与选手的编
1
号相对应,分别是STATES0、STATES1、STATES2、STATES3、STATES4、STATES5、S STATES6、STATES7。
2. 给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭
灯)和抢答的开始。
3. 抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答开关按
钮,编号立即锁存,并在LED数码管上显示选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其他选手抢答。优先抢答选手的编号一直保持到主持人将系统清零为止。
1.3.2扩展功能
1. 抢答器具有定时抢答的功能,且一次的抢答时间由主持人设定。当节目主持
人启动“开始”键后,,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响。
2. 参赛选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示
选手的编号和抢答时刻的时间(如30s),并保持到主持人将系统清零为止。如果定时抢答时间已到,但没有选手抢答,本次抢答无效,系统将短暂报警并封锁输入电路,禁止选手超时后抢答,时间显示器上并显示00。 3. 当参赛选手在回答问题后主持人根据回答内容和回答是否有效并最终给出
无效、加分、减分三种情况(每个参赛选手初始分为100分每加分或减分的单位都是10分)
2 硬件设计
2.1原理图
2
图2-1 八路抢答器原理图
2.2主要元件功能说明 2.2.1抢答鉴别模块
其主要的程序如下:
PORT(CLR: IN STD_LOGIC;
A,B,C,D,E,F,G,H:IN STD_LOGIC; \\\\八人或八组抢答按键
X:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); \\\\给选择器一个组别输入信号 STATES:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);\\\\给计分器一个输入信号 zubie:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);\\\\显示抢答组别号 SOUND:OUT STD_LOGIC);\\\\声音输出信号 END ENTITY QDJB;
ARCHITECTURE QDJB_ARC OF QDJB IS
CONSTANT W1: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00000001\"; 号定 CONSTANT W2: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00000010\"; 将义八 CONSTANT W3: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00000100\"; 其赋个 CONSTANT W4: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00001000\"; 给变量 CONSTANT W5: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00010000\"; 输出根 CONSTANT W6: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00100000\"; 据输 CONSTANT W7: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"01000000\"; 入 CONSTANT W8: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"10000000\"; 信 BEGIN
PROCESS(CLR,A,B,C,D,E,F,G,H) IS BEGIN
IF CLR='1' THEN STATES<=\"00000000\";\\\\清零有效输出全部赋零
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<
3
='0';X(7)<='0';
ELSIF (A='1'AND B='0'AND C='0'AND D='0'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='1';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W1; SOUND<='1';zubie<=\"0001\";\\\\A抢答成功把W1赋给输出声音响起 组别号显示为1。
ELSIF (A='0'AND B='1'AND C='0'AND D='0'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='1';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W2; SOUND<='1';zubie<=\"0010\";\\\\B抢答成功把W2赋给输出声音响起 组别号显示为2。
ELSIF (A='0'AND B='0'AND C='1'AND D='0'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='1';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W3; SOUND<='1';zubie<=\"0011\";\\\\C抢答成功把W3赋给输出声音响起 组别号显示为3。
ELSIF (A='0'AND B='0'AND C='0'AND D='1'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='1';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W4; SOUND<='1';zubie<=\"0100\";\\\\D抢答成功把W4赋给输出声音响起 组别号显示为4。
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='1'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='1';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W5; SOUND<='1';zubie<=\"0101\";\\\\E抢答成功把W5赋给输出声音响起 组别号显示为5。
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='0'AND F='1'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='1';X(6)<='0';X(7)<='0';
STATES<=W6; SOUND<='1';zubie<=\"0110\";\\\\F抢答成功把W6赋给输出声音响起 组别号显示为6。
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='0'AND F='0'AND G='1'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='1';X(7)<='0';
STATES<=W7; SOUND<='1';zubie<=\"0111\";\\\\G抢答成功把W7赋给输出声音响起 组别号显示为7。
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='0'AND F='0'AND
4
G='1'AND H='1') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='1';
STATES<=W8; SOUND<='1';zubie<=\"1000\";\\\\H抢答成功把W8赋给输出声音响起 组别号显示为8。
它的功能是鉴别八组(A,B,C,D,E,F,G,H,)中是那组抢答成功并且把抢答成功的组别号输出给动态扫描并用译码器在数码管上显示相应的组别号(用阿拉伯数字表示)。它上面设置一个主持人开关清零键(CLR)其主要功能是当一轮成功抢答完后或抢答无效后主持人按下清零键(CLR)后数码管显示最初状态“0”。
其代码程序仿真结果如图所示
图4-2 抢答鉴别波形仿真
2.2.2倒计时模块
源程序如下所示:
IF CLR='0' THEN\\\\„„„„„当清零有效的时候 HH:=\"0011\";
\\\\„„„„„清零时赋初始
LL:=\"0000\"; ELSE
IF CLK'EVENT AND CLK='1'THEN
IF EN='0'THEN \\\\„„„„„„„使能有效的时候 IF LL=0 AND HH=0 THEN „„„„„当倒计时为00的时候声音响起
SOUND<='1';
ELSIF LL=0 THEN LL:=\"1001\"; „„„„„当个位为0时十位减1个位变成HH:=HH-1; 9 ELSE
LL:=LL-1; \\\\„„„„„„如果个位不为0时十位不变个位减1 END IF; ELSE
5
SOUND<='1'; HH:=\"0011\"; LL:=\"0000\";
它的功能:是如果一组抢答成功,主持人给出判断并给出使能信号使倒计时开始计时如果计时到30秒的时候声音就会响起给主持人提供信息说明抢答队员已经超过了规定的时间,主持人会根据自己的主观意愿宣部此次抢答有效或无效。总的来说倒计时起到规定参赛者的起到时间并起到给主持人提示的作用。
倒计时的设计思想:倒计时需要用两个数码管显示,其中一个数码管显示十位(HH)另一个显示个位(LL),它们都用二进制表示,当参赛者抢答成功时,主持人给出是否有效,如果有效就把使能信号赋高电平,倒计时开始工作,当时钟脉冲(clk)有效的时候倒计时就开始计时,当个位变成零的时候程序就会使十位减1并且个位变成9,如果个位没有变成零的时候个位在时钟脉冲上升沿的时候自动减1,十位保持不变。
倒计时的仿真波形如下图所示:
图4-3 倒计时模块波形仿真
2.2.3计分选择模块
2.2.3.1计分模块程序:
BEGIN
IF (clk'EVENT AND clk='1') THEN IF RST='1' THEN
cnt_1h<=\"0001\";cnt_1m<=\"0000\"; cnt_1l<=\"0000\"; 每个参赛选手 cnt_2h<=\"0001\";cnt_2m<=\"0000\"; cnt_2l<=\"0000\"; 用三个数码管 cnt_3h<=\"0001\";cnt_3m<=\"0000\"; cnt_3l<=\"0000\"; 显示分别为百 cnt_4h<=\"0001\";cnt_4m<=\"0000\"; cnt_4l<=\"0000\"; 位、十位、个位, cnt_5h<=\"0001\";cnt_5m<=\"0000\"; cnt_5l<=\"0000\"; 当复位有效的 cnt_6h<=\"0001\";cnt_6m<=\"0000\"; cnt_6l<=\"0000\"; 时候给每个选 cnt_7h<=\"0001\";cnt_7m<=\"0000\"; cnt_7l<=\"0000\"; 手赋初始分100 cnt_8h<=\"0001\";cnt_8m<=\"0000\"; cnt_8l<=\"0000\"; 分 ELSIF CHOS=\"00000001\" THEN\\\\当参赛选手A抢答成功为1其他不成功为0的时候
if add='1' then\\\\„„„„„当加分有效的时候
IF cnt_1m=\"1001\" THEN cnt_1m<=\"0000\";\\\\„„„„当十位为9的时候变成0
6
IF cnt_1h=\"1001\" THEN cnt_1h<=\"0000\";\\\\„„当百位为9的时候变成0
ELSE cnt_1h<=cnt_1h+1;\\\\如果百位不为9的时候就在百位加1 END IF; ELSE cnt_1m<=cnt_1m+1;\\\\„„如果十位不为9的时候就在十位加1 END IF;
elsif jian='1' then\\\\„„„„„如果减分有效的时候
IF cnt_1m=\"0000\" THEN cnt_1m<=\"1001\";cnt_1h<=cnt_1h-1; „„„.如果十位为0的时候就把十位变成9并且百位上减1
ELSE cnt_1m<=cnt_1m-1;\\\\ „„„„如果十位不为0的时候就在十位上减1,而百位与个位上保持不变 END IF; END IF; ELSIF CHOS=\"00000010\" THEN\\\\„„„ 当参赛选手B抢答成功为1其他不成功为0的时候
if add='1' then
IF cnt_2m=\"1001\" THEN cnt_2m<=\"0000\";
IF cnt_2h=\"1001\" THEN cnt_2h<=\"0000\"; ELSE cnt_2h<=cnt_2h+1; END IF;
ELSE cnt_2m<=cnt_2m+1; END IF;
elsif jian='1' then
IF cnt_2m=\"0000\" THEN cnt_2m<=\"1001\";cnt_2h<=cnt_2h-1; ELSE cnt_2m<=cnt_2m-1; END IF; END IF;
2.2.3.2 选择模块程序:
process(chos) begin
case chos is
when\"00000001\"=>mark_h<=mark_1h;mark_m<=mark_1m;mark_l<=mark_1l; \\\\„„„„如果参赛选手A抢答成功就把A的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when\"00000010\"=>mark_h<=mark_2h;mark_m<=mark_2m;mark_l<=mark_2l; \\\\„„„„如果参赛选手B抢答成功就把B的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when\"00000100\"=>mark_h<=mark_3h;mark_m<=mark_3m;mark_l<=mark_3l; \\\\„„„„如果参赛选手C抢答成功就把C的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when\"00001000\"=>mark_h<=mark_4h;mark_m<=mark_4m;mark_l<=mark_4l;
7
\\\\„„„„如果参赛选手D抢答成功就把D的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when\"00010000\"=>mark_h<=mark_5h;mark_m<=mark_5m;mark_l<=mark_5l; \\\\„„„„如果参赛选手E抢答成功就把E的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when\"00100000\"=>mark_h<=mark_6h;mark_m<=mark_6m;mark_l<=mark_6l; \\\\„„„„如果参赛选手F抢答成功就把F的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when\"01000000\"=>mark_h<=mark_7h;mark_m<=mark_7m;mark_l<=mark_7l; \\\\„„„„如果参赛选手G抢答成功就把G的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when\"10000000\"=>mark_h<=mark_8h;mark_m<=mark_8m;mark_l<=mark_8l; \\\\„„„„如果参赛选手H抢答成功就把H的百位赋给最终输出的百位、十位赋个最终输出的十位、个位赋给最终输出的个位。
when others=>mark_h<=\"1111\";mark_m<=\"1111\";mark_l<=\"1111\"; \\\\„„„„如果输入信号与上面的几种情况不一致就把输出的百位、十位、个位全部都赋为0. end case;
将他们生成的模块如下图所示:
图4-4 计分选择模块
计分选择模块的设计理念和功能是利用抢答鉴别模块的功能使其将成功抢答的参赛选手的组别信号和其他的输出信号作为计分选择模块的输入信号。我们认为规定每一位选手都有100分的初始值主持人根据选手的回答情况给出结果是加10分还是减10分。开始加分还是减分的时候我们只在十位上进行加1还是减1,当十位达到9和达到0时在进行跳变,百位才给出相应的加1还是减1.每一个参赛选手用三个数码管(一个数码管显示百位、一个数码管显示十位、一个数码管显示个位)显示他们的最终得分,但是考虑到开发板的资源有限一次性无法同时显示八位参赛选手(24个数码管)的得分情况,因此我们需要加一个选择器,它是也根据从抢答鉴别模块的输出信号作为输入信号,如果那位选手抢答成功选择器就会只显示抢答成功的选手分数,这样就避免了资源有限的问题。
8
计分选择的功能就让主持人从最终的得分来判断那位选手是最终的胜利者,也可以根据分数来评出一、二、三等奖。
2.2.4译码器
译码器它是各个模块的输出二进制信号译码成BCD七段码因为数码管它是由a、b、c、d、e、f、g这七段组成,它根据各个模块的输出信号来决定这七段中那些显示那些不显示最总得到的数字就是显示分数、抢答组别号和倒计时。它的主要程序如下: PROCESS(AIN4) BEGIN
CASE AIN4 IS WHEN \"0000\"=>DOUT7<=\"1111110\";\\\\„„„当输入信号为0的时候数码管上只有g不显示因此显示结果为0. WHEN \"0001\"=>DOUT7<=\"0110000\";„„„当输入信号为1号座抢答成功时数码管上有b、c亮因此显示为1。 WHEN \"0010\"=>DOUT7<=\"1101101\";\\\\„„„当输入信号为2号座抢答成功时数码管上有a、b、d、e、g亮因此显示为2。 WHEN \"0011\"=>DOUT7<=\"1111001\";\\\\„„„当输入信号为3号座抢答成功时数码管上有a、b、c、d、g亮因此显示为3。 WHEN \"0100\"=>DOUT7<=\"0110011\";„„„当输入信号为4号座抢答成功时数码管上有b、c、f、g亮因此显示为4。 WHEN \"0101\"=>DOUT7<=\"1011011\";\\\\„„„当输入信号为5号座抢答成功时数码管上有a、c、d、f、g亮因此显示为5。 WHEN \"0110\"=>DOUT7<=\"1011111\";\\\\„„„当输入信号为6号座抢答成功时数码管上有只有b不亮因此显示为6。 WHEN \"0111\"=>DOUT7<=\"1110000\";\\\\„„„当输入信号为7号座抢答成功时数码管上有a、b、c亮因此显示为7。 WHEN \"1000\"=>DOUT7<=\"1111111\";\\\\„„„当输入信号为8号座抢答成功时数码管上有全部都亮因此显示为8。 WHEN \"1001\"=>DOUT7<=\"1111011\";\\\\„„„当输入信号为9号座抢答成功时数码管上只有e亮因此显示为9。
WHEN OTHERS=>DOUT7<=\"0000000\";\\\\„„„如果输入信号不是上面几种情况则数码管不显示。
把译码器生成模块如下图所示:
图4-5 译码器模块
译码器的主要功能:其主要功能就是把各个模块的输入的不同信号经过译码成BCD码然后直接在数码管上显示,更能给观众一个准确、简明的数字。
9
2.2.5动态扫描介绍
数码管显示一般分为静态显示和动态显示两种驱动方式。动态显示驱动:数码管动态显示接口是应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划\"a、b、c、d、e、f、g\"的同名端连在一起,另外为每个数码管的公共极COM(地线端)增加位选通控制电路,位选通由各自的I/O线控制,当输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于对位选通COM(地线端)端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM(地线端)端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。为了使动态扫描能够正常的工作因此我们要提供相应的频率通过学习我们知道1hz是我们需要得要的频率而开发板上是12mhz因此我们要通过分频来得到,我们要得到指定那位数码管显示相应的数字我们还必须要加个未选和段选两个小模块,因此动态扫描需要分频、未选、段选三部分组成。
2.2.5.1分频模块
主要程序如下面所示: port(clk:in std_logic;
clk40k,clk1:out std_logic); end fpq;
architecture behav of fpq is signal d1:std_logic;
„„„„„定义d1、d2为信号 signal d2:std_logic;
begin
p1:process(clk)
variable q1:integer range 0 to 299;\\\\定义一个q1为整数变量其整数范围为0~299。 begin
if clk'event and clk='1' then\\\\„„„„当时钟脉冲在上升沿并且时钟脉冲有效的时候。
if q1<299 then q1:=q1+1;d1<='0'; \\\\„„„„如果q1小于299时那么在时钟脉冲上升沿的时候q1就自动加1并且d1等于0。
else d1<='1';q1:=0; \\\\„„„„如果q1等于299的时候那么d1就等于1并且同时把q1等于0。 end if;
end if; \\\\„„„„把最终的d2赋值给clk1。
10
clk40k<=d1; end process;
p2:process(d1)
variable q2:integer range 0 to 39999; \\\\„„„„定义一个q2为整数变量其整数范围为0~3999。 begin
if d1'event and d1='1' then \\\\„„„„当上个程序d1在上升沿并且有效的时候。
if q2<39999 then q2:=q2+1;d2<='0'; \\\\„„„„如果q2小于3999时那么在d1上升沿的时候q2就自动加1并且d2等于0。
else d2<='1';q2:=0; \\\\„„„„如果q2等于3999的时候那么d2就等于1并且同时把q2等于0。 end if; end if;
clk1<=d2; \\\\„„„„把最终的d2赋值给clk1。 end process; end behav;
将分频器生成模块
图4-6 动态扫描分频模块
分频器的设计思路:为了保证分频更加准确和需要因此我们有必要进行两次分频,因为此开发板上提供的频率是12mhz在第一个进程里面进行300分频,然后将得到分出后的频率40000hz作为第二次分频的总频率,在第二个进程中在进行40000分频最终就得到了1hz的频率了。
2.2.5.2段选的基本要求
段选就是指定显示规定要显示的数值,也就是说开发板上有6个数码显示管你可以通过段选指定是其中哪一个显示那些不显示。
段选的主要程序如下: process(sel) begin
case sel is
when \"000\"=>d<=data1; \\\\„„„„当输入信号为0的时候就把data1这个数值付给输出。
when \"001\"=>d<=data2; \\\\„„„„当输入信号为1的时候就把data2
11
这个数值付给输出。
when \"010\"=>d<=data3; \\\\„„„„当输入信号为2的时候就把data3这个数值付给输出。
when \"011\"=>d<=data4; \\\\„„„„当输入信号为3的时候就把data4这个数值付给输出。
when \"100\"=>d<=data5; \\\\„„„„当输入信号为4的时候就把data5这个数值付给输出。
when \"101\"=>d<=data6; \\\\„„„„当输入信号为5的时候就把data6这个数值付给输出。
when others=>d<=\"0000\";\\\\„„„„当输入信号为其他的情况的时候就把0这个数值付给输出。 end case;
将段选生成模块为
图4-7段选模块
2.2.5.3位选计数模块
位选计数的主要程序为: process(clk) begin
if clk'event and clk='1' then\\\\„„„„当时钟脉冲的上升沿到来的并且有效的时候。
if q=\"101\" then\\\\„„„„如果q等于5的时候。 q<=\"000\";\\\\„„„„然后就把q等于0。 else q<=q+1; \\\\„„„„如果不等于5的话那就在时钟脉冲上。升沿到来并且有效的时候自动加1. end if;
位选计数的设计思想:当计数达到5的时候也就是(0、1、2、3、4、5、)六位就代表的六个数码管,它主要是给位选和段选提供相应的数码管显示和亮的一组计数,这就为动态扫描正常工作提供了有力的保障。
位选的主要程序为: case a is
when \"000\"=>q<=\"011111\";\\\\当计数输入信号为000的时候
12
数码管只有第一个亮。
when \"001\"=>q<=\"101111\";\\\\当计数输入信号为001的时候数码管只有第二个亮。
when \"010\"=>q<=\"110111\";\\\\当计数输入信号为010的时候数码管只有第三个亮。
when \"011\"=>q<=\"111011\";\\\\当计数输入信号为011的时候数码管只有第四个亮。
when \"100\"=>q<=\"111101\";\\\\当计数输入信号为100的时候数码管只有第五个亮。
when \"101\"=>q<=\"111110\";\\\\当计数输入信号为101的时候数码管只有第六个亮。
when others=>q<=\"111111\";\\\\当计数输入信号为其他情况的时候数码管全部都不亮。
2.2.6锁存模块
锁存模块的主要程序:
signal dn1,dn2,dn3:std_logic; \\\\定义dn1,dn2,dn3为信号。 begin
process(oe,clr) begin
if clr='1' then\\\\当清零有效时。
dn1<='0';dn2<='0';dn3<='0'; \\\\清零有效把输出全部赋值为0。 elsif oe='1' the\\\\当反馈信号有效时
dn1<=dn1;dn2<=dn2;dn3<=dn3; \\\\将输出信号一直保持下去。
else dn1<=d1;dn2<=d2;dn3<=d3; \\\\如果反馈信号无效的时候就把输入赋给输出。
反馈模块成为为: process(d1,d2,d3) begin
if d1='1' or d2='1' or d3='1' then q<='1'; \\ else q<='0';
将他们生成模块如下图所示:
13
图4-8锁存器模块
他们的仿真波形为:
3.2 程序清单
5 结束语
14
无论是设计通讯、消费、计算机或工业应用,MAXⅡ器件都能够为成本和功率受限的控制通道应用提供所需的功能。MAXⅡ更低的价格,更低的功率和更大的容量使其成为复杂控制应用的理想方案,包括以往不可能在CPLD中实现的 新应用。
MAXⅡ采用了全新CPLD体系结构,比以往的MAXⅡ器件有重大改进1、价格减半2、功耗降至十分之一3、容量增加四倍4、性能增加二倍。这些优势允许设计者将多个控制应用集成到单个器件中。如图1所示,主要的控制通道功能可分为四类:I/O扩张、接口桥接、上电顺序和系统配置。MAXⅡ器件基于0.18um Flash工艺,是即用型和非易失器件,成本不到上一代MAXⅡ器件的功能和封装。
参考文献
[1]潘松、黄继业。EDA技术实用教程。北京:科学出版社,2002 [2]杨刚 李雷.数字电子技术基础教程[M].北京:科技出版社,2001 [3]赵立民。可编程逻辑器与数字系统设计。北京:机械工业出版社,2003
15
全部源程序
抢答鉴别模块 LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY QDJB IS
PORT(CLR: IN STD_LOGIC;
A,B,C,D,E,F,G,H:IN STD_LOGIC;
X:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); STATES:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); zubie:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SOUND:OUT STD_LOGIC); END ENTITY QDJB;
ARCHITECTURE QDJB_ARC OF QDJB IS
CONSTANT W1: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00000001\"; CONSTANT W2: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00000010\"; CONSTANT W3: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00000100\"; CONSTANT W4: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00001000\"; CONSTANT W5: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00010000\"; CONSTANT W6: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"00100000\"; CONSTANT W7: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"01000000\"; CONSTANT W8: STD_LOGIC_VECTOR(7 DOWNTO 0):=\"10000000\"; BEGIN
PROCESS(CLR,A,B,C,D,E,F,G,H) IS BEGIN
IF CLR='1' THEN STATES<=\"00000000\";
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
ELSIF (A='1'AND B='0'AND C='0'AND D='0'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='1';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W1; SOUND<='1';zubie<=\"0001\";
ELSIF (A='0'AND B='1'AND C='0'AND D='0'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='1';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W2; SOUND<='1';zubie<=\"0010\";
ELSIF (A='0'AND B='0'AND C='1'AND D='0'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='1';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0'
16
;X(7)<='0';
STATES<=W3; SOUND<='1';zubie<=\"0011\";
ELSIF (A='0'AND B='0'AND C='0'AND D='1'AND E='0'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='1';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W4; SOUND<='1';zubie<=\"0100\";
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='1'AND F='0'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='1';X(5)<='0';X(6)<='0';X(7)<='0';
STATES<=W5; SOUND<='1';zubie<=\"0101\";
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='0'AND F='1'AND G='0'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='1';X(6)<='0';X(7)<='0';
STATES<=W6; SOUND<='1';zubie<=\"0110\";
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='0'AND F='0'AND G='1'AND H='0') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='1';X(7)<='0';
STATES<=W7; SOUND<='1';zubie<=\"0111\";
ELSIF (A='0'AND B='0'AND C='0'AND D='0'AND E='0'AND F='0'AND G='1'AND H='1') THEN
X(0)<='0';X(1)<='0';X(2)<='0';X(3)<='0';X(4)<='0';X(5)<='0';X(6)<='0';X(7)<='1';
STATES<=W8; SOUND<='1';zubie<=\"1000\"; END IF; END PROCESS;
END ARCHITECTURE QDJB_ARC; 生成模块是: 锁存模块为: library ieee;
use ieee.std_logic_11.all; entity sc is
port(d1,d2,d3,d4,d5,d6,d7,d8,clr,oe:in std_logic; q1,q2,q3,q4,q5,q6,q7,q8:out std_logic); end sc;
architecture behav of sc is
17
signal dn1,dn2,dn3,dn4,dn5,dn6,dn7,dn8:std_logic; begin
process(oe,clr) begin
if clr='1' then
dn1<='0';dn2<='0';dn3<='0'; elsif oe='1' then
dn1<=dn1;dn2<=dn2;dn3<=dn3;dn4<=dn4;dn5<=dn5;dn6<=dn6;dn7<=dn7;dn8<=dn8; else
dn1<=d1;dn2<=d2;dn3<=d3;dn4<=d4;dn5<=d5;dn6<=d6;dn7<=d7;dn8<=d8; end if;
end process;
q1<=dn1;q2<=dn2;q3<=dn3;q4<=dn4;q5<=dn5;q6<=dn6;q7<=dn7;q8<=dn8; end behav; library ieee;
use ieee.std_logic_11.all; entity fankui is
port(d1,d2,d3,d4,d5,d6,d7,d8: in std_logic; q:out std_logic); end fankui;
architecture behav of fankui is begin
process(d1,d2,d3) begin
if d1='1' or d2='1' or d3='1' or d4='1' or d5='1' or d6='1' or d7='1' or d8='1'then q<='1'; else q<='0'; end if;
end process; end behav; 生成模块为: 计分选择模块: LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JFQ IS
PORT(RST: IN STD_LOGIC; clk: IN STD_LOGIC;
CHOS: IN STD_LOGIC_VECTOR(7 DOWNTO 0); add: in std_logic; jian: in std_logic;
mark_1h,mark_1m,mark_1l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); mark_2h,mark_2m,mark_2l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
18
mark_3h,mark_3m,mark_3l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); mark_4h,mark_4m,mark_4l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); mark_5h,mark_5m,mark_5l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); mark_6h,mark_6m,mark_6l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); mark_7h,mark_7m,mark_7l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); mark_8h,mark_8m,mark_8l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY JFQ ;
ARCHITECTURE ART OF JFQ IS
SIGNAL cnt_1h,cnt_1m,cnt_1l: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL cnt_2h,cnt_2m,cnt_2l: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL cnt_3h,cnt_3m,cnt_3l: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL cnt_4h,cnt_4m,cnt_4l: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL cnt_5h,cnt_5m,cnt_5l: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL cnt_6h,cnt_6m,cnt_6l: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL cnt_7h,cnt_7m,cnt_7l: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL cnt_8h,cnt_8m,cnt_8l: STD_LOGIC_VECTOR(3 DOWNTO 0);
begin
PROCESS(RST,clk,chos) BEGIN
IF (clk'EVENT AND clk='1') THEN IF RST='1' THEN
cnt_1h<=\"0001\";cnt_1m<=\"0000\"; cnt_1l<=\"0000\"; cnt_2h<=\"0001\";cnt_2m<=\"0000\"; cnt_2l<=\"0000\"; cnt_3h<=\"0001\";cnt_3m<=\"0000\"; cnt_3l<=\"0000\"; cnt_4h<=\"0001\";cnt_4m<=\"0000\"; cnt_4l<=\"0000\"; cnt_5h<=\"0001\";cnt_5m<=\"0000\"; cnt_5l<=\"0000\"; cnt_6h<=\"0001\";cnt_6m<=\"0000\"; cnt_6l<=\"0000\"; cnt_7h<=\"0001\";cnt_7m<=\"0000\"; cnt_7l<=\"0000\"; cnt_8h<=\"0001\";cnt_8m<=\"0000\"; cnt_8l<=\"0000\"; ELSIF CHOS=\"00000001\" THEN if add='1' then
IF cnt_1m=\"1001\" THEN cnt_1m<=\"0000\";
IF cnt_1h=\"1001\" THEN cnt_1h<=\"0000\"; ELSE cnt_1h<=cnt_1h+1; END IF;
ELSE cnt_1m<=cnt_1m+1; END IF;
elsif jian='1' then
IF cnt_1m=\"0000\" THEN cnt_1m<=\"1001\";cnt_1h<=cnt_1h-1; ELSE cnt_1m<=cnt_1m-1; END IF; END IF;
ELSIF CHOS=\"00000010\" THEN
19
if add='1' then
IF cnt_2m=\"1001\" THEN cnt_2m<=\"0000\";
IF cnt_2h=\"1001\" THEN cnt_2h<=\"0000\"; ELSE cnt_2h<=cnt_2h+1; END IF;
ELSE cnt_2m<=cnt_2m+1; END IF;
elsif jian='1' then
IF cnt_2m=\"0000\" THEN cnt_2m<=\"1001\";cnt_2h<=cnt_2h-1; ELSE cnt_2m<=cnt_2m-1; END IF; END IF;
ELSIF CHOS=\"00000100\" THEN if add='1' then
IF cnt_3m=\"1001\" THEN cnt_3m<=\"0000\"; IF cnt_3h=\"1001\" THEN cnt_3h<=\"0000\";
ELSE cnt_3h<=cnt_3h+1; END IF;
ELSE cnt_3m<=cnt_3m+1; END IF;
elsif jian='1' then
IF cnt_3m=\"0000\" THEN cnt_3m<=\"1001\";cnt_3h<=cnt_3h-1; ELSE cnt_3m<=cnt_3m-1; END IF; END IF;
ELSIF CHOS=\"00001000\" THEN if add='1' then
IF cnt_4m=\"1001\" THEN cnt_4m<=\"0000\"; IF cnt_4h=\"1001\" THEN cnt_4h<=\"0000\"; ELSE cnt_4h<=cnt_4h+1; END IF;
ELSE cnt_4m<=cnt_4m+1; END IF;
elsif jian='1' then
IF cnt_4m=\"0000\" THEN cnt_4m<=\"1001\"; cnt_4h<=cnt_4h-1; ELSE cnt_4m<=cnt_4m-1; END IF; END IF;
elsif chos=\"00010000\" then if add='1' then
IF cnt_5m=\"1001\" THEN cnt_5m<=\"0000\"; IF cnt_5h=\"1001\" THEN cnt_5h<=\"0000\"; ELSE cnt_5h<=cnt_5h+1;
20
END IF;
ELSE cnt_5m<=cnt_5m+1; END IF;
elsif jian='1' then
IF cnt_5m=\"0000\" THEN cnt_5m<=\"1001\";cnt_5h<=cnt_5h-1; ELSE cnt_5m<=cnt_5m-1; END IF; END IF;
elsif chos=\"00100000\" then if add='1' then
IF cnt_6m=\"1001\" THEN cnt_6m<=\"0000\"; IF cnt_6h=\"1001\" THEN cnt_6h<=\"0000\"; ELSE cnt_6h<=cnt_6h+1; END IF;
ELSE cnt_6m<=cnt_6m+1; END IF;
elsif jian='1' then
IF cnt_6m=\"0000\" THEN cnt_6m<=\"1001\";cnt_6h<=cnt_6h-1; ELSE cnt_6m<=cnt_6m-1; END IF; END IF;
elsif chos=\"01000000\" then if add='1' then
IF cnt_7m=\"1001\" THEN cnt_7m<=\"0000\"; IF cnt_7h=\"1001\" THEN cnt_7h<=\"0000\"; ELSE cnt_7h<=cnt_7h+1; END IF;
ELSE cnt_7m<=cnt_7m+1; END IF;
elsif jian='1' then
IF cnt_7m=\"0000\" THEN cnt_7m<=\"1001\";cnt_7h<=cnt_7h-1; ELSE cnt_7m<=cnt_7m-1; END IF; end if;
elsif chos=\"10000000\" then if add='1' then
IF cnt_8m=\"1001\" THEN cnt_8m<=\"0000\";
IF cnt_8h=\"1001\" THEN cnt_8h<=\"0000\"; ELSE cnt_8h<=cnt_8h+1; END IF;
ELSE cnt_8m<=cnt_8m+1; END IF;
elsif jian='1' then
IF cnt_8m=\"0000\" THEN cnt_8m<=\"1001\";cnt_8h<=cnt_8h-1;
21
ELSE cnt_8m<=cnt_8m-1; END IF; END IF; END IF; end if;
END PROCESS;
mark_1h<=cnt_1h; mark_1m<=cnt_1m;mark_1l<=\"0000\"; mark_2h<=cnt_2h; mark_2m<=cnt_2m;mark_2l<=\"0000\"; mark_3h<=cnt_3h; mark_3m<=cnt_3m;mark_3l<=\"0000\"; mark_4h<=cnt_4h; mark_4m<=cnt_4m;mark_4l<=\"0000\"; mark_5h<=cnt_5h; mark_5m<=cnt_5m;mark_5l<=\"0000\"; mark_6h<=cnt_6h; mark_6m<=cnt_6m;mark_6l<=\"0000\"; mark_7h<=cnt_7h; mark_7m<=cnt_7m;mark_7l<=\"0000\"; mark_8h<=cnt_8h; mark_8m<=cnt_8m;mark_8l<=\"0000\"; END ART;
library ieee;
use ieee.std_logic_11.all;
use ieee.std_logic_UNSIGNED.ALL; entity xzq is
port(chos:in std_logic_VECTOR(7 DOWNTO 0);
mark_1h,mark_1m,mark_1l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_2h,mark_2m,mark_2l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_3h,mark_3m,mark_3l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_4h,mark_4m,mark_4l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_5h,mark_5m,mark_5l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_6h,mark_6m,mark_6l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_7h,mark_7m,mark_7l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_8h,mark_8m,mark_8l : in STD_LOGIC_VECTOR(3 DOWNTO 0); mark_h,mark_m,mark_l : out std_logic_vector(3 downto 0)); end entity xzq;
architecture one of xzq is begin
process(chos) begin
case chos is
when\"00000001\"=>mark_h<=mark_1h;mark_m<=mark_1m;mark_l<=mark_1l; when\"00000010\"=>mark_h<=mark_2h;mark_m<=mark_2m;mark_l<=mark_2l; when\"00000100\"=>mark_h<=mark_3h;mark_m<=mark_3m;mark_l<=mark_3l; when\"00001000\"=>mark_h<=mark_4h;mark_m<=mark_4m;mark_l<=mark_4l; when\"00010000\"=>mark_h<=mark_5h;mark_m<=mark_5m;mark_l<=mark_5l; when\"00100000\"=>mark_h<=mark_6h;mark_m<=mark_6m;mark_l<=mark_6l; when\"01000000\"=>mark_h<=mark_7h;mark_m<=mark_7m;mark_l<=mark_7l; when\"10000000\"=>mark_h<=mark_8h;mark_m<=mark_8m;mark_l<=mark_8l;
22
when others=>mark_h<=\"1111\";mark_m<=\"1111\";mark_l<=\"1111\"; end case; end process; end one;
倒计时模块为: LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DJS IS
PORT(CLR,CLK,EN:IN STD_LOGIC;
H,L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SOUND:OUT STD_LOGIC); END DJS;
ARCHITECTURE DJS_ARC OF DJS IS BEGIN
PROCESS(CLK,EN)
VARIABLE HH,LL:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF CLR='0' THEN HH:=\"0011\"; LL:=\"0000\"; ELSE
IF CLK'EVENT AND CLK='1'THEN IF EN='0'THEN
IF LL=0 AND HH=0 THEN SOUND<='1';
ELSIF LL=0 THEN LL:=\"1001\"; HH:=HH-1; ELSE
LL:=LL-1; END IF; ELSE
SOUND<='1'; HH:=\"0011\"; LL:=\"0000\"; END IF; END IF; END IF; H<=HH; L<=LL;
END PROCESS; END DJS_ARC; 动态扫描模块:
23
library ieee;
use ieee.std_logic_11.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity fpq is
port(clk:in std_logic;
clk40k,clk1:out std_logic); end fpq;
architecture behav of fpq is signal d1:std_logic; signal d2:std_logic; begin
p1:process(clk)
variable q1:integer range 0 to 299; begin
if clk'event and clk='1' then
if q1<299 then q1:=q1+1;d1<='0'; else d1<='1';q1:=0; end if; end if; clk40k<=d1; end process;
p2:process(d1)
variable q2:integer range 0 to 39999; begin
if d1'event and d1='1' then
if q2<39999 then q2:=q2+1;d2<='0'; else d2<='1';q2:=0; end if; end if; clk1<=d2; end process; end behav;
library ieee;
use ieee.std_logic_11.all; entity duanxuan is
port(sel:in std_logic_vector(2 downto 0);
data1,data2,data3,data4,data5,data6:in std_logic_vector(3 downto 0);
d:out std_logic_vector(3 downto 0)); end duanxuan;
architecture a of duanxuan is
24
begin
process(sel) begin
case sel is
when \"000\"=>d<=data1; when \"001\"=>d<=data2; when \"010\"=>d<=data3; when \"011\"=>d<=data4; when \"100\"=>d<=data5; when \"101\"=>d<=data6; when others=>d<=\"0000\"; end case; end process; end a;
library ieee;
use ieee.std_logic_11.all;
use ieee.std_logic_unsigned.all; entity weixuanjishu is port(clk:in std_logic;
cout:out std_logic_vector(2 downto 0)); end weixuanjishu;
architecture behav of weixuanjishu is signal q:std_logic_vector(2 downto 0); begin
process(clk) begin
if clk'event and clk='1' then if q=\"101\" then q<=\"000\"; else q<=q+1; end if; end if; end process; cout<=q; end behav;
library ieee;
use ieee.std_logic_11.all; entity weixuan is
port(a:in std_logic_vector(2 downto 0); q:out std_logic_vector(5 downto 0)); end weixuan;
architecture behav of weixuan is
25
begin
process(a) begin
case a is
when \"000\"=>q<=\"011111\"; when \"001\"=>q<=\"101111\"; when \"010\"=>q<=\"110111\"; when \"011\"=>q<=\"111011\"; when \"100\"=>q<=\"111101\"; when \"101\"=>q<=\"111110\"; when others=>q<=\"111111\"; end case; end process; end behav;
译码器模块: LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY YMQ IS
PORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END YMQ;
ARCHITECTURE ART OF YMQ IS BEGIN
PROCESS(AIN4) BEGIN
CASE AIN4 IS
WHEN \"0000\"=>DOUT7<=\"1111110\"; --0 WHEN \"0001\"=>DOUT7<=\"0110000\"; --1 WHEN \"0010\"=>DOUT7<=\"1101101\"; --2 WHEN \"0011\"=>DOUT7<=\"1111001\"; --3 WHEN \"0100\"=>DOUT7<=\"0110011\"; --4 WHEN \"0101\"=>DOUT7<=\"1011011\"; --5 WHEN \"0110\"=>DOUT7<=\"1011111\"; --6 WHEN \"0111\"=>DOUT7<=\"1110000\"; --7 WHEN \"1000\"=>DOUT7<=\"1111111\"; --8 WHEN \"1001\"=>DOUT7<=\"1111011\"; --9 WHEN OTHERS=>DOUT7<=\"0000000\"; END CASE; END PROCESS;
END ARCHITECTURE ART;
26
27
因篇幅问题不能全部显示,请点此查看更多更全内容