当前位置:文档之家› 实验3 数码管扫描显示电路(1)

实验3 数码管扫描显示电路(1)

实验三数码管扫描显示电路
一、实验目的
1、掌握数码管动态扫描显示数据的原理;
2、掌握利用EDA软件和VHDL语言设计较复杂时序逻辑电路的方法;
二、实验原理
常用的显示器件有发光二极管、数码管、液晶显示器等,其中最常用的是数码管。

数码管显示数据有两种方式:静态显示方式和动态(扫描)显示方式。

所谓静态显示方式,就是将被显示的数据的BCD码过各自的4—7/8段译显示译码器译码后,分别接到显示译码器的显示驱动端a~g/p,而公共端COM则根据数据管的类型(共阴极/共阳极)分别接到GND/VCC。

静态显示的优点是控制简单,有几个数码管就用几个译码器,不必修改程序,十分简便。

但当系统所需的数码管较多时,这种方法既耗资源,又占用较多的I/O口,N个数码管需要占用7N个引脚(若需要显示小数点,则是8N个引脚)。

因此,该接法适合于系统中数码管数量不多的应用场合。

所谓动态显示方式,就是采用分时的方法,使各个数码管逐个轮流受控显示。

在轮流点亮扫描过程中,每个数码管的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各个数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

在扫描显示方式中,所有数码管的8个笔划段a-h同名端连在一起,所有数码管接收到相同的字形码,但究竟是那个显示器亮,取决于COM端。

扫描显示的优点在于消耗的系统资源少,占用的I/O口少,N个数码管只需(7+N)个引脚((若需要显示小数点,则是8+N个引脚)。

其缺点是控制起来不如静态显示方便。

下图3.1 给出了8个数码管动态扫描显示的接口电路图。

如果显示器采用共阴极数码管时,则
图5.1 数码管动态扫描显示接口电路图
控制各个显示器是否点亮的COM0~COM7端口的波形如图3.2所示:
下面结合图3.1和图3.2进一步说明动态扫描电路的原理。

尽管图3.1中的7段显示码会由SEG[7..0] 同时传送到每个数码管上,但是由图3.2可知,所有数码管的COM 端在任一时刻只有一
个是低电平,所以每次只点亮一个数码管。

例如,当COM0为低电平时,将点亮最右侧的数码管,
当COM1有效时,将点亮右起第二个数码管,依次类推。

只要COM0~COM7的扫描频率超过人的眼睛视觉暂留频率24Hz 以上,就可以达到每次单独点亮一个显示器,却能享有8个同时显示的视觉效果,而且显示也不致闪烁抖动。

在本实验中,就是根据上述数码管扫描显示原理,在EDA 实验开发系统上的8个数码管上从右到左依次显示数字0~数字7。

三、实验内容
1、根据图3.1和图3.2所示的数码管扫描显示原理,在Quartus Ⅱ下编写一个VHDL 程序,用来实现在8个数码管上从右到左依次显示数字0~数字7 (参考程序见本实验末),并对其进行编译、仿真和时序分析;
2、选择合适的实验电路结构图,对设计的数码管扫描显示电路完成锁定引脚、编程下载和硬件验证。

四、实验仪器及设备
PC 机一台、GW48-CK 实验系统一套、下载电缆一根、UT51数字万用表及DF4320双踪示波器各1只
五、实验报告
1、写出动态扫描显示电路的VHDL 源程序,并绘出仿真波形;
图3.2动态扫描控制信号图
2、给出动态扫描显示电路的时序分析信息、引脚锁定信息和器件资源占用情况;
3、完成实验思考题;
4、归纳本次实验心得体会(从本次实验中获得了那些收益、本次实验中你的成功之处与有待改进的地方,下次怎样改进等)。

六、实验思考题
1、和静态显示方式相比,数码管动态显示方式有何优、缺点?
2、在本实验中,当COM0~COM7的扫描频率选择多少时,数码管显示效果比较稳定?
3、如何实现数码管的闪烁显示效果?
实验参考程序:
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
USE IEEE.Std_Logic_Unsigned.ALL;
ENTITY Dynamic_Disp IS
PORT(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 IS
SIGNAL Counter:Integer Range 0 to 7;
BEGIN
PROCESS(Clock)
V ARIABLE Num:Integer Range 0 to 9;
BEGIN
IF rising_edge(Clock) THEN
IF Counter=7 THEN
Counter<=0;
ELSE
Counter<=Counter+1;
END IF;
Num:=Counter;
CASE Counter IS
WHEN 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 IS
WHEN 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;。

相关主题