七段数码管显示

合集下载

七段数码管显示数字电路

七段数码管显示数字电路

七段数码管显示数字电路学习 2008—11—02 15:15:18 阅读2837 评论0 字号:大中小CD4511是一个用于驱动共阴极 LED (数码管)显示器的 BCD 码—七段码译码器,特点如下:具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流.可直接驱动LED显示器.CD4511 是一片 CMOS BCD-锁存/7 段译码/驱动器,引脚排列如图 2 所示。

其中a b c d 为 BCD 码输入,a为最低位。

LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码“8”,各笔段都被点亮,以检查显示器是否有故障。

BI为消隐功能端,低电平时使所有笔段均消隐,正常显示时, B1端应加高电平.另外 CD4511有拒绝伪码的特点,当输入数据越过十进制数9(1001)时,显示字形也自行消隐。

LE是锁存控制端,高电平时锁存,低电平时传输数据。

a~g是 7 段输出,可驱动共阴LED数码管。

另外,CD4511显示数“6”时,a段消隐;显示数“9”时,d段消隐,所以显示6、9这两个数时,字形不太美观图3是 CD4511和CD4518配合而成一位计数显示电路,若要多位计数,只需将计数器级联,每级输出接一只 CD4511 和 LED 数码管即可。

所谓共阴 LED 数码管是指 7 段 LED 的阴极是连在一起的,在应用中应接地。

限流电阻要根据电源电压来选取,电源电压5V时可使用300Ω的限流电阻。

用CD4511实现LED与单片机的并行接口方法如下图: (略)CD4511 引脚图其功能介绍如下:BI:4脚是消隐输入控制端,当BI=0 时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字.LT:3脚是测试输入端,当BI=1,LT=0 时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8"。

它主要用来检测数码管是否损坏。

LE:锁定控制端,当LE=0时,允许译码输出. LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。

共阳极七段数码管真值表

共阳极七段数码管真值表

共阳极七段数码管真值表共阳极七段数码管是一种常见的电子显示器件,它由七个段码组成,可以显示0-9的数字以及一些其他字符。

下面是共阳极七段数码管的真值表,包含七个段码a、b、c、d、e、f、g。

1. 段码a:* 数字0:0x3F(二进制:00111111)* 数字1:0x06(二进制:00000110)* 数字2:0x5B(二进制:01011011)* 数字3:0x4F(二进制:01001111)* 数字4:0x66(二进制:01100110)* 数字5:0x6D(二进制:01101101)* 数字6:0x7D(二进制:01111101)* 数字7:0x07(二进制:00000111)* 灭零:0x7C(二进制:01111100)2. 段码b:* 数字0:0x39(二进制:00111001)* 数字1:0x5F(二进制:01011111)* 数字2:0x49(二进制:01001001)* 数字3:0x65(二进制:01100101)* 数字4:0x77(二进制:01110111)* 数字5:0x79(二进制:01111111)* 数字6:0x3D(二进制:00111101)* 数字7:没有对应的编码。

可以通过特定的编程实现显示。

3. 段码c:* 数字0:没有对应的编码。

可以通过特定的编程实现显示。

* 数字8以下与段码b相同。

4. 段码d、e、f、g与b相同。

请注意,这里提供的编码是基于常见的共阳极七段数码管编码,不同型号或品牌的数码管可能会有不同的编码。

此外,对于大于9的数字或特殊字符,可能需要通过特定的编程来实现显示。

七段数码管显示

七段数码管显示

七段数码管显示设计报告目录一、设计任务二、题目分析与整体构思三、硬件电路设计四、程序设计五、心得体会一.设计任务数码的显示方式一般有三种:第一种是字型重叠式;第二种是分段式;第三种是点阵式。

目前以分段式应用最为普遍,主要器件是七段发光二极管(LED)显示器。

它可分为两种,一是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一是共阴极显示器(发光二极管的阳极都接在一个公共点上,使用时公共点接地)。

数码管动态扫描显示,是将所用数码管的相同段(a~g 和p)并联在一起,通过选位通信号分时控制各个数码管的公共端,循环依次点亮各个数码管。

