实验四 数码管扫描显示控制器设计与实现
数码管动态显示实验报告
一、实验目的1. 掌握数码管动态扫描显示的原理和编程实现方法;2. 熟悉单片机与数码管之间的接口连接;3. 学会使用定时器中断控制数码管的动态显示;4. 培养动手能力和问题解决能力。
二、实验原理数码管动态显示是通过单片机控制多个数码管同时显示不同的数字或字符,利用人眼的视觉暂留效应,实现快速切换显示内容,从而在有限的引脚数下显示更多的信息。
实验中,我们采用动态扫描的方式,依次点亮数码管,通过定时器中断控制扫描速度。
三、实验器材1. 单片机开发板(如51单片机、AVR单片机等);2. 数码管(共阳/共阴自选);3. 连接线;4. 电阻;5. 实验台;6. 编译器(如Keil、IAR等)。
四、实验步骤1. 设计电路图:根据实验要求,设计单片机与数码管的连接电路图,包括数码管的段码、位选信号、电源等。
2. 编写程序:使用C语言或汇编语言编写程序,实现数码管的动态显示功能。
(1)初始化:设置单片机的工作模式、定时器模式、端口方向等。
(2)显示函数:编写显示函数,实现数码管的点亮和熄灭。
(3)定时器中断服务程序:设置定时器中断,实现数码管的动态扫描。
3. 编译程序:将编写的程序编译成机器码。
4. 烧录程序:将编译后的程序烧录到单片机中。
5. 连接电路:将单片机与数码管连接好,包括数码管的段码、位选信号、电源等。
6. 运行实验:打开电源,观察数码管的显示效果。
五、实验结果与分析1. 实验结果:数码管按照预期实现了动态显示功能,依次点亮每位数码管,并显示出不同的数字或字符。
2. 分析:(1)通过调整定时器中断的周期,可以改变数码管的扫描速度,从而控制显示效果。
(2)在编写显示函数时,要考虑到数码管的共阳/共阴特性,选择合适的点亮和熄灭方式。
(3)在实际应用中,可以根据需要添加其他功能,如显示时间、温度等。
六、实验总结1. 通过本次实验,掌握了数码管动态显示的原理和编程实现方法。
2. 熟悉了单片机与数码管之间的接口连接,提高了动手能力。
实验四 LED数码管显示实验报告
实验名称 LED数码管显示实验指导教师曹丹华专业班级光电1202班姓名陈敬人学号联系电话一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。
实验内容:1.基础部分:利用C8051F310单片机控制数码管显示器。
利用末位数码管循环显示数字0-F,显示切换频率为1Hz。
2.提高部分:在数码管上显示0→199计数,计数间隔为0.5秒。
二、设计思路1.基础部分C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,T1采用定时器工作方式1,单次定时最长可达1.027s,可以实现1s定时要求。
定时采用软件查询工作方式,利用JNB TF0, HERE实现。
置P0.6和P0.7端口为0,位选信号选定末位数码管。
通过MOVC A, @A+DPTR指令,利用顺序查表法取出显示段码数据。
寄存器R0自增1,并赋给A以取出下一个显示段码数据。
为减短代码长度,利用CJNE指令实现循环结构。
当寄存器R0增至0FH后,跳转至开头,重新开始下一轮显示。
2.提高部分定时方式及查表方式同基础部分,由于要实现三个数码管同时显示,因此采用动态扫描显示法。
三、资源分配1.基础部分P0.6: 位选信号端口P0.7:位选信号端口P1:输出段码数据R0:存放显示数据DPTR:指向段码数据表首 2.提高部分P0.6:位选信号端口P0.7:位选信号端口R0:存放个位显示数据 R5:存放十位显示数据 R6:存放百位显示数据 P1:输出段码数据DPTR: 指向段码数据表首四、流程图1.基础部分2.提高部分五、源代码(含文件头说明、语句行注释)1.基础部分;******************基础部分源代码***************************;Filename: test.asm;Decription: 末位数码管循环显示数字0-F,显示切换频率为1Hz。
实验四单片机控制数码管实验打印版 (1)
实验报告一、实验目的1. 掌握单片机控制数码管静态显示字符的方法2. 进一步掌握延时子程序的应用3.进一步掌握单片机程序设计及调试方法二、实验内容1)用一位数码管循环显示十六进制数符。
2)交替点亮4个数码管。
(例如:开始时在数码显示器的最右边一位上显示1个“0”字,以后每隔0.5秒将“0”字左移1位,直到最左边一位后停止显示。
)3) 实验板第一行按键定义同实验三,要求:当按下S3后,对S4的按键次数计数(计数次数不超过9),对S4按键N次(N≤9)后,若再按下S3键,则将N显示在数码管上。
三、实验相关说明1、实验电路原理图实验一流程图实验程序:#include<reg52.h>#define KEY P3 //定义按键接口#define LED P0 //定义LED灯接口sbit s1=P3^4; //定义按键位置sbit s2=P3^5;sbit s3=P3^6;sbit s4=P3^7;unsigned char code seg[]={0x08,0x04,0x02,0x01};//分别对应相应的数码管点unsigned char constdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0 x5e,0x79,0x71};// 显示段码值01234567void delay(unsigned int cnt){while(--cnt);}void main1(); //按实验二中的实验内容1要求点亮数码管void main2(); //按实验二中的实验内容2要求点亮数码管void main3(int a,int count); //点亮数码管void main(){int a=1; //标记S3按的次数为奇数次还是偶数次int count=0; //统计S4键按的次数P2=0x10; //关闭蜂鸣器KEY=0xf4; //设置为独立键盘模式while(1){if(!s1) //S1是否按下{delay(200);if(!s1)main1(); //如何按下S1,调用main1()}if(!s2) //S2是否按下{delay(200);if(!s2)main2(); //如何按下S2,调用main2()}if(!s3) //S3是否按下{delay(3000);if(!s3){P0=0xff; //关闭LED灯while(1){if(s3){a=~a; //如果S3按下,a取反,当a为1时点亮LED灯main3(a,count);if(a)count=0; //如果a为1,清countbreak;}}}}if(!s4) //S4是否按下{delay(3000);if(!s4)while(1){if(s4){count++; //每按一次S4就加一break;}}}}}void main1() //按实验二中的实验内容1要求点亮数码管{unsigned char i=0;P2=0x08; //取位码while(1){P0=~dofly[i];//取显示数据,段码delay(20000);if(KEY!=0xf4)break;delay(20000);if(KEY!=0xf4)break;delay(20000); //扫描间隙延时,时间太长会闪烁,太短会造成重影,这里使用长时间方便了解显示原理if(KEY!=0xf4)break;i++;if(i==16) //检测1位扫描完全?i=0;}}void main2() //按实验二中的实验内容2要求点亮数码管{unsigned char flag=0;P0=0xc0;//取显示数据,段码while(1){if(flag==0){unsigned char i=0;flag=1;while(1){P2=seg[i]; //取位码delay(20000);if(KEY!=0xf4)break;delay(20000);if(KEY!=0xf4)break;delay(20000); //扫描间隙延时,时间太长会闪烁,太短会造成重影if(KEY!=0xf4)break;i++;if(i==4) //检测8位扫描完全?{P0=0xff;break;}}break;}}}void main3(int a,int count) //如果a为1点亮数码管{P2=0x08; //取位码if(a==1){P0=~dofly[count];}}实验分析:在本次实验中通过写程序实现按键对数码管的控制,当按下不同的键时实现不同的功能。
实验4七段数码管译码扫描显示(无源码)
实验4七段数码管译码扫描显示(无源码)实验四七段数码管译码扫描显示一、实验目的:通过对译码和串行扫描电路的设计,理解多位数码管串行扫描输出的工作原理以及七段数码管的译码以及串行扫描输出的设计方法。
二、实验条件:1. 安装WindowsXP系统的PC机;2. 安装QuartusII6.0 EDA软件;过所设计的串行扫描分别显示“1”、“2”、data_control[7..0]:8个分别控制数码管显示的输入信号;led_addr[7..0]:对8个数码管进行串行扫描的输出控制信号;seg7_data[6..0]:驱动7段数码管各显示段的输出信号;首先在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置下载程序到SOPC开发平台中。
在硬件实现中,要求:1. 用实验平台的8个数码管输出显示(共阴接法),并且用其下方的8个按键分别控制对应数码管的显示与否。
注:采用I/O模式5实现输入控制和输出显示方式。
为了实现数码管的串行扫描,必须把数码管连接成串行控制输出电路,我们可以通过I/O板上的跳线实现此操作,如右图所示,把模式数码管右方的跳线(JP24)向下连接即可。
此跳线必须下置,以实现数码管的串行扫描接法,具体电路如附录所示2. 扫描所用的时钟信号采用实验平台的clock0时钟资源:I/O板上的clock0时钟资源是0.5Hz~20MHz。
暂留特性的要求,频大部分时间内对准,上的跳线可以选择采钟资源(此两类时钟在适配板跳线置右:连接I/O板上的clock0;跳线置左:选择适配板上的20MHz时钟。
四、实验步骤:1. 打开QuartusII软件,建立一个新的工程:1) 单击菜单File\New Project Wizard…2) 输入工程的路径、工程名以及顶层实体名。
3) 单击Next>按钮,出现以下窗口单击Next>继续。
5) 单击Next>,指定第三方工具:这里我们不指定第三方EDA工具,单击Next>后结束工程建立。
数码管显示控制器实训报告
实训报告项目名称:数码管显示控制器班级:姓名:学号:一、实训任务根据已知条件,完成对数码管显示控制器的设计、装配与调试。
二、设计要求(1)、能自动一次显示出数字 0、1、2、3、4、5、6、7、8、9(自然数列),1、3、5、7、9(奇数列), 0、2、4、6、8(偶数列),0、1、0、1、2、3、4、5、6、7(音乐符号序列);然后再从头循环;(2)、打开电源自动复位,从自然数列开始显示。
摘要这次的课程设计主要是用计数器来实现的,这个循环控制电路的实质就是要产生一系列有规律的数列, 然后通过一个七段数码管显示出来. 这里使用的只要就是计数器, 计数器在时序电路中应用的很广泛,它不仅可以用于对脉冲进行计数,还可用于分频,定时,产生节拍脉冲以及其他时序信号。
运用计数器的不同的功能和不同的接发就可以实现不同的序列输出了。
而且这次的内容还包括分电路图的整合,使这个循环显示器能够按照要求依次输出自然序列,奇数序列,偶数序列还有音乐序列。
还有一个部分就是时钟电路是由 555 多谐自激震荡集成电路制成,与电阻和电容一起构成周期为一秒时钟电路的时钟周期发生器,为电路提供时钟信号。
驱动电路是由74LS160D计数器和74LS153D数据选择器组成,用以驱动数码管正常工作,并且在时钟电路的控制下让数码管循环工作。
支持整个电路的工作。
这个设计基本上就是由以上部分连接在一起组成的。
1.设计背景1.1设计任务根据已知条件,完成对数码管显示控制器的设计、装配与调试。
1.2设计要求(1)能自动一次显示出数字 0、1、2、3、4、5、6、7、8、9(自然数列),1、3、5、7、9(奇数列), 0、2、4、6、8(偶数列),0、1、0、1、2、3、4、5、6、7(音乐符号序列);然后再从头循环;(2)打开电源自动复位,从自然数列开始显示。
1.3指导思想本设计将采用几个基本的数字集成的74系列(74LS48,74LS153,555)芯片来完成所需要的数字逻辑显示功能(在七段数码管上按规律显示特定的数字)。
数字电路与逻辑设计实验报告——数码管扫描显示控制器的设计与实现
数码管扫描显示控制器的设计与实现一、六个数码管串行扫描电路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为数码管所显示的数字图形。
数码管动态扫描实验报告
数码管动态扫描实验报告数码管动态扫描实验报告引言:数码管是一种常见的显示器件,广泛应用于电子设备中。
动态扫描技术是一种常见的驱动数码管的方法。
本实验旨在通过动态扫描技术实现数码管的显示,并对其原理进行深入研究。
一、实验目的本实验的主要目的是掌握数码管的动态扫描原理,并通过实践验证其可行性。
具体目标如下:1. 理解数码管的基本工作原理;2. 熟悉动态扫描技术的实现方法;3. 掌握使用单片机驱动数码管的方法;4. 通过实验验证动态扫描技术的可行性。
二、实验器材与原理1. 实验器材:- 单片机开发板;- 4位共阳数码管;- 连接线。
2. 实验原理:数码管是由多个发光二极管组成的,每个发光二极管对应一个数字或符号。
共阳数码管的阳极连接在一起,而阴极分别与单片机的IO口相连。
动态扫描技术是通过快速切换数码管的显示,从而形成连续的显示效果。
具体原理如下:- 单片机通过IO口输出高电平或低电平控制数码管的显示;- 通过快速切换数码管的显示,使得人眼感觉到数码管同时显示多个数字。
三、实验步骤1. 连接电路:将4位共阳数码管的阳极分别连接到单片机的IO口,阴极连接到GND。
确保连接正确,避免短路或接反。
2. 编写程序:使用单片机开发板的编程软件,编写程序控制数码管的显示。
通过循环控制IO 口输出高低电平,实现动态扫描的效果。
3. 上传程序:将编写好的程序上传到单片机开发板中,确保程序能够正确运行。
4. 运行实验:将单片机开发板连接到电源,观察数码管的显示效果。
通过动态扫描技术,数码管会以一定的频率显示不同的数字。
四、实验结果与分析通过实验,我们成功实现了数码管的动态扫描显示。
数码管以一定的频率切换显示不同的数字,形成了连续的显示效果。
通过改变程序中的循环次数和延时时间,我们可以调整数码管显示的速度和亮度。
动态扫描技术的优点是可以通过少量IO口驱动多个数码管,节省了硬件资源。
同时,由于数码管的刷新速度较快,人眼无法察觉到闪烁的现象,使得显示效果更加平滑和稳定。
实验四键盘及显示设计实验报告
实验四键盘扫描及显示设计实验报告一、实验要求1. 复习行列矩阵式键盘的工作原理及编程方法。
2. 复习七段数码管的显示原理。
3. 复习单片机控制数码管显示的方法。
二、实验设备1.PC 机一台2.TD-NMC+教学实验系统三、实验目的1. 进一步熟悉单片机仿真实验软件 Keil C51 调试硬件的方法。
2. 了解行列矩阵式键盘扫描与数码管显示的基本原理。
3. 熟悉获取行列矩阵式键盘按键值的算法。
4. 掌握数码管显示的编码方法。
5. 掌握数码管动态显示的编程方法。
四、实验内容根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:1.扫描键盘输入,并将扫描结果送数码管显示。
2.键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。
实验具体内容如下:将键盘进行编号,记作 0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 4 次按下的按键编号。
五、实验单元电路及连线矩阵键盘及数码管显示单元图1 键盘及数码管单元电路实验连线图2实验连线图六、实验说明1. 由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动。
抖动时间的长短由按键的机械特性决定,一般为 5~10ms。
这是一个很重要的时间参数,在很多场合都要用到。
键抖动会引起一次按键被误读多次。
为了确保 CPU 对键的一次闭合仅做一次处理,必须去除键抖动。
在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。
按键的抖动,可用硬件或软件两种方法消除。
2. 为了减少键盘与单片机接口时所占用 I/O 线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式。
3. 从数码管显示方式看,数码管分为静态显示和动态显示两种方式。
数码管动态扫描显示实验
实验三定时器和中断实验一、实验目的1、学习51单片机内部定时器的使用方法。
2、掌握中断处理程序的方法。
3、掌握数码管与单片机的连接方法和简单显示编程方法。
4、学习和理解数码管动态扫描的工作原理。
二、实验内容1、使用定时器T0,定时1秒,控制P1口发光管循环点亮。
2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。
3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
三、实验电路图四、实验说明1、数码管的基本概念(1)段码数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。
本次实验使用的是共阴数码管,公共端是1、6,公共端置0,则某段选线置1相应的段就亮。
公共端1控制左面的数码管;公共端6控制右面的数码管。
正面看数码管的引脚、段选线和数据线的对应关系为:图1 数码管封装图图2 数据线与数码管管脚连接关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按顺序排列所组成的一个数字,它与数码管的类型(共阴、共阳)对应数据线D7 D6 D5 D4 D3 D2 D1 D0对应显示段e f DP g c d b a显示数字段码0 0CFH 1 1 0 0 1 1 1 11 03H 0 0 0 0 0 0 1 12 5DH 0 1 0 1 1 1 0 13 5BH 0 1 0 1 1 0 1 14 93H 1 0 0 1 0 0 1 15 0DAH 1 1 0 1 1 0 1 06 0DEH 1 1 0 1 1 1 1 07 43H 0 1 0 0 0 0 1 18 0DFH 1 1 0 1 1 1 1 19 0DBH 1 1 0 1 1 0 1 1 (2)位码位码也叫位选,用于选中某一位数码管。
在实验图中要使第一个数码管显示数据,应在公共端1上加低电平,即使P2.7口为0,而公共端6上加高电平,即使P2.6口为1。
实验四 数码管显示控制
实验四数码管显示控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握LED数码管显示接口技术;3、理解单片机定时器、中断技术。
二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。
图4.1共阴四位八段LED数码管的原理图图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。
实验开发板中LED数码管模块的电路原理图,如图4.2所示。
SP1a~hP0.4~P0.7SP2P0.0~P0.3图4.2 LED数码管模块电路原理图图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。
当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。
训练内容一:轮流点亮数码管来检测数码管是否正常。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110B;数码管“位选信号”初值,低电平有效LOOP:SETB P1.1;数码管位控制锁存器有效MOV P0,ACLR P1.1RL A ;形成新的“位选信号”,为选择下一位数码管做准备SETB P1.0;数码管段控制锁存器有效MOV P0,#0FFH ;数码管的所有段点亮,显示“8”CLR P1.0CALL DELAYSJMP LOOPDELAY:MOV R5,#0;延时子程序D1: MOV R6,#0D2:NOPDJNZ R6,D2DJNZ R5,D1RETEND训练内容二:静态显示,0~9计数。
实验四 七段数码管的动态扫描显示
实验四七段数码管的动态扫描显示专业:电子信息科学与技术姓名:高晓骏学号:2012021199010一.实验目的(1)进一步熟悉Quartus II软件进行FPGA设计的流程;(2)掌握利用宏功能模块进行常用的计数器,译码器的设计;(3)学习和了解动态扫描数码管的工作原理的程序设计方法;二.实验器材(1)PC机(2)Quartus II开发工具软件三.实验原理实验板上常用4位联体的共阳极7段数码管,其接口电路是把所有数码管的8个笔划段a-h同名端连在一起,而每一个数码管由一个独立的公共极COM端控制。
当向数码管发送字形码时,所有数码管都接收到相同的字形码时,但究竟是那个数码管亮,取决于COM端,这一端是由I/O控制的,所以就可以自行决定何时显示哪一位。
动态扫描即采用分时方法,轮流控制各个LED轮流点亮。
在轮流点亮扫描过程中,每一位显示器的点亮时间是极为短暂的,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上每个显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
四、实验要求:实现显示0000-9999的十进制计数器。
五.实验内容及步骤1.建立工程建立名为leddisplay的工程,并建立顶层图。
2.设计计数时钟设计一个分频器,对50MHz分频输出到计数器,让计数器以较慢的速度递增。
moduleint_div(clk,div_out);inputclk;outputregdiv_out;reg [31:0] clk_div;parameter CLK_FREQ = 'D50_000_000; //系统时钟50MHzparameter DCLK_FREQ = 'D10; //输出频率10/2Hzalways@(posedgeclk)beginif(clk_div< (CLK_FREQ/DCLK_FREQ))clk_div<= clk_div + 1;elsebeginclk_div<= 0;div_out<= ~div_out;endendendmodule输入完成后,将该文件设为顶层实体,该命令在Project->Set as top-level Entity。
实验四 数码管扫描显示控制器设计与实现
实验四数码管扫描显示控制器设计与实现一、实验目的1.掌握VHDL语言的语法规范,掌握时序电路描述方法。
2.掌握多个数码管动态扫描现实的原理及设计方法。
二、实验所用仪器及元器件1.计算机:装有Quartus软件,为VHDL语言提供操作场所。
2.直流稳压电源:通过USB接口实现,为实验开发板提供稳定电源。
3.数字系统与逻辑设计实验开发板:使试验结果下载到开发板上,实现整个实验的最终结果。
三、实验原理多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率大于50HZ,将看不到闪烁现象。
如下图10-1,是多个数码管动态扫描显示的电路连接图。
当闪烁显示的发光二极管闪烁频率较高时我们将观察到持续点亮的现象。
同理,当多个数码管依次显示,当切换速度够快时,我们将观察到所有数码管都是同事在显示。
一个数码管要稳定显示要求显示频率>50hz,那么6个数码管则需要50*6=300hz以上才能看到持续稳定点亮的现象。
图10-1中,cat1~cat6是数码管选通控制信号,分别对应于6个共阴极数码管的公共端,当catn=’0’时,其对应的数码管被点亮。
因此,通过控制cat1~cat6,就可以控制6个数码管循环依次点亮,图10-2为cat1~cat6的时序关系图。
四、实验内容1.用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真并下载验证其功能。
2.用VHDL语言设计并实现六个数码管滚动显示电路。
(1)循环左滚动,始终点亮6个数码管,左出右进。
状态为:012345→123450→234501→345012→450123→501234→012345(2)向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再一次从右边一个一个的点亮。
状态为012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中“X”表示数码管不显示。
实验四 LED数码显示控制
实验四 LED数码显示控制
在LED数码显示控制实验区完成本实验
一、实验目的
了解并掌握置位与复位指令S、R在控制中的应用及其编程方法。
二、置位与复位指令SET、RST的介绍
S为置位指令,使动作保持;R为复位指令,使操作保持复位。
当I0.0一接通,即使再变成断开,Q0.0也保持接通。
I0.1接通后,即使再变成断开,Q0.0也将保持断开。
用R 指令可以对定时器、计数器、数据寄存器、变址寄存器的内容清零。
三、控制要求
按下启动按钮后,由八组LED发光二极管模拟的八段数码管开始显示:先是一段段显示,显示次序是A、B、C、D、E、F、G、H。
随后显示数字及字符,显示次序是0、1、2、3、
4、5、6、7、8、9、A、b、C、d、E、F,再返回初始显示,并循环不止。
四、LED数码显示控制的实验面板图:图6-4-1
LED数码显示控制面板
上图中,下框中的A、B…H分别接主机的输出点Q0.0、Q0.1…Q0.7;SD接主机的输入点I0.0。
上框中的A、B、C、D、E、F、G、H用发光二极管模拟输出。
五、编制梯形图并写出程序:
实验参考程序表6-4-1
参考梯形图如下所示:
图6-4-2
六、实验设备
1、THSMS-A型、THSMS-B型实验装置或THSMS-1型、THSMS-2型实验箱一台
2、安装了STEP7-Micro/WIN32编程软件的计算机一台
3、PC/PPI编程电缆一根
4、锁紧导线若干
七、预习要求
阅读实验指导书,复习教材中有关的内容。
八、报告要求
整理出运行和监视程序时出现的现象。
实验四数码管的动态显示实验
实验四数码管的动态显示实验班级通信1102 姓名谢剑辉学号20110803223 指导老师袁文澹一、实验目的熟悉掌握数码管动态显示的基本方法;根据已知电路和设计要求在实验板上实现数码管动态显示。
根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。
二、实验内容1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。
2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。
3、实验原理实验要求“4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容”。
动态扫描可以实现要求。
简单地说,动态扫描就是选通一位,送一位数据。
原理图中的P10~P13是位选信号,即选择哪个数码管显示数字;P00~P07是段码,即要显示的数字。
可以通过依次选通一位7段数码管并通过P0端口送出显示数据。
由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。
本实验使用中断,实现每2s更新一次数字。
四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。
(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。
由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。
数码管扫描显示电路报告
实验二数码管扫描显示电路一、实验目的采用混合模式的工程设计方法完成数码管扫描显示电路.二、实验内容用模4计数器,3选1多路选择器,2-3译码电路以及7段译码器通过混合模式的工程设计方法实现数码管扫描显示电路.三、实验方法实验方法:采用基于FPGA进行数字逻辑电路设计的方法。
采用的软件工具是QuartusII软件仿真平台,采用的硬件平台是Altera EPF10K20TI144_4的FPGA试验箱。
四、实验过程相关截图1.将设计源文件counter.bdf mux4_3_1.vhd decoder2-3复制到新建工程所在文件内1)模4计数器电路2)3选1多路选择器VHDL代码library IEEE;use IEEE.std_logic_1164.all;entity mux4_3_1 isport(d0,d1,d2:in STD_LOGIC_VECTOR(3 downto 0);sel:in STD_LOGIC_VECTOR(1 downto 0);dout:out STD_LOGIC_VECTOR(3 downto 0));end mux4_3_1;architecture rtl of mux4_3_1 isbegindout<= d0 when sel="00" elsed1 when sel="01" elsed2;end rtl;3)2-3译码电路2.建立顶层bdf文件,放置原件5)管脚分配clk : 125din2[3..0] : 83 82 81 80din1[3..0] : 79 78 73 72din0[3..0] : 70 69 68 67bsg[2..0] : 64 63 62qa~qg : 135 132 131 130 121 1206)仿真验证7)编程配置及硬件测试按照前面所述方法对该设计进行编程配置下载,实验平台上可观察到3位数码管均正确稳定显示3.基于混合模式的工程设计1)新建文件名为scan_led的工程项目2)新建4位的3选1多路选择器,模4计数器,2-3译码器模块,并完成其相应的配置如下图3)完成顶层设计,编译,仿真验证,分配管教,编程配置与硬件测试验证完成五、实验结论及思考实验中,工程文件名和顶层实体名必须一致,否则会出错。
实验四 译码扫描显示电路VHDL输入设计
实验二:计数器动态扫描实验一实验目的熟悉译码扫描动态显示的工作原理、设计过程和实现方法。
二实验内容与要求学习用VHDL设计译码扫描动态显示电路,完成编译、综合、适配、仿真和实验箱上的硬件测试。
三实验平台(1)硬件:计算机、GX-SOC/SOPC-DEVLABCycloneII EP2C35F672C8核心扳(2)软件:Quartus II四实验原理通过动态扫描一组4BIT 的输入,有控制开关控制数据的流向,即在哪个数码管上显示,在允许的条件产生后,扫描记录响应位置上的输入数据(开关选择),将结果动态地显示在共阴数码管上。
在能满足人眼要求的一定的扫描频率下,对数据进行动态显示。
五程序--显示电路--显示电路整合--ledscan.vhd 4 digit bcd-to-7 segment scan displaylibrary ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledscan isport(clk : in std_logic; --synchronousenable : in std_logic; --scan clockdata_bcd :in std_logic_vector(3 downto 0);--input bcdctrl : in std_logic_vector(2 downto 0);---ctrl the order of inputi.e. bcd_dataledseg : out std_logic_vector(6 downto 0);--output to 7 segmentledcom : out std_logic_vector(5 downto 0));--7 segment enableend ledscan;architecture behavior of ledscan issignal com_clk : std_logic_vector(2 downto 0);signal bcd_led : std_logic_vector(3 downto 0);signal data2show : std_logic_vector(23 downto 0);component comcounport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output count end component;component com_encodeport(com_clk : in std_logic_vector(2 downto 0);--input countledcom : out std_logic_vector(5 downto 0));--output encodeend component;component bcd_muxport(com_clk : in std_logic_vector(2 downto 0);--input countbcd_data : in std_logic_vector(23 downto 0);--input display databcd_led : out std_logic_vector(3 downto 0));--output to 7 segment end component;component bcd_7segport(bcd_led : in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segment end component;begininput_control:process(clk)beginif (clk'event and clk='1') thenif ctrl="000" thendata2show(3 downto 0)<=data_bcd;-- first value to showelsif ctrl="001" thendata2show(7 downto 4)<=data_bcd;-- 2nd value to showelsif ctrl="010" thendata2show(11 downto 8)<=data_bcd;-- 3rd value to showelsif ctrl="011" thendata2show(15 downto 12)<=data_bcd;-- 4th value to showelsif ctrl="100" thendata2show(19 downto 16)<=data_bcd;-- 5th value to showelsif ctrl="101" thendata2show(23 downto 20)<=data_bcd;-- 6th value to showelsedata2show<="000000000000000000000000";end if;end if;end process ;u0: comcoun port map (clk=>clk,enable=>enable,comclk=>com_clk);-- 7 segment com scan counteru1: com_encode port map(com_clk=>com_clk,ledcom=>ledcom);-- 7 segment com scan counter--u1: com_encode port map (com_clk,ledcom); --7 segment com encode u2: bcd_mux port map (com_clk=>com_clk,bcd_data=>data2show,bcd_led=>bcd_led);--multiplexeru3: bcd_7seg port map (bcd_led=>bcd_led,ledseg=>ledseg); --bcd to7 segment encoderend behavior;--七段显示扫描电路--comcoun.vhd 7 segment com scan counterlibrary ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity comcoun isport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output countend comcoun;architecture behavior of comcoun issignal q : std_logic_vector(2 downto 0);--internal counted signal beginfscan:process(clk)beginif (clk'event and clk='1') thenif (enable='1') thenif q>=6 thenq<="000";--initial counterelseq<=q+1;--countingend if;end if;end if;end process fscan;comclk<=q; --output internal countend behavior;--计数译码电路 -- 6 共阴--com_encode.vhd 7 segment com encoderlibrary ieee ;use ieee.std_logic_1164.all;entity com_encode isport(com_clk :in std_logic_vector(2 downto 0);--input countledcom :out std_logic_vector(5 downto 0));--output encodeend com_encode;architecture behavior of com_encode isbeginledcom<="000001" when com_clk="001" else"000010" when com_clk="010" else"000100" when com_clk="011" else"001000"when com_clk="100" else"010000"when com_clk="101" else"100000";end behavior;--bcd_mux.vhd multiplexer of bcd-selectionlibrary ieee ;use ieee.std_logic_1164.all;entity bcd_mux isport(com_clk : in std_logic_vector(2 downto 0);--input countbcd_data :in std_logic_vector(23 downto 0);--input display data bcd_led : out std_logic_vector(3 downto 0));--output to 7 segment end bcd_mux;architecture behavior of bcd_mux isbeginbcd_led<=bcd_data(3 downto 0) when com_clk="001" elsebcd_data(7 downto 4) when com_clk="010" elsebcd_data(11 downto 8) when com_clk="011" elsebcd_data(15 downto 12)when com_clk="100" elsebcd_data(19 downto 16)when com_clk="101" elsebcd_data(23 downto 20)when com_clk="110" else"----";end behavior;--bcd对应七段显示器编码电路--bcd_7seg.vhd bcd to 7 segment encoderlibrary ieee ;use ieee.std_logic_1164.all;entity bcd_7seg isport(bcd_led :in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segment end bcd_7seg;architecture behavior of bcd_7seg isbeginwith bcd_led selectledseg<="0111111" when "0000",--0"0000110" when "0001",--1"1011011" when "0010",--2"1001111" when "0011",--3"1100110" when "0100",--4"1101101" when "0101",--5"1111101" when "0110",--6"0100111" when "0111",--7"1111111" when "1000",--8"1101111" when "1001",--9"1110111" when "1010",--A"1111100"when "1011",--b"0111001"when "1100",--c"1011110" when "1101",--d"1111001"when "1110",--E"1110001" when "1111",--F"0000000" when others;end behavior;六引脚定义及代码图2-1引脚定义代码:# Copyright (C) 1991-2008 Altera Corporation# Your use of Altera Corporation's design tools, logic functions # and other software and tools, and its AMPP partner logic# functions, and any output files from any of the foregoing# (including device programming or simulation files), and any# associated documentation or information are expressly subject # to the terms and conditions of the Altera Program License# Subscription Agreement, Altera MegaCore Function License# Agreement, or other applicable license agreement, including,# without limitation, that your use is for the sole purpose of# programming logic devices manufactured by Altera and sold by# Altera or its authorized distributors. Please refer to the# applicable agreement for further details.# Quartus II: Generate Tcl File for Project# File: ACOUNT10.tcl# Generated on: Tue Nov 03 11:40:42 2009# Load Quartus II Tcl Project packagepackage require ::quartus::projectset need_to_close_project 0set make_assignments 1# Check that the right project is openif {[is_project_open]} {if {[string compare $quartus(project) "ACOUNT10"]} {puts "Project ACOUNT10 is not open"set make_assignments 0}} else {# Only open if not already openif {[project_exists ACOUNT10]} {project_open -revision ACOUNT10 ACOUNT10} else {project_new -revision ACOUNT10 ACOUNT10}set need_to_close_project 1}# Make assignmentsif {$make_assignments} {set_global_assignment -name FAMILY "Cyclone II"set_global_assignment -name DEVICE EP2C35F672C8set_global_assignment -name ORIGINAL_QUARTUS_VERSION 8.0set_global_assignment -name PROJECT_CREATION_TIME_DATE "11:03:58 NOVEMBER 03, 2009"set_global_assignment -name LAST_QUARTUS_VERSION 8.0set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_id eda_palaceset_global_assignment -name DEVICE_FILTER_PACKAGE FBGAset_global_assignment -name DEVICE_FILTER_PIN_COUNT 672set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85set_global_assignment -name VHDL_FILE com_encode.vhdset_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Topset_global_assignment -name PARTITION_COLOR 14622752 -section_id Top set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region"set_global_assignment -name VHDL_FILE comcoun.vhdset_global_assignment -name VHDL_FILE COUNT10a.vhdset_global_assignment -name VHDL_FILE bcd_7seg.vhdset_global_assignment -name VHDL_FILE clkgen.vhdset_global_assignment -name VHDL_FILE ACOUNT10.vhdset_global_assignment -name VECTOR_WAVEFORM_FILE warefare.vwfset_global_assignment -name INCREMENTAL_VECTOR_INPUT_SOURCE warefare.vwfset_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Topset_location_assignment PIN_P25 -to clkset_location_assignment PIN_F6 -to Clrset_location_assignment PIN_B22 -to enset_location_assignment PIN_H23 -to LEDCOM[5]set_location_assignment PIN_G26 -to LEDCOM[4]set_location_assignment PIN_G25 -to LEDCOM[3]set_location_assignment PIN_G24 -to LEDCOM[2]set_location_assignment PIN_G23 -to LEDCOM[1]set_location_assignment PIN_P18 -to LEDCOM[0]set_location_assignment PIN_F26 -to LEDSEG[6]set_location_assignment PIN_F25 -to LEDSEG[5]set_location_assignment PIN_J20 -to LEDSEG[4]set_location_assignment PIN_J21 -to LEDSEG[3]set_location_assignment PIN_F23 -to LEDSEG[2]set_location_assignment PIN_F24 -to LEDSEG[1]set_location_assignment PIN_E25 -to LEDSEG[0]set_location_assignment PIN_B21 -to EN6# Commit assignmentsexport_assignments# Close projectif {$need_to_close_project} {project_close}}七仿真图2-2 创建VHDL文件图2-3 PIN口设置图2-4 创建VERILOG文件图2-5 运行八导入程序图2-7 下载图2-8 实验结果。
实验四 LED数码显示控制
实验四 LED数码显示控制一、实验目的了解并掌握移位指令在控制中的应用及其编程方法,进一步熟悉掌握程序调试的方法。
二、实验步骤1、根据程序中用到的输入输出点连接输入输出信号。
2、通过专用电缆线连接手持编程器与PLC主机(或连接电脑和PLC),逐条输入程序,检查无误后,将可编程控制器主机上的STOP/RUN按扭拨到RUN位置,运行指示灯点亮,表明程序开始运行,有关的指示灯将显示运行结果。
3、根据要求拨动输入开关(按钮),观察输出指示灯显示结果并记录。
三、控制要求启动开关闭合后,八段数码管开始显示:先是一段显示,显示次序是A、B、C、D、E、F、G、H,随后显示数字及字符,显示次序是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,再返回初始显示,并循环。
每隔1秒改变一次显示状态。
四、I/O分配输入:启动开关 X0输出:八段数码管 A B C D E F G H分别对应 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7五、参考程序(见第2页)六、思考1、请先根据控制要求自行编写程序,然后再看参考程序。
2、分析参考程序,思考问题:1)启动开关断开后再次接通,显示字符会混乱,为什么?如何解决?解决方案一:启动开关断开后停在当前状态,再接通后,接着断开前的状态显示。
解决方案二:启动开关断开后数码管全灭,再接通后,从头开始显示。
(如果觉得不好解决,也可考虑再设置一个停止信号)2)要求启动后显示数字9、8、7、6、5、4、3、2、1、0并循环,如何修改程序?(也可自行设定显示字符形状、数量、顺序)3)要求每隔2秒改变一次显示状态,如何修改?附:参考程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四数码管扫描显示控制器设计与实现一、实验目的1.掌握VHDL语言的语法规范,掌握时序电路描述方法。
2.掌握多个数码管动态扫描现实的原理及设计方法。
二、实验所用仪器及元器件1.计算机:装有Quartus软件,为VHDL语言提供操作场所。
2.直流稳压电源:通过USB接口实现,为实验开发板提供稳定电源。
3.数字系统与逻辑设计实验开发板:使试验结果下载到开发板上,实现整个实验的最终结果。
三、实验原理多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率大于50HZ,将看不到闪烁现象。
如下图10-1,是多个数码管动态扫描显示的电路连接图。
当闪烁显示的发光二极管闪烁频率较高时我们将观察到持续点亮的现象。
同理,当多个数码管依次显示,当切换速度够快时,我们将观察到所有数码管都是同事在显示。
一个数码管要稳定显示要求显示频率>50hz,那么6个数码管则需要50*6=300hz以上才能看到持续稳定点亮的现象。
图10-1中,cat1~cat6是数码管选通控制信号,分别对应于6个共阴极数码管的公共端,当catn=’0’时,其对应的数码管被点亮。
因此,通过控制cat1~cat6,就可以控制6个数码管循环依次点亮,图10-2为cat1~cat6的时序关系图。
四、实验内容1.用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真并下载验证其功能。
2.用VHDL语言设计并实现六个数码管滚动显示电路。
(1)循环左滚动,始终点亮6个数码管,左出右进。
状态为:012345→123450→234501→345012→450123→501234→012345(2)向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再一次从右边一个一个的点亮。
状态为012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中“X”表示数码管不显示。
五、实验设计思路及过程1.实现六个数码管串行扫描电路的思路及代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ljxh1 ISPORT(clk:IN STD_LOGIC;clear:IN STD_LOGIC;b:OUT STD_LOGIC_VECTOR(6 downto 0);c:OUT STD_LOGIC_VECTOR(0 to 5));END ljxh1;ARCHITECTURE a OF ljxh1 ISSIGNAL tmp:INTEGER RANGE 0 TO 5;SIGNAL x:INTEGER RANGE 0 TO 5:=0;SIGNAL s:INTEGER RANGE 0 TO 10:=0;SIGNAL clk_out:STD_LOGIC_VECTOR(0 to 5); BEGINp1:PROCESS(clear,clk)BEGINIF clear='0' THENtmp<=0;ELSIF clk'event AND clk='1' THENIF tmp=5 THENtmp<=0;x<=x+1;ELSEtmp<=tmp+1;END IF;IF x=6 THENx<=0;END IF;for i in 0 to 5 loopIF tmp<i THENclk_out(i)<='1';ELSIF tmp<i+1 THENclk_out(i)<='0';ELSEclk_out(i)<='1';END IF;END loop;for i in 0 to 5 loopc(i)<=clk_out(i);END loop;s<=tmp+x;CASE s ISWHEN 10 => b<="0110011"; --1WHEN 9 => b<="1111001"; --2WHEN 8 => b<="1101101"; --3WHEN 7 => b<="0110000"; --4WHEN 6 => b<="1111110"; --5WHEN 0 => b<="1111110"; --0WHEN 1 => b<="0110000"; --1WHEN 2 => b<="1101101"; --2WHEN 3 => b<="1111001"; --3WHEN 4 => b<="0110011"; --4WHEN 5 => b<="1011011"; --5END CASE;END IF;END PROCESS p1;END a;2.六个数码管滚动电路的思路及代码:library IEEE;Use IEEE.Std_Logic_1164.ALL;Use IEEE.Std_Logic_Unsigned.All;entity v0711509 isport(clk:IN STD_LOGIC;control1:IN STD_LOGIC;c:OUT STD_LOGIC_VECTOR(5 downto 0);b:OUT STD_LOGIC_VECTOR(6 downto 0));end v0711509;Architecture a Of v0711509 IsSIGNAL clkout: STD_LOGIC;signal stat:INTEGER RANGE 0 TO 11;signal count:INTEGER RANGE 0 TO 5;signal ck:INTEGER RANGE 0 TO 50000;TYPE ram_array1 IS ARRAY (0 TO 5) OF STD_LOGIC_VECTOR(6 downto 0);SIGNAL light1 : ram_array1:=("1111110","0110000","1101101","1111001","0110011","1011011");TYPE ram_array2 IS ARRAY (0 TO 11) OF STD_LOGIC_VECTOR(6 downto 0); SIGNAL light2 : ram_array2:=("1111110","0110000","1101101","1111001","0110011","1011011","00000 00","0000000","0000000","0000000","0000000","0000000");COMPONENT div50mport(clk_in : in std_logic;clk_out : out std_logic);END COMPONENT;Beginu1: div50m PORT MAP(clk_in=>clk,clk_out=>clkout);p1:process(clk)beginif clk'event and clk='1' thenif ck=50000 thenck<=0;if count=5 thencount<=0;elsecount<=count+1;end if;elseck<=ck+1;end if;end if;if clkout'event and clkout='1' thenif stat=11 thenstat<=0;elsestat<=stat+1;end if;end if;CASE count ISWHEN 0 => c <="011111";WHEN 1 => c <="101111";WHEN 2 => c <="110111";WHEN 3 => c <="111011";WHEN 4 => c <="111101";WHEN 5 => c <="111110";WHEN OTHERS => c <="111111";END CASE;if control1='0' thenCASE count ISWHEN 0 => b <=light1((stat mod 6));WHEN 1 => b <=light1(((stat+1) mod 6)); WHEN 2 => b <=light1(((stat+2) mod 6)); WHEN 3 => b <=light1(((stat+3) mod 6)); WHEN 4 => b <=light1(((stat+4) mod 6)); WHEN 5 => b <=light1(((stat+5) mod 6)); WHEN OTHERS => b <="0000000";END CASE;elseCASE count ISWHEN 0 => b <=light2((stat mod 12));WHEN 1 => b <=light2(((stat+1) mod 12)); WHEN 2 => b <=light2(((stat+2) mod 12)); WHEN 3 => b <=light2(((stat+3) mod 12)); WHEN 4 => b <=light2(((stat+4) mod 12)); WHEN 5 => b <=light2(((stat+5) mod 12)); WHEN OTHERS => b <="0000000";END CASE;end if;END PROCESS p1;END a;六、实验结果及分析:1.六个数码管串行扫描电路仿真结果结果分析:2.六个数码管滚动显示电路结果:结果分析:七、故障及问题分析1.每次实验中都应该注意到VHDL的文件名应与实体名一致,如果不一致编译会报错。