数字显示电路设计Word文档下载推荐.docx
《数字显示电路设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字显示电路设计Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
第6-8天:
完成课程设计的初稿,并提交指导教师。
第9-14天:
完成课程设计的修改,最终定稿。
主要参考资料
[1]路勇.电子电路实验及仿真[M].北京:
北京交通大学出版社,2010.
[2]孟涛.电工电子EDA实践教程[M].北京:
机械工业出版社,2010.
[3]高吉祥.电子技术基础实验与课程设计[M].北京:
电子工业出版社,2005
[4]候建军.电子技术基础实验、综合设计实验与课程设计[M].北京:
高等教育出版社,2007.
指导教师签字
教研室主任签字
摘要
采用动态扫描的方式实现设计要求。
动态扫描显示需要由两组信号来控制:
一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;
另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。
因此在同一时刻如果各位数码管的位选线都处于选通状态的话,6位数码管将显示相同的字符。
若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。
同时,段线上输出相应位要显示字符的字型码。
这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。
MAX+PLUSII是一个完全集成化的可编程逻辑环境,能满足用户各种各样的设计需要。
它支持Altera公司不同结构的器件,可在多平台上运行。
MAX+PLUSII具有突出的灵活性和高效性,为设计者提供了多种可自由选择的设计方法和工具。
丰富的图形界面,可随时访问的在线帮助文档,使用户能够快速轻松地掌握和使用MAX+PLUSII软件。
MAX+PLUSII具有的强大功能极大地减轻了设计者的负担,使设计者可以快速完成所需的设计,使用该软件,用户从开始设计逻辑电路到完成器件下载编程一般只需要数小时时间,其中设计的编译时间往往仅需数分钟。
用于可在一个工作日内完成实现设计项目的多次修改,直至最终设计定型。
MAX+PLUSII开发系统众多突出的特点,使它深受广大用户的青睐。
关键词:
数字显示电路;
动态扫描;
段码
第一章设计任务
1.1项目名称:
设计数字显示电路
本项目的主要内容是设计并实现8位数码管轮流显示8个数字。
该电路将所学的数字电路与系统大部分知识和VHDL语言结合。
1.2项目设计说明
1.2.1设计任务和要求
A、用CPLD设计一个八位数码管显示电路;
B、8位数码管轮流显示8个数字,选择合适的时钟脉冲频率实现8个数码管同时被点亮的视觉效果。
1.2.2进度安排
第一周至第二周每周二2课时,共10课时。
具体安排为:
第一周至第三周6课时自行设计、第四周实验结果验收、第五周交报告并进行答辩。
1.3项目总体功能模块图
第二章需求分析
2.1问题基本描述
基本系统流程图如下
2.2系统模块分解
动态扫描显示电路的主要组成为:
计数器、显示译码器、32选4数据选择器、扫描电路组成。
2.3系统各模块功能的基本要求
1、计数器:
CN8模块输入信号是时钟脉clk,每遇到一个时钟脉冲clk上升沿时,内部累加器便加一,再把累加器所得结果与2进制数的形式输出。
要显示8位数字,所以用3位2进制数作为输出。
输出信号为cout[0..2]。
2、八选一数据选择模块:
模块输入信号一个是数据选择器的地址码SEL[2..0],另一部分是数据信息A[3..0]~F[3..0].地址码是SEL[2..0]来自时钟脉冲计数器CN6,由地址码SEL[2..0]决定输出哪个输入数据。
输出信号是q[3..0];
3、扫描显示译码器:
完成对7字段数码管显示的控制。
第三章设计原理
3.1设计原理
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。
总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环一次点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率较大,将看不到闪烁现象。
将会看到6个数码管持续稳定点亮的现象。
3.2MAXPLUSII介绍
MAX+PLUSII支持Altera公司的Classic、ACEX1K、MAX3000、MAX5000、MAX7000、MAX9000、FLEX6000和FLEX10K等系列的可编程逻辑器件,门数为600~250000门,提供了工业界真正与结构无关的可编程逻辑设计环境。
MAX+PLUSII的编辑器还提供了强大的逻辑综合与优化功能以减轻用户的设计负担。
MAX+PLUSII软件的设计输入、处理、校验功能完全集成于可编程逻辑开发工具内,从而可以更快的进行调试,缩短开发周期。
设计者可以从各种设计输入、编辑、校验及器件编程工具中作出选择,形成用户风格的开发环境,必要时还可以在保留原始功能的基础上添加新的功能。
由于MAX+PLUSII支持多种器件系列,设计者无须学习新的开发工具即可对新结构的器件进行开发。
MAX+PLUSII软件支持多种HDL的设计输入,包括标准的VHDL、VerilogHDL及Altera公司自己开发的硬件描述语言AHDL。
MAX+PLUSII由设计输入、项目处理、项目检验和器件编程等4部分组成,所有这些部分都集成在一个可视化的操作环境下。
MAX+PLUSII管理窗口包括项目路径、工作文件标题条、MAX+PLUSII菜单条、快捷工具条和工作区等几个部分。
设置好授权码后,启动MAX+PLUSII即进入MAX+PLUSII管理窗口,如图6.4所示。
MAX+PLUSII还为用户提供了功能强大的在线帮助功能。
通过使用在线帮助,用户可以获得设计中所需的全部信息。
第四章系统功能模块设计
4.1计数(数码管位选控制)模块
4.1.1数码管位选控制模块流程图
4.1.2输入输出引脚及其功能说明
CN8模块输入信号是时钟脉冲clk,每遇到一个时钟脉冲clk上升沿时,内部累加器便加一,再把累加器所得结果与2进制数的形式输出。
要显示八位数字,所以用3位2进制数作为输出。
总之是通过输入输出信号来对数码管进行位选控制。
4.1.3程序代码实现
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycn8is
port(clr,start,clk:
inbit;
cout:
outstd_logic_vector(2downto0));
endcn8;
architectureaofcn8is
signaltemp:
std_logic_vector(2downto0);
begin
process(clk,clr)
begin
ifclr='
0'
then
temp<
="
000"
;
cout<
='
elsif(clk'
eventandclk='
1'
)then
ifstart='
iftemp>
111"
else
=temp+1;
endif;
endprocess;
=temp;
enda;
4.2数据选择模块
4.2.1.数据选择模(八选一模块)块流程图
4.2.2输入输出引脚及其功能说明
SEL81模块输入信号一个是数据选择器SEL81的地址码SEL[2..0],另一部分是数据信息A[3..0]~H[3..0].地址码是SEL[2..0]来自时钟脉冲计数器CN8,由地址码SEL[2..0]决定输出哪个输入数据。
输出信号是q[3..0]。
4.2.3程序代码实现
Libraryieee;
Useieee.std_logic_1164.all;
Entitysel81is
Port(sel:
instd_logic_vector(2downto0);
A,b,c,d,e,f,g,h:
instd_logic_vector(3downto0);
Q:
outstd_logic_vector(3downto0));
Endsel81;
Architecturertlofsel81is
begin
Process(a,b,c,d,e,f,g,h,sel)
Variablecout:
std_logic_vector(3downto0);
Begin
Case(sel)is
When"
=>
cout:
=a;
001"
=b;
When"
010"
=c;
011"
=d;
100"
=e;
101"
=f;
110"
=g;
Whenothers=>
=h;
Endcase;
Q<
=cout;
Endprocess;
Endrtl;
4.3七段译码器模块
4.3.1七段译码器模块模块流程图
4.3.2输入输出引脚及其功能说明
DISP模块是七段译码器,将输入的4位二进制数转换为数码显示管对应的数字。
例如输入为4进制数0000的时候,使数码显示管显示0,则要七段译码器输出为011111。
即g段为0,g段发光二极管不亮,其它发光二极管被点亮,显示效果为0。
DISP模块输入信号D[3..0],输出信号是Q[6..0]。
4.3.3程序代码实现
Entitydispis
port(d:
q:
outstd_logic_vector(6downto0));
enddisp;
Architecturertlofdispis
Begin
Process(d)
Casedis
0000"
q<
0111111"
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
0101"
1101101"
0110"
1111101"
0111"
0100111"
1000"
1111111"
Whenothers=>
1101111"
第五章调试并分析结果
5.1输入说明
clk时钟输入
Clr计数器清零(低电平有效)
Start打开计数器(低电平有效)
A[3..0]..H[3..0]输入要显示的数字
5.2预计输出
Cout[2..0]数码管位选控制
Q[6..0]数码管段选控制
5.3测试结果记录
同时显示0,1,2,3,4,5,6,7这八个不同的数字图形到八个数码管上。
5.4测试结果分析
输入一个时钟,驱动计数器工作。
选用模值为8的计数器,依次控制8个数码管的亮灭,使得某一时刻有且仅有一个数码管点亮,同时产生对应的,将点亮的数码管赋值显示为相应的数码予以显示。
由于扫描频率较高,8位数码管序列将显示持续稳定的0至7的数码。
第六章结论
6.1心得体会
在课程设计之前,我学过51单片机,对硬件与软件的联系有初步的了解,其次我的题目相对较简单---设计8位数码管动态显示电路,所以上手特别的快。
在编写程序之前,我到实验室实地考察了一下试验箱,发现8位数码管实验无法实现,只能实现6位,开关实现数码管数字变换也不现实,单单8位数码管的数字就需要32个开关控制,试验箱远远达不到这个要求,因此,我就设计全软件来控制并且做得非常成功。
最后验收时听老师分析,全软件的程序有很大的缺陷,然后对我的设计又进一步的改进,用开关来进行控制。
总之,通过这次课程设计,我对EDA技术有了更进一步的了解。
也知道了如何把vhdl的程序装到实验的硬件中,然后如何的连接实验箱上的管脚。
通过在上网查询本次实验相关资料。
丰富了对EDA的了解。
参考文献
附录
课程设计中的程序如下:
useieee.std_logic_unsigned.all;
entitydiv2kis
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
end;
architectureaofdiv2kis
signalcnt:
integerrange0to999;
signalclk_tmp:
std_logic;
process(clk_in)
begin
if(clk_in'
eventandclk_in='
ifcnt=999then
cnt<
=0;
clk_tmp<
=notclk_tmp;
else
=cnt+1;
endif;
endif;
endprocess;
clk_out<
=clk_tmp;
------B
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
--USEIEEE.STD_numeric_std
ENTITYscan_ledIS
PORT(CLK:
INSTD_LOGIC;
SG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
END;
ARCHITECTUREarcOFscan_ledIS
componentdiv2k
port(clk_in:
clk_out:
endcomponent;
SIGNALCNT6:
INTEGERRANGE0TO5;
SIGNALA:
SIGNALCOUNT:
INTEGERRANGE0TO5000:
=0;
SIGNAlFLAG:
INTEGERRANGE0TO10:
SIGNAlFLAG_A:
INTEGERRANGE0TO15;
SIGNALclk_tmp:
STD_LOGIC;
BEGIN
u1:
div2kportmap(clk_in=>
CLK,clk_out=>
clk_tmp);
-------------3线至6线译码器----A为位码-------------
P1:
process(CNT6)
BEGIN
CASECNT6IS
WHEN0=>
BT<
="
;
A<
=0;
WHEN1=>
=1;
WHEN2=>
=2;
WHEN3=>
=3;
WHEN4=>
=4;
WHEN5=>
=5;
WHENOTHERS=>
NULL;
ENDCASE;
ENDPROCESSP1;
-------------------------拓展模块-------------------------------------
P2:
process(clk_tmp)
IFclk_tmp'
EVENTANDclk_tmp='
THEN--实现模6计数器
ifCNT6=5then
CNT6<
elseCNT6<
=CNT6+1;
IF(FLAG=11)THEN--设置标志
FLAG<
ENDIF;
IFCOUNT=5000THEN--另一个时钟
COUNT<
FLAG<
=FLAG+1;
--当记满5000时左移动一位
ELSE
=COUNT+1;
ENDIF;
ENDPROCESSP2;
P3:
process(A)
BEGIN
FLAG_A<
=(A+FLAG);
--0-F循环显示
CASEFLAG_AIS
WHEN0=>
SG<
1111110"
--0--共阴abcdefg
WHEN1=>
0110000"
--1
WHEN2=>
--2
WHEN3=>
1111001"
--3
WHEN4=>
0110011"
--4
WHEN5=>
--5
WHEN6=>
1011111"
--6
WHEN7=>
1110000"
--7
WHEN8=>
--8
WHEN9=>
1111011"
--9
WHEN10=>
1110111"
--A
WHEN11=>
0011111"
--B
WHEN12=>
1001110"
--C
WHEN13=>
0111101"
--D
WHEN14=>
--E
WHEN15=>
--F
WHENOTHERS=>
ENDPROCESSP3;
ENDarc;
课程设计成绩评定表
院系:
物理与电子工程学院班级:
二班姓名:
李硕学号:
2020341239
项目
分值
优秀
(x≥90%)
良好
(90%>
x≥80%)
中等
(80%>
x≥70%)
及格
(70%>
x≥60%)
不及格(x<
60%)
评分
参考标准
平时考核
20
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作。
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务。