当切换速度足够快时,由于人眼的“视觉暂留”现象,视觉效果将是数码管同时显示。

根据七段数码管的显示原理,设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分:1. 显示数据的设置:程序设定4 位数码管从左至右分别显示1、2、3、4;2. 动态扫描:实现动态扫描时序。

利用EXCD-1 开发板实现七段数码管的显示设计,使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。

四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接。

二.题目分析与整体构思使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7个发光LED 组成,呈“”字状,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA 相应引脚。

SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4 为四位7 段数码管的位选择端。

当其值为“1”时,相应的7 段数码管被选通。

当输入到7 段数码管SEG_A~ SEG_G 和SEG_DP 管脚的数据为高电平时,该管脚对应的段变亮,当输入到7 段数码管SEG_A~SEG_G 和SEG_DP 管脚的数据为低电平时,该管脚对应的段变灭。

七段数码管显示原理

七段数码管显示原理

七段数码管显示原理七段数码管是一种常见的数字显示器件,它由七个LED数码管组成,用来显示0-9的数字。

在数字电子技术中,七段数码管广泛应用于各种计数器、时钟、温度计、电子秤等设备中。

那么,七段数码管是如何实现数字显示的呢?接下来,我们将详细介绍七段数码管的显示原理。

首先,七段数码管由七个LED数码管组成,分别是a、b、c、d、e、f、g。

每个LED数码管代表一个固定的数字段,通过控制这些LED的亮灭,就可以显示出不同的数字。

比如,要显示数字0,就需要点亮a、b、c、d、e、f,而g不需要点亮;要显示数字1,就只需要点亮b、c;以此类推,通过控制这七个LED的亮灭组合,就可以显示出0-9的数字。

其次,七段数码管的显示原理是通过控制电流来控制LED的亮灭。

当给定一个数字时,通过数码管的控制电路,将相应的LED数码管接通,使得其发光,从而显示出对应的数字。

这个控制电路通常由数字信号转换为LED的控制信号,通过逻辑门、译码器等电子元件来实现。

当输入不同的数字信号时,控制电路会根据预设的真值表,输出相应的LED控制信号,从而实现数字的显示。

另外,七段数码管的显示原理还涉及到了多路复用技术。

在一些需要同时显示多个数字或者进行动态显示的场合,就需要用到多路复用技术。

通过多路复用技术,可以在同一个七段数码管上依次显示不同的数字,从而实现多个数字的显示或者动态显示。

多路复用技术通过快速切换不同的数字,使得人眼无法感知到数字的变化,从而实现了多个数字的显示或者动态显示。

总的来说,七段数码管的显示原理是通过控制LED的亮灭来显示数字,其中涉及到了控制电路、多路复用技术等内容。

七段数码管作为一种常见的数字显示器件,其显示原理的了解对于数字电子技术的学习和应用具有重要意义。

希望通过本文的介绍,读者能够更加深入地了解七段数码管的显示原理,为今后的学习和工作提供帮助。

简述七段数码管动态扫描显示原理

简述七段数码管动态扫描显示原理

简述七段数码管动态扫描显示原理
七段数码管动态扫描显示原理是指通过对七段数码管的各段进行逐个刷新,以实现数字、字母和符号等信息的显示。

七段数码管由7个LED灯组成,分别代表数字0~9和字母A~F等,可以通过控制各个LED的亮灭状态来显示不同的字符。

动态扫描显示原理是通过快速地在各个数码管之间切换显示内容,使得人眼无法察觉到切换的过程,从而产生连续的显示效果。

具体实现过程如下:
1. 将需要显示的数字或字符转换为相应的LED点亮状态,通过控制各个数码管的引脚来实现。

2. 通过控制锁存器的输入使得数据在锁存器中存储。

3. 通过控制锁存器的输出使得数据从锁存器输出到数码管的控制引脚上。

4. 通过控制位选锁存器的输出,选择显示的数码管。

5. 通过控制位选锁存器的使能引脚,控制数码管的亮灭状态。

6. 循环执行上述步骤,不断刷新各个数码管的显示内容,使得整个显示效果连续而流畅。

7. 根据需要的显示速度和亮度,可以调整刷新频率和亮灭时间的设置。

