数字电路与逻辑设计实验报告——数码管扫描显示控制器的设计与实现
逻辑数码管的实训报告

一、实训背景随着电子技术的飞速发展,数码管作为一种常见的显示器件,在日常生活中有着广泛的应用。
为了使学生更好地理解数码管的工作原理和实际应用,提高学生的动手实践能力,我们开展了逻辑数码管的实训课程。
二、实训目的1. 了解逻辑数码管的构造和工作原理;2. 掌握逻辑数码管的驱动方法;3. 学会使用逻辑门电路实现数码管的显示功能;4. 提高学生的动手实践能力和创新意识。
三、实训内容1. 逻辑数码管的构造和工作原理逻辑数码管由七个独立的发光二极管组成,分别对应数码管的七个段(a、b、c、d、e、f、g),通过控制各个段的亮与灭,可以显示不同的数字和符号。
当某个段的阴极接低电平(0),阳极接高电平(1)时,该段就会发光;反之,则不发光。
2. 逻辑数码管的驱动方法逻辑数码管的驱动方法主要有两种:静态驱动和动态驱动。
静态驱动是指每个数码管独立驱动,优点是显示效果稳定,但占用较多的IO口资源。
动态驱动是指多个数码管共用一组IO口,通过快速切换显示各个数码管,达到类似独立驱动的效果,优点是节省IO口资源,但显示效果可能受到切换速度的影响。
3. 使用逻辑门电路实现数码管的显示功能本次实训采用动态驱动方法,使用74HC138译码器实现数码管的显示功能。
首先,将译码器的三个输入端分别连接到数码管的段码输入端,将译码器的输出端连接到数码管的共阳极。
然后,编写相应的程序,通过控制译码器的输入端,实现数码管的显示。
4. 实验步骤(1)搭建实验电路:将逻辑门电路、译码器、数码管等元器件按照实验原理图连接起来。
(2)编写程序:编写Verilog或VHDL等硬件描述语言,实现数码管的显示功能。
(3)仿真验证:使用Modelsim等仿真工具对程序进行仿真,观察数码管的显示效果。
(4)上板验证:将程序烧录到FPGA开发板上,观察数码管的实际显示效果。
四、实训结果与分析1. 仿真结果:在Modelsim中,仿真结果显示数码管能够正确显示0-9的数字。
实验报告格式 3-数码管显示实验

实验报告格式 3-数码管显示实验实验报告一、实验目的1. 学习如何使用数码管,并能实现数码管的显示2. 了解基本的数字显示方式,可以显示0~9的十进制数字二、实验原理数码管是一种在电子显示器中用来表示数字和其他字符的一种元件。
数码管又称LED 数码管或数字显示管,其主要功能是在打击某一输入触发器时,接到其输出端的数字会正常的显示在数码管上。
在本实验中,我们使用7段共阳数码管,7段共阳数码管由7个发光二极管组成,每个发光二极管通过与阴极接触制停止电流,结束发光。
因此,为了让数码管亮起来,必须将数码管的对应某一位的阴极端接地,同时将要显示的数码(即需要点亮的发光二极管)的阳极端与电源相连。
三、实验器材和实验步骤1. 实验器材数字计数器、7个共阳数码管、4026计数器集成电路2个、电磁继电器、电源和多根杜邦线。
2. 实验步骤(1) 将实验器材按照实验原理连接起来,具体如下图所示:(2) 实验电路接通电源,通过数字计数器发出个、十、百位的计数信号,信号由两个数字计数器发出,计数器的数量可以根据自己的需要进行添加或减少。
(3) 分别连接7个共阳数码管的7个端口,通过对应的杜邦线分别连接到2个4026计数器集成电路中的CLOCK端口,其中一个4026计数器集成电路的RESET端口连接电磁继电器。
(4) 根据需求,调整数字计数器的数据代码,在7个共阳数码管中正确显示出计数器计数的数码。
(5) 实验结束,关闭电路电源。
四、实验结果及分析本实验需要的器材比较简单,难度较小并且有初步的操作指南,实验过程中调整计数器的数据代码,可以从实验中学到如何控制数码管数字显示、数据代码调整等一系列操作,虽然实验难度较低,但重在理解数码管的使用过程以及计数器的工作原理。
在实验结束后,数码管正确显示出了计数器计数的数码。
五、实验小结本实验中,使用了数字计数器、7个共阳数码管、4026计数器集成电路、电磁继电器、电源和多根杜邦线,实验中主要学习了如何使用数码管,能够实现数码管的显示,了解基本的数字显示方式,可以显示0~9的十进制数字。
数码管动态扫描实验报告

