数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告Word文件下载.doc
- 文档编号:14575876
- 上传时间:2022-10-23
- 格式:DOC
- 页数:11
- 大小:425.50KB
数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告Word文件下载.doc
《数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告Word文件下载.doc(11页珍藏版)》请在冰豆网上搜索。
一.实验目的 3
二.实验所用仪器及元器件 3
三.实验任务要求 3
四.实验设计思路及过程 3
1.实验原理 3
2.设计思路 4
3.VHDL代码 4
五.仿真波形及分析 8
1.仿真波形 8
2.波形分析 9
六.故障及问题分析 9
1.频率设置问题 9
2.触发问题 10
七.本实验总结与结论 10
八.学期总结 10
一.实验目的
1.掌握VHDL语言的语法规范,掌握时序电路描述方法
2.掌握多个数码管动态扫描显示的原理及设计方法
二.实验所用仪器及元器件
1.计算机
2.直流稳压电源
3.数字系统与逻辑设计实验开发板
三.实验任务要求
用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。
四.实验设计思路及过程
1.实验原理
为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。
动态扫描显示需要由两组信号来控制:
一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;
另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。
因此在同一时刻如果各位数码管的位选线都处于选通状态的话,6位数码管将显示相同的字符。
若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。
同时,段线上输出相应位要显示字符的字型码。
这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。
总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环一次点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
6个数码管则需要50*6=300Hz以上才能看到持续稳定点亮的现象。
2.设计思路
设计时序电路,输入时钟经过一个分频器,产生2kHz的扫描信号作为时钟,驱动计数器工作。
选用模值为6的计数器,通过一个6路的数据分配器,产生段码,依次控制6个LED的亮灭,使得某一时刻有且仅有一个LED点亮,同时产生对应的,将点亮的LED数码管赋值显示为相应的数码予以显示。
由于扫描频率较高,6位LED数码管序列将显示持续稳定的0至5的数码。
3.VHDL代码
①实现代码
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytest1201is//这是第十二个实验,test1201为文件名
port(clk_in:
instd_logic;
//定义三个端口,一个时钟输入,一个控
cat:
outstd_logic_vector(5downto0);
//制哪个数码管工作的cat控制信号,一
a_out:
outstd_logic_vector(6downto0));
//个控制数码管上的哪些灯亮
endtest1201;
architectureaoftest1201is
signaltmp:
std_logic_vector(6downto0);
//定义三个临时信号
signalcnt:
integerrange0to149999;
//计数值从0到149999
signalcat_tmp:
std_logic_vector(5downto0);
//cat控制信号的临时信号
begin
process(clk_in)
begin
if(clk_in'
eventandclk_in='
1'
)then//上升沿有效
ifcnt=24999then//25000个周期为一个周期,实
cat_tmp<
="
011111"
;
//现1KHZ分频的功能。
0-249
cnt<
=cnt+1;
//99时第一个数码管亮
elsifcnt=49999then//25000-49999时第二个数码管亮
101111"
//以下依此类推
elsifcnt=74999then
110111"
elsifcnt=99999then
111011"
elsifcnt=124999then
111101"
elsifcnt=149999then
111110"
=0;
elsecnt<
endif;
endif;
casecat_tmpis//根据cat_tmp来控制哪个数码管工作
when"
=>
tmp<
1111110"
//第一个数码管显示0.需要abcdef亮
0110000"
//第二个数码管显示1,bc亮
1101101"
//以下依此类推
1111001"
0110011"
1011011"
whenothers=>
0000000"
endcase;
endprocess;
cat<
=cat_tmp;
a_out<
=tmp;
enda;
②代码说明
通过分频器输入产生选通脉冲,控制0至5号LED数码管依次亮灭,同时使用数码显示信号使得数码管显示相应数码。
实现时通过连接引入分频信号,通过数据选择器选择数码管。
计数器信号触发数据选择器,赋值给位码触发数码管显示数码。
最终实现动态扫描显示数字序列。
五.仿真波形及分析
1.仿真波形
2.波形分析
由波形可见,随着时钟模六计数的不断重复,0至5号LED数码管依次打开,其余管熄灭,同时,数码管显示数字从0至5依次出现,两者保持同步,即n号管亮时显示的数码为n。
具体来说cat0为低电平时第一个数码管应该显示0,即abcdef为高电平,亮,g为低电平灭;
cat1为低电平时,第一个数码管应该显示1,即bc为高电平亮,其余为低电平灭;
依此类推。
这样每计数6次循环一次,可知仿真结果正确。
当扫描速度很快时,人眼将能看到持续稳定的0至5号数码显示。
在实验室实际测试时,下载到电路板测试成功,完成实验任务。
六.故障及问题分析
1.频率设置问题
当频率设置过高时,计数周期将大大增加,每个周期内的扫描次数也增加,但考虑到人眼的分辨能力,频率只需大于300Hz即可,过大将增大系统开销,故采用1kHz分频器。
2.触发问题
刚开始编写代码时,没有考虑到下载到实验板的问题,没有设置分频电路,而且cat控制端也没有设置为自动分为六路,而是把它做成了6个输入端。
后来想到如果要下载到实验板上时不可能靠手动去扳动开关让其控制数码管的工作与否。
于是想到实验板上给出的clk是50MHZ,结合人眼的视觉暂留效应,最后将频率定为1KHz。
设置了一个cnt信号用来计数,当cnt=24999时,即clk_in有25000个上升沿时,cat0为低电平,其余为高电平;
当cnt=49999时,即clk_in有50000个上升沿后,cat1为低电平,其余为高电平;
于是就实现了1个50MHz的信号分成六路1KHz的时钟信号。
然后根据每个数码管需要显示的数字来进行赋值。
七.本实验总结与结论
1.经过逻辑分析,编写VHDL代码,然后调试,进行波形仿真,最后下载到实验板实现,一系列工序之后,成功实现了本实验要求。
2.进行数字电路实验,理论分析是十分重要的一环,只有逻辑分析透彻无误了,才能用语言进行描述,进而用硬件实现。
这次实验让我对VHDL这样一门硬件描述语言有了更加深刻的认识。
语言是描述设计者逻辑思想的,有什么样的逻辑思维就会产生什么样的代码,换句话说,逻辑思维错误将直接导致描述错误,进而不能实现数字逻辑。
应该着重优化逻辑思维,才能写出优秀的硬件代码。
3.硬件描述语言的学习,不同于一般编程语言的描述,它没有汇编那样深入硬件最底层,但从硬件抽象出来的逻辑却与硬件密不可分。
编写硬件描述代码,不仅要符合基本编程语言的规范,更应该时时刻刻联系实现功能的硬件,理解时序和组合的关系,理解同步和异步的差异,理解进程和信号的流程等等,这样才能使写出的代码效率更高。
八.本课程总结
1.这学期开始了数字电路与逻辑设计课程,从理论课堂学习基本设计理论到实验课动测试数字电路参数、编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数码管 扫描 显示 控制器 设计 实现 北京邮电 大学 数字电路 实验 报告