通过这种动态扫描的方式,只需要控制一部分引脚,就能够实现多
个七段数码管的显示,从而减少了所需的引脚数量和控制复杂度,提高了显示的效率和可靠性。

七段数码管动态显示控制

七段数码管动态显示控制

实验二七段数码管动态显示控制一、实验目的利用AT89S52和使用两位数码管显示器,循环显示两位数00-99。

其中P2.0和P2.1端口分别控制数码管的个位和十位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过驱动三极管给数码管相应的位供电,这时只要P3口送出数字的显示代码,数码管就能正常显示数字。

二、实验要求1、使用两位数码管显示器,循环显示两位数00-99;2、具有电源开关和指示灯,有复位键;3、数码管动态显示,即扫描方式,每一位每间隔一段时间扫描一次。

字符的亮度及清晰度与每位点亮的停留时间和每位显示的时间内轮换导通次数有关。

三、实验电路四、实验器材AT89S52;动态扫描显示;共阳极数码管;电阻五、实验原理说明图1 AT89S52引脚图图2 共阳极七段数码管引脚图1AT89S52引脚图,说明如下:按照功能,AT89S52的引脚可分为主电源、外接晶体振荡或振荡器、多功能I/O 口、控制和复位等。

1.多功能I/O口AT89S52共有四个8位的并行I/O口:P0、P1、P2、P3端口,对应的引脚分别是P0.0 ~ P0.7,P1.0 ~ P1.7,P2.0 ~ P2.7,P3.0 ~ P3.7,共32根I/O线。

每根线可以单独用作输入或输出。

①P0端口,该口是一个8位漏极开路的双向I/O口。

在作为输出口时,每根引脚可以带动8个TTL输入负载。

当把“1”写入P0时,则它的引脚可用作高阻抗输入。

当对外部程序或数据存储器进行存取时,P0可用作多路复用的低字节地址/数据总线,在该模式,P0口拥有内部上拉电阻。

在对Flash存储器进行编程时,P0用于接收代码字节;在校验时,则输出代码字节;此时需要外加上拉电阻。

②P1端口,该口是带有内部上拉电阻的8位双向I/O端口,P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。

西门子S7-200(七段数码管显示控制)实训指导

西门子S7-200(七段数码管显示控制)实训指导

七段数码管显示实训模块
实训指导
编写:
校对:
审核:
批准:
日期: 亚龙科技集团有限公司
七段数码管显示控制
一、实训目的
1、了解七段译码的工作原理;
2、进一步熟练掌握程序的编写与调试操作;
3、掌握编程的基本操作以及输入、检查、修改和运行等;
4、培养学生解决问题的能力;
二、实训器材
1、亚龙—西门子S7-200系列主机单元一台;
2、西门子S7-200编程电缆一条;
3、亚龙—七段数码管显示控制实训模块一台;
4、计算机(PC机)一台等;
5、安全连接线若干。

三、实训原理
七段数码管显示的控制要求:
四、 I/O分配表
输入说明输出说明
Q0.0 数码管段A
Q0.1 数码管段B
Q0.2 数码管段C
Q0.3 数码管段D
Q0.4 数码管段E
Q0.5 数码管段F
Q0.6 数码管段G
Q0.7 数码管段H
表1-1 七段数码管显示系统I/O分配表
五、 I/O接线图
西门子
S7-200
CPU 226
AC/DC/RLY
主机
图1-1.1七段数码管显示控制系统I/O的接线图
六、实训步骤
1、将电源开关拨到OFF状态,严格按图1-1.1所示接线,注意24V电源的正负不可短接,电路不要短路,否则会损坏PLC触点。

2、先将PLC的电源线插进PLC正面的电源孔中,再将另一端插到220V电源插板。

3、按照实训原理控制要求操作,观察实训现象。

实验2:8255七段数码管静动态显示

实验2:8255七段数码管静动态显示

微机实验报告书学号:姓名:班级:同组名单:实验日期: 2012.12.21实验题目:七段数码管的静态显示实验目标:掌握数码管显示数字的原理(功能:键盘输入一位十进制数字(0~9),用七段数码管显示。

)解题思路:1.静态显示:按图 10(a)连接好电路,将8255的A口PA0-PA6分别与七段数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp接地。