数码管动态扫描实验一、实验目的学习计数器的设计、分析合测试方法。
学习硬件扫描显示电路的设计方法。
二、实验仪器1、PC机2、SW-51PROC单片机综合实验平台三、实验内容编写一段程序,用单片机P0口和P2口的I/O输出去控制8位的数码管显示,实现如下功能:使数码管上显示1、2、3、4、5、6、7、8。
四、实验步骤:1、用Protues设计数码管动态扫描显示电路;2、在KeilC51中编写识别程序,通过后与Protues联合调试;3、启动仿真,观察数码管显示是否正确;4、用Protues设计脉冲计数电路,仿真调试、运行程序并查看效果。
五、电路设计及调试:1、实验电路:2、程序设计与调试:①实验程序:【12345678】#include<reg52.h>#define uintunsigned int#define ucharunsigned charuchar codeDisplsy[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; uchar codeTemble[]={0,1,2,3,4,5,6,7};void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}void main(){uchar i;P0=0xff;P1=0;while(1){if(i==8)i=0;P1=Temble[i];P0=~Displsy[i+1];i++;delay(2);}}【脉冲计时】#include<reg52.h>#define uintunsigned int#define ucharunsigned charucharcodeDisplay[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar codeTemble[]={0,1,2,3,4,5,6,7};uchar Flag;uint Num;void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}voidTest2(void){TR1 = 1;while(1){Num = TH1;Num = Num << 8;Num |= TL1;P1 = 7;P0 = ~Display[Num%10];delay(3);P1 = 6;P0 = ~Display[Num%100/10];delay(3);P1 = 5;P0 = ~Display[Num%1000/100];delay(3);P1 = 4;P0 = ~Display[Num%10000/1000];delay(3);P1 = 3;P0 = ~Display[Num%100000/10000];delay(3);P1 = 2;P0 = ~Display[Num%1000000/100000];delay(3);P1 = 1;P0 = ~Display[Num%10000000/1000000];delay(3);P1 = 0;P0 = ~Display[Num%100000000/1000000];delay(3);}}void main(){TMOD = 0x50;TH1 = 0x00;TL1 = 0x00;EA = 1;ET1 = 1;TR1 = 0;while(1){Test2();}}②调试:③实验结果:1、数字1~8分别显示在8个数码管上,显示无闪烁。
数码显示实验报告