编程从键盘输入一位十进制数字,在七段数码管上显示出来。

2.动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。

编程在两个数码管上显示“56”。

程序框图:静态显示见图11(a),动态显示见图11(b)。

关键问题分析(静态显示):1、按键判断和程序结束判断按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断,只需要判断按键是否在0-9之间即可。

用以下程序即可:cmp al,'0'jl exit ; jl,条件转移指令,即在小于时转移cmp al,'9'jg exit ;jg, 条件转移指令,即在大于时转移程序中还要用到“cmp”即比较指令,用来比较输入数与0、9的大小关系。

程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS。

2、七段码显示。

实验指导书中给出了七段码的字型代码。

这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。

前提是必须将七段码字型编成数码表以字符串的形式写进程序中。

3、数字键ASCII码与数值间的转换。

因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现:sub al,30h程序清单:静态显示:data segmentioport equ 0c800h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使8255的A口为输出方式mov al,80h ;10000000B,控制字PA以方式0输出out dx,alzby: mov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收字符int 21hcmp al,'0' ;是否小于0jl exit ;如若小于0,则跳转到exit退出程序cmp al,'9' ;是否大于9jg exit ; 如若大于9,则跳转到exit退出程序sub al,30h ;将所得字符的ASCII码减30H,数字键ascii码同数值转换mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,aljmp zby ;转zbyexit: mov ah,4ch ;返回DOSint 21hcode endsend start动态显示:data segmentioport equ 0c800h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80h ;10000000B,控制字PA以方式0输出out dx,almov di,offset buffer1 ;设di为显示缓冲区loop2: mov bh,02zby: mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov al,0mov dx,io8255aout dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SIadd si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay: loop delay ;延时mov bh,byte ptr bzshr bh,1jnz zbymov dx,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21hcode endsend start运行结果:静态显示:在键盘上输入一个0-9的任意数字,会显示在数码管上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

七段数码管显示设计报告目录一、设计任务二、题目分析与整体构思三、硬件电路设计四、程序设计五、心得体会一.设计任务数码的显示方式一般有三种:第一种是字型重叠式;第二种是分段式;第三种是点阵式。

目前以分段式应用最为普遍,主要器件是七段发光二极管(LED)显示器。

它可分为两种,一是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一是共阴极显示器(发光二极管的阳极都接在一个公共点上,使用时公共点接地)。

数码管动态扫描显示,是将所用数码管的相同段(a~g 和p)并联在一起,通过选位通信号分时控制各个数码管的公共端,循环依次点亮各个数码管。

当切换速度足够快时,由于人眼的“视觉暂留”现象,视觉效果将是数码管同时显示。

根据七段数码管的显示原理,设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分:1. 显示数据的设置:程序设定4 位数码管从左至右分别显示1、2、3、4;2. 动态扫描:实现动态扫描时序。

利用EXCD-1 开发板实现七段数码管的显示设计,使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。

四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接。

二.题目分析与整体构思使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7个发光LED 组成,呈“”字状,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA 相应引脚。

SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4 为四位7 段数码管的位选择端。

当其值为“1”时,相应的7 段数码管被选通。

当输入到7 段数码管SEG_A~ SEG_G 和SEG_DP 管脚的数据为高电平时,该管脚对应的段变亮,当输入到7 段数码管SEG_A~SEG_G 和SEG_DP 管脚的数据为低电平时,该管脚对应的段变灭。

该四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接,当DIP 开关全部拨到上方时(板上标示为:7SEGLED),FPGA 的相应IO 引脚和四位7 段数码管连接,7 段数码管可以正常工作;当DIP 开关全部拨到下方时(板上标示为:EXPORT5),FPGA 的相应IO引脚与7 段数码管断开,相应的FPGA 引脚用于外部IO 扩展。

注意:无论拨码开关断开与否,FPGA 的相应IO 引脚都是与外部扩展接口连接的,所以当正常使用数码管时,不允许在该外部扩展接口上安装任何功能模块板。

数码管选通控制信号分别对应4 个数码管的公共端,当某一位选通控制信号为高电平时,其对应的数码管被点亮,因此通过控制选通信号就可以控制数码管循环依次点亮。

一个数码管稳定显示要求的切换频率要大于50Hz,那么4 个数码管则需要50×4=200Hz 以上的切换频率才能看到不闪烁并且持续稳定显示的字符。

三.硬件电路设计设计结构图如下:四.软件设计(1)创建工程制定工程名,工程路径以及顶层设计所使用的输入方式,此设计我们选择硬件描述语言作为顶层设计的输入方式HDL。

(2)选择目标器件(3)创建新源文件这里我们选择“VHDL Module”,进行新源文件模块定义,所定义的内容是所要设计模块的实体说明,即模块的端口说明。

本实验所要实现的是编码器的设计,设定SW0与SW1的四个状态分别作为SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4四位7 段数码管的位选择端,共8 个输出信号控制四个数码管显示,选择输出为总线模式(Bus),Msb、Lsb 分别表示最大端口号与最小端口号(注意:选择端口方向in、out、inout)。

检查模块端口定义是否正确。

(4)添加源文件(5)完成工程创建在工程设置统计窗口,可以看到对工程的描述总结,目标器件的描述,以及新建源文件的总结,此工程创建完成。

(6)设计输入包括库的声明,包的声明,完整的实体说明以及结构体框架。

使用VHDL 语言设计完善数码管显示的设计,拨动开关SW0~SW1 ,其四个状态为四个位选择端,LED0~LED3 作为输出显示,以观察实验结果。

1.LED 与编码器电路对应关系(7)仿真设计代码输入完成后,需要对设计进行波形仿真。

有添加波形仿真文件,仿真波形文件时钟设置,设置输入信号波形和波形仿真这几个步骤。

(8)设计综合Xilinx 综合工具对设计进行行为级综合,将系统直接从行为级描述综合为寄存器传输级描述。

综合过程中主要完成三个步骤:首先为语法检查,检查设计文件语法是否有错误;其次为编译过程,翻译和优化HDL 代码,将其转换为综合工具可以识别的元件序列;最后为映射过程,将这些可识别的元件序列转换为可识别的目标技术的基本元件。

Synthesis 工具即用来完成设计综合,它可完成以下任务查看综合报告(View Synthesis Report)、查看RTL 原理图(View RTL Schematic)、查看技术原理图(Vies Technology Schematic)、检查语法(Check Syntax)、产生综合后仿真模型(Generate Post-Synthesis Simulation Model)。

(9). 引脚分配信号名及对应板上资源信号名FPGA 引脚分配时钟脉冲clk P80七段数码管a 段a_to_g<0> P49七段数码管b 段a_to_g<1> P42七段数码管c 段a_to_g<2> P45七段数码管d 段a_to_g<3> P41七段数码管e 段a_to_g<4> P48七段数码管f 段a_to_g<5> P50七段数码管g 段a_to_g<6> P47七段数码管小数点dp P40片选an<0> P34片选an<1> P35片选an<2> P36数码管1 片选an<3> P39复位(SW0) btn P43(10)设计实现设计综合完成后,即进行设计实现(Implement)。

实现过程主要分为三个步骤:翻译逻辑网表(Translate)、映射到器件单元(Map)、布局布线(Place&Route)。

在处理子窗口,鼠标双击Implement Design,信息输出窗口会显示设计信息。

(11)生成下载文件及目标板配置处理子窗口中双击Generate Programming File,生成可编程文件。

而后双击Configure Target Device,进行目标板配置。

开发板正确连接,并上电后,可在ISE 用户区看到两个可配置芯片,分别为4Mb 的平台flash 与FPGA xc3s500e台flash 与FPGA xc3s500e。

同时出现平台Flash 配置文件指定窗口,绿色芯片表示当前进行配置的芯片。

该设计我们选择对FPGA xc3s500e 进行配置,平台Flash 配置窗口点击Cancel。

选定FPGA 芯片图标,右键单击选择program,在随后弹出的“Device Programming Properties”对话框直接点击ok,对FPGA 进行编程。