一、实验目的1. 熟悉数码管的结构和工作原理。
2. 掌握数码管与单片机的连接方法。
3. 学习使用动态扫描显示技术实现多位数码管的显示。
4. 培养动手能力和编程能力。
二、实验原理数码管是一种常用的显示器件,由多个发光二极管组成,通过控制发光二极管的亮与灭来显示数字、字母或符号。
本实验采用共阴极数码管,当对应的段码为低电平时,该段发光。
三、实验设备1. 单片机实验箱一台2. 共阴数码管8位3. 电阻若干4. 连接线若干5. 编译器(如Keil uVision)6. 仿真软件(如Proteus)四、实验内容1. 实验电路搭建根据实验原理图,连接单片机、数码管、电阻等元件。
具体连接方法如下:(1)将单片机的P0口与数码管的段码相连。
(2)将单片机的P1口与数码管的位选相连。
(3)将数码管的公共阴极与地相连。
(4)将电阻分别串联在数码管的段码和位选上,用于限流。
2. 编写程序(1)初始化单片机IO口,将P0口设置为输出模式,P1口设置为输出模式。
(2)编写数码管显示函数,根据输入的数字,计算对应的段码,并输出到P0口。
(3)编写动态扫描显示函数,按照一定的时间间隔依次显示各个数码管。
3. 编译程序使用Keil uVision编译器将编写的程序编译成hex文件。
4. 仿真实验使用Proteus软件进行仿真实验,观察数码管显示效果。
五、实验步骤1. 搭建实验电路。
2. 编写程序,实现数码管显示功能。
3. 编译程序,生成hex文件。
4. 在Proteus软件中导入hex文件,进行仿真实验。
5. 观察数码管显示效果,分析实验结果。
六、实验结果与分析1. 实验结果通过仿真实验,数码管能够按照程序的要求显示数字、字母或符号。
2. 实验分析(1)数码管显示原理:数码管通过控制发光二极管的亮与灭来显示数字、字母或符号。
当对应的段码为低电平时,该段发光。
(2)动态扫描显示原理:动态扫描显示是通过依次点亮各个数码管,使多位数码管同时显示。
实验三 数码管显示控制设计

实验三数码管显示控制设计一、实验目的1、熟悉数码管显示控制原理。
二、实验内容设计并实现8个数码管SM1-8同步循环显示数字0-9。
三、实验仪器1、ZY11EDA13BE型实验箱通用编程模块,配置模块,开关按键模块,时钟源模块。
2、并口延长线,JTAG延长线。
3、安装MAX+PLUSII 10.2软件的PC机。
四、实验原理通过计数器完成技术过程,计数时钟clk选择1Hz,计数器采用四个D触发器级联而成,效果同四位二进制计数器。
计数结果D3-D0经74248译7段数码管显示,位选信号为32768Hz,要实现八位都循环显示必须满足8位都选中一遍后才可以改变计数数据,显然32768Hz远大于1Hz,所以设计能满足8位数码管按1秒循环显示,但不能满足只显示0-9。
五、实验注意事项:实验指导书中所有实验内容都是针对主板系统的核心芯片EP1K30QC208-2来设计的,实验原理中提供了管脚分配情况,管脚分配好后必须通过成功编译才可以下载配置。
六、实验步骤:步骤1:输入原理图,编译,仿真,锁定引脚并下载到目标芯片。
步骤2:将信号源模块第一全局时钟接1Hz,第二全局时钟接32768Hz,拨位开关KD1作为复位控制,观察数码管是否按1秒循环显示数字0-9。
七、实验报告1、列出数码管控制接口表,画出数码管图,列出数码管显示控制表。
八、思考题思考设计并用VHDL实现8个数码管分别显示数字0-7。
程序见附件。
library ieee;----qiduanshumaguanxinanshi01234567 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan_led isport(clk : in std_logic;time1: out std_logic_vector(2 downto 0);time2 : out std_logic_vector(6 downto 0)); end;architecture art of scan_led issignal a : std_logic_vector(3 downto 0):="0000"; beginpro1:process(clk)beginif clk'event and clk='1' thenif a="1000" then a<="0000";else a<=a+1;end if;end if;end process pro1;pro2:process(a)begincase a iswhen "0001" => time1<="111";time2<="1111110";when "0010" => time1<="110";time2<="0110000";when "0011" => time1<="101";time2<="1101101";when "0100" => time1<="100";time2<="1111001";when "0101" => time1<="011";time2<="0110011";when "0110" => time1<="010";time2<="1011011";when "0111" => time1<="001";time2<="1011111";when "1000" => time1<="000";time2<="1110000";when others => null;end case;end process pro2;end art;。
led数码管显示控制实验报告

led数码管显示控制实验报告篇一:单片机实验报告——LED数码管显示实验《微机实验》报告LED数码管显示实验指导教师:专业班级:姓名:学号:联系方式:一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。
实验内容:利用C8051F310单片机控制数码管显示器基本要求:利用末位数码管循环显示数字0-9,显示切换频率为1Hz。
提高要求:在4位数码管显示器上依次显示当天时期和时间,显示格式如下:yyyy(月份.日)(小时.分钟)思考题:数码管采用动态驱动方式时刷新频率应如何选择?为什么?二、设计思路C8051F310单片机片上晶振为,采用8分频后为,输入时钟信号采用48个机器周期。
0到9对应的断码为:FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H 基础部分:由于只需要用末位数码管显示,不需要改变位码,所以只需要采用LED的静态显示。
采用查表的方法,通过循环结构,每次循环查找数据表下一地址,循环十次后重新开始循环。
每次循环延时1s,采用定时器0定时方式1。
提高部分:四个数码管都要显示,所以采用LED的动态显示。
由于数码管的位选由、控制,P0端口的其他引脚都没用到,所以对P0端口初始化赋00H,每次循环加40H、选中下一位,四次后十六进制溢出,P0端口变又为00H回到第一个数码管。
每位数码管显示一个段码后都延时1ms(否则数码管太亮,刺眼)采用定时器0定时方式1,依然采用查表法改变段码值。
通过循环:DJNZ R5,BACKMOVR5,#250 DJNZ R4,BACK MOVR4,#8来控制每种模式的切换时间,我采用2s切换一次(8*250*1ms=2s)。
切换模式,可以采用改变查表法的偏移量来实现,没切换一次模式,偏移量加04H,三次后回到初始偏移量,来实现三种模式的循环显示。
三、资源分配基础部分:、:控制数码管的位选P1:控制数码管段码的显示R0:控制段选提高部分:、:控制数码管的位选P1:控制数码管段码的显示R0:控制位选R1:控制段选R3:用于改变偏移量来切换模式R4、R5:控制循环次数,控制模式切换时间四、流程图基础部分:提高部分篇二:实验八数码管LED实验报告苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:数码管LED实验一.实验目的理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管LG5641AH与MCU 的接线图。
数码管显示设计与实现
STM32
项目三 数码管显示设计与实现
认识数码管
n 数码管的显示方法:有静态显示和动态显示两种方法。
n 动态显示
n 动态显示是一种一位一位地轮流点亮各位数码管的显示方式,即在某 一时段,只选中一位数码管的“位选端”,并送出相应的字型编码;
n 只有加入了这些东西,才能成为可以工作的STM32芯片。
2. STM32存储器映射
n STM32存储器的地址空间被划分为大小相等的8块区域,其中: ① Peripherals是外设的存储器映射,对该区域操作,既对相应外设进行操作; ② SRAM是运行时临时存放代码的地方; ③ Flash是存放代码的地方; ④ System Memory是STM32出厂时自带的,只能使用,不能写或擦除; ⑤ Option Bytes是可以按照用户的需要进行配置。
STM32
数码管显示设计与实现
项目三 数码管显示设计与实现
任务6 数码管静态显示设计与实现
n 目标
n 利用STM32与数码管的接口技术,完成STM32的数码管静态显示 电路设计和程序的设计、运行及调试。
n 任务要求
n 使用STM32F103R6芯片的PC0~PC15引脚分别接2个共阴极LED 数码管。
RAM,可以缓存,并且可以执行指令。 n 外部RAM区的后半段(0x8000_0000~0x9FFF_FFFF)。这个区域除了不可
以缓存外,其他与前半段相同。
STM32
项目三 数码管显示设计与实现
STM32存储器映射
n Cortex-M3存储器映射
数码管实验报告
数码管实验报告数码管实验报告引言:数码管是一种常见的电子显示器件,广泛应用于各种电子设备中。
本实验旨在通过对数码管的实际操作,了解其工作原理以及应用场景。
一、实验目的通过本次实验,我们的目标是掌握数码管的基本原理和使用方法,进一步了解数字电路的工作原理,并能够通过搭建简单的电路实现数字显示。
二、实验器材和原理实验所需器材包括:数码管、电阻、开关、电源等。
数码管是一种由发光二极管组成的显示器件,它可以显示数字0-9。
电阻用于限流,开关用于控制电路的通断,电源为实验提供所需的电能。
数码管的工作原理是通过控制发光二极管的通断状态来实现数字的显示。
数码管一般由7个发光二极管组成,其中6个用于显示数字的每个段,而第7个用于显示小数点。
通过控制不同的发光二极管通断,可以显示不同的数字或符号。
三、实验步骤1. 搭建基本电路:将数码管与电阻、开关、电源连接起来,保证电路的通断正常。
2. 确定数码管的工作电压:通过调节电源电压,观察数码管的亮度变化,找到最适合的工作电压。
3. 实现数字的显示:通过对不同的发光二极管通断的控制,依次显示数字0-9。
4. 实现数字的循环显示:通过控制开关的状态,使得数字可以按照一定的顺序不断循环显示。
5. 实现小数点的显示:通过控制第7个发光二极管的通断状态,实现小数点的显示。
四、实验结果和分析通过实验,我们成功地搭建了数码管电路,并实现了数字的显示和循环显示。
在调节电源电压的过程中,我们发现数码管的亮度会随着电压的增加而增加,但当电压过高时,数码管可能会受损,因此需要找到一个合适的工作电压。
在实现数字的显示和循环显示的过程中,我们发现通过对不同的发光二极管通断的控制,可以显示不同的数字。
而通过控制开关的状态,可以实现数字的循环显示,使得显示的数字可以按照一定的顺序不断变化。
通过实验,我们还成功地实现了小数点的显示。
通过控制第7个发光二极管的通断状态,我们可以在数字显示的基础上添加小数点,实现更加丰富的显示效果。
单片机实验报告,数码管显示
单片机实验报告,数码管显示实验目的1、掌握数码管动态扫描显示的原理和编程实现方法;2、掌握软件延时程序的使用。
实验任务利用数码管动态显示,设计一个两位秒表,计时0-59,时间到了显示“FF”,使用软件延时实现。
实验原理数码管动态显示的连接方式是将所有数码管的段码a、b、c、d、e、f、g、dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。
所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
具体过程是:当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的位选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中每位数码管的点亮时间为2ms左右,由于人的视觉暂留现象及发光极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
实现延时通常有两种方法:一种是硬件延时,这需要用到单片机的定— 1 —时器,这种方法可以提高CPU的工作效率,也能做到精确控制时间,此方法将在实验四中再学习;另一种方法是软件延时,这种方法主要采用循环体进行。
可以采用for循环以及for循环嵌套的方式达到粗略的长时间延时,利用Keil软件可以调试和观察for语句的延时时间。
实验结果:总结:本次实验我很好的复习了有关C语言的相关语句知识点,合理的运用到了单片机的程序编码中去,但实验过程中,也出现了很多问题。
比如在运行过程中,数码管会乱码,检查后发现是扫描信号端口错误,将扫描信号端口顺序调换,重新运行则解决了乱码问题。
共阴数码管电路0到15的显示参数代码表要记清楚。
数码管实验报告
数码管实验报告实验报告:数码管(LED数码管)的实验实验目的:1. 了解数码管的基本原理和工作方式;2. 掌握数码管的控制方法;3. 通过实验验证数码管的实际应用。
实验器材:1. 数码管模块;2. Arduino开发板;3. 杜邦线。
实验原理:数码管是一种能够显示数字和某些字母符号的显示器件。
传统的数码管由7个发光二极管(LED)组成,可以显示0-9的数字,以及A、B、C、D、E、F六个字母和一些符号。
当输入不同的控制信号时,数码管的不同LED会被点亮,从而显示出所需的数字或字母符号。
实验步骤:1. 将Arduino开发板连接到计算机,并打开Arduino IDE软件;2. 在Arduino IDE中新建一个程序,并编写代码;3. 将数码管模块的引脚与Arduino开发板的数字引脚相连接;4. 在Arduino IDE中将编写好的程序上传到Arduino开发板;5. 观察数码管显示的结果,验证程序的正确性;6. 修改程序,尝试显示其他数字或字母符号;7. 根据实际需要,设计并实现更复杂的数码管显示效果。
实验结果:在本次实验中,我们成功地通过Arduino开发板控制了数码管的显示。
通过编写简单的代码,我们可以实现在数码管上显示任意数字或字母符号的功能。
实验总结:本次实验通过实际操作,加深了对数码管工作原理和控制方法的理解。
我们掌握了使用Arduino开发板编写代码控制数码管显示的基本技能,并且可以根据实际需要设计出更复杂的显示效果。
数码管作为一种常见的显示器件,在很多电子设备中都有广泛的应用,如计算器、时钟、温度计等。
掌握数码管的使用方法对于我们今后的学习和工作都具有重要意义。
因此,我们应该进一步学习和探索数码管的更多应用,并加以实践。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数码管扫描显示控制器的设计与实现一、六个数码管串行扫描电路1.实验任务要求:⑴掌握VHDL语言的语法规范,掌握时序电路描述方法⑵掌握多个数码管动态扫描显示的原理及设计方法2.设计思路和过程用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真并下载验证其功能:使用模6计数器产生一个M=6的信号,控制“数码管选通控制信号”cat的输出,低电平点亮管,使“0至5号”6个数码管依次点亮;同时控制数字的输出,依次输出0至5。
由于使用了同一个模6计数器,使得cat的输出与数字的输出是同步的,第k号数码管亮时输出k.当时钟频率足够大时(6个数码管需要300Hz以上的频率),数码管能稳定显示,在视觉上表现为同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上3.V HDL 程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shiyanshi1 ISPORT(clk,clear:IN STD_LOGIC;cat:OUT STD_LOGIC_VECTOR(5 downto 0);b:OUT STD_LOGIC_VECTOR(6 downto 0));end shiyanshi1;ARCHITECTURE shumaguan OF shiyanshi1 ISSIGNAL q_temp: STD_LOGIC_VECTOR(2 downto 0);BEGINPROCESS(clk)BEGINIF(clk'event and clk='1') THENIF clear='0' THENq_temp<="000";ELSIF q_temp="101" THENq_temp<="000";ELSEq_temp<=q_temp+1;END IF;CASE q_temp ISWHEN "000" => cat <="111110"; --0WHEN "001" => cat <="111101"; --1WHEN "010" => cat <="111011"; --2WHEN "011" => cat <="110111"; --3WHEN "100" => cat <="101111"; --4WHEN "101" => cat <="011111"; --5WHEN OTHERS => cat <="111111";END CASE;CASE q_temp ISWHEN "000" => b <="1111110"; --0WHEN "001" => b <="0110000"; --1WHEN "010" => b <="1101101"; --2WHEN "011" => b <="1111001"; --3WHEN "100" => b <="0110011"; --4WHEN "101" => b <="1011011"; --5WHEN OTHERS => b <="0000000";END CASE;END IF;END PROCESS;END shumaguan;4.仿真波形图5.仿真波形图分析如图,clear为复位信号,cp为时钟信号,cat5至cat0为数码管选通控制信号,b为数码管所显示的数字图形。
低电平时数码管亮,由图可知,六个管依次点亮,且点亮的数码管的序号与所显示的数字是同步对应的,即0至5号数码管点亮时显示数字0至5。
当时钟频率足够大(大于300Hz)时,数码管可以稳定显示,视觉上表现为同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上。
6.故障及问题分析故障:下载到实验板上后不能正确显示数字描述:VHDL程序、仿真波形图均没有错误,但实验板上数字图形处于倒置状态解决:最后发现分配管脚时b7至b0被错误的按a,b,c,d,e,f,g的顺序分配了。
将其调整为b0至b7按a,b,c,d,e,f,g的顺序分配。
二、六个数码管滚动扫描电路,要求循环左滚动1.实验任务要求:⑴掌握VHDL语言的语法规范,掌握时序电路描述方法⑵掌握多个数码管动态扫描显示的原理及设计方法2.设计思路和过程用VHDL语言设计并实现六个数码管滚动扫描电路,要求循环左滚动,始终点亮6个数码管,左出右进。
状态为012345→123450→234501→345012→450123→501234→012345:使用模6计数器产生一个M=6的信号,控制数字的输出,依次输出0至5;同时控制“数码管选通控制信号”cat的输出,低电平点亮管,使“0至5号”6个数码管依次点亮。
当数字输出一个循环时产生一个信号flag,使cat暂时不变,然后数字进入下个循环,cat继续按模6计数器的变化方式改变。
这样做相当于数字每循环一次,cat与数字的变化相比延后一位。
在视觉上表现为数字循环左滚动,始终点亮6个数码管,左出右进。
状态为012345→123450→234501→345012→450123→501234→012345。
为了使数码管能稳定显示,加一个M值足够大的计数器充当分频器,使cat 停滞一次后,输出的数字CNTOUT进入下个循环,cat继续按模6计数器的变化方式改变,CNTOUT要经过M个循环(这M个循环里点亮的数码管的序号和所显示的数字的一一对应关系是稳定的)才能发出下个信号flag使cat再次停滞。
3.VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shiyanshi2 ISPORT(CLK:IN STD_LOGIC;Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END ENTITY shiyanshi2;ARCHITECTURE ART OF shiyanshi2 ISSIGNAL CNTOUT:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL S,S1:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL JS:STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL CLR: STD_LOGIC;SIGNAL FLAG:STD_LOGIC;BEGINP1: PROCESS(CLK,FLAG)BEGINIF(CLK'EVENT AND CLK='1') THEN --检测clk高电平IF CNTOUT="101" THEN --该段为模6计数器CNTOUT<="000";ELSECNTOUT<=CNTOUT+1;END IF;IF JS="100000000"THEN --该段为分频器JS<="000000000";ELSEJS<=JS+1;END IF;CLR<=JS(8);IF FLAG='1' THEN ----该段为控制数码管的滚动IF S="101" THEN S<="000";ELSE S<=S+1;END IF;ELSES<=S;END IF;SEL<=S;END IF;END PROCESS;P2:PROCESS(CLR)BEGINCASE CLR ISWHEN '1' =>IF CNTOUT="101" THENFLAG<='0';ELSEFLAG<='1';END IF;WHEN '0'=>FLAG<='1';END CASE;END PROCESS;P3:PROCESS(S)BEGINCASE S IS ----该段为几号数码管亮WHEN "000"=>CAT<="111110";WHEN "001"=>CAT<="111101";WHEN "010"=>CAT<="111011";WHEN "011"=>CAT<="110111";WHEN "100"=>CAT<="101111";WHEN "101"=>CAT<="011111";WHEN OTHERS=>CAT<="111111";END CASE;END PROCESS;P4:PROCESS(CNTOUT)BEGINCASE CNTOUT IS ----该段为显示数字WHEN "000"=>Y<="1111110";WHEN "001"=>Y<="0110000";WHEN "010"=>Y<="1101101";WHEN "011"=>Y<="1111001";WHEN "100"=>Y<="0110011";WHEN "101"=>Y<="1011011";WHEN OTHERS=>Y<="0000000";END CASE;END PROCESS;END ARCHITECTURE ART;4.仿真波形图具体变化过程如下:图甲:图乙:图丙:5.仿真波形图分析如图,CLK为时钟信号,Y为数码管所显示的数字图形,CNTOUT为输出的数字。