文件下载成功,则显示“Program Succeeded”可通过开发板观察相应实验现象。

至此,使用ISE 软件设计基本逻辑门电路已经完成。

(12)程序代码1. 顶层文件library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clk7seg_top isPort ( clk : in STD_LOGIC;btn : in STD_LOGIC; --复位信号a_to_g : out STD_LOGIC_VECTOR (6 downto 0);an : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end clk7seg_top;architecture Behavioral of clk7seg_top iscomponent clk7segPort ( x : in STD_LOGIC_VECTOR (15 downto 0);clk : in STD_LOGIC; --100MHzclr : in STD_LOGIC;a_to_g : out STD_LOGIC_VECTOR (6 downto 0);an : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end component;signal x : std_logic_vector(15 downto 0);beginx<=X"1234"; --设定x 初值U0 : clk7seg port map(x=>x,clk=>clk,clr=>btn,a_to_g=>a_to_g,an=>an,dp=>dp);end Behavioral;2. 七段数码管显示程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clk7seg isPort ( x : in STD_LOGIC_VECTOR (15 downto 0); clk : in STD_LOGIC; --50MHzclr : in STD_LOGIC;a_to_g : out STD_LOGIC_VECTOR (6 downto 0); an : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end clk7seg;architecture Behavioral of clk7seg issignal s : std_logic_vector (1 downto 0);signal digit : std_logic_vector (3 downto 0);signal clkdiv : std_logic_vector (20 downto 0); signal aen : std_logic_vector (3 downto 0) := "1111"; begindp <= '1';s <= clkdiv(20 downto 19); --片选process(clr)beginif(clr='1') thenclkdiv <= (others => '0');elsif(rising_edge(clk)) thenclkdiv <= clkdiv + 1;end if;end process;process(aen,s)beginan <= "0000";if(aen(conv_integer(s))='1') thenan(conv_integer(s)) <= '1'; --an(n)为1 则片选第n 个数码管end if;end process;process(s)begincase s iswhen "00" => digit <= x(3 downto 0);when "01" => digit <= x(7 downto 4);when "10" => digit <= x(11 downto 8);when others => digit <= x(15 downto 12); --4 个数码管轮流显示,有延时end case;end process;process(digit)begincase digit iswhen x"0" => a_to_g <= "1111110";--"0000001";when x"1" => a_to_g <= "0110000";--"1001111";when x"2" => a_to_g <= "1101101";--"0010010";when x"3" => a_to_g <= "1111001";--"0000110";when x"4" => a_to_g <= "0110011";--"1001100";when x"5" => a_to_g <= "1011011";--"0100100";when x"6" => a_to_g <= "1011111";--"0100000";when x"7" => a_to_g <= "1110000";--"0001111";when x"8" => a_to_g <= "1111111";--"0000000";when x"9" => a_to_g <= "1111011";--"0000100";when x"A" => a_to_g <= "1110111";--"0001000";when x"B" => a_to_g <= "0011111";--"1100000";when x"C" => a_to_g <= "1001110";--"0110001";when x"D" => a_to_g <= "0111101";--"1000010";when x"E" => a_to_g <= "1001111";--"0110000";when others => a_to_g <= "1000111";--"0111000";end case;end process;end Behavioral;五.调试将SW0~SW6为a_to_g 来改变其状态来观察,结果如下:SW0~SW6 "1111110",显示"0";SW0~SW6"0110000",显示"1";SW0~SW6 "1101101"显示"2";SW0~SW6 "1111001 "显示"3";SW0~SW6 "0110011 "显示"4";SW0~SW6"1011011 "显示"5";SW0~SW6 "1011111"显示"6";SW0~SW6“1110000"显示"7";SW0~SW6"1111111"显示"8";SW0~SW6 "1111011"显示"9";SW0~SW6 "1110111"显示"A";SW0~SW6"0011111"显示"B";SW0~SW6 "1001110"显示"C";SW0~SW6"0111101"显示"D";SW0~SW6"1001111"显示"E";SW0~SW6 "1000111"显示其他;在软件中波形图如下:调试结果:数码管显示成功实现。

相关文档
最新文档