实验四 八位七段数码管动态显示电路的设计

合集下载

八位七段数码管动态显示电路设计

八位七段数码管动态显示电路设计

八位七段数码管动态显示电路的设计一七段显示器介绍七段显示器,在许多产品或场合上经常可见。

其内部结构是由八个发光二极管所组成,为七个笔画与一个小数点,依顺时针方向为A、B、C、D、E、F、G与DP等八组发光二极管之排列,可用以显示0~9数字及英文数A、b、C、d、E、F。

目前常用的七段显示器通常附有小数点,如此使其得以显示阿拉伯数之小数点部份。

七段显示器的脚位和线路图如下图4.1所示( 其第一支接脚位于俯视图之左上角)。

图4.1、七段显示器俯视图由于发光二极管只有在顺向偏压的时候才会发光。

因此,七段显示器依其结构不同的应用需求,区分为低电位动作与高电位动作的两种型态的组件,另一种常见的说法则是共阳极( 低电位动作)与共阴极( 高电位动作)七段显示器,如下图4.2所示。

( 共阳极) ( 共阴极)图4.2、共阳极(低电位动作)与共阴极(高电位动作)要如何使七段显示器发光呢?对于共阴极规格的七段显示器来说,必须使用“ Sink Current ”方式,亦即是共同接脚COM为VCC,并由Cyclone II FPGA使接脚成为高电位,进而使外部电源将流经七段显示器,再流入Cyclone II FPGA的一种方式本实验平台之七段显示器模块接线图如下图4.5所示。

此平台配置了八组共阳极之七段显示器,亦即是每一组七段显示器之COM接脚,均接连至VCC电源。

而每一段发光二极管,其脚位亦均与Cyclone II FPGA接连。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

图4.5、七段显示器模块接线图七段显示器之常见应用如下➢可作为与数值显示相关之设计。

⏹电子时钟应用显示⏹倒数定时器⏹秒表⏹计数器、定时器⏹算数运算之数值显示器二七段显示器显示原理七段显示器可用来显示单一的十进制或十六进制的数字,它是由八个发光二极管所构成的( 每一个二极管依位置不同而赋予不同的名称,请参见图4.1 ) 。

(完整word版)八位七段数码管动态显示电路设计

(完整word版)八位七段数码管动态显示电路设计

八位七段数码管动态显示电路的设计一七段显示器介绍七段显示器,在许多产品或场合上经常可见。

其内部结构是由八个发光二极管所组成,为七个笔画与一个小数点,依顺时针方向为A、B、C、D、E、F、G与DP等八组发光二极管之排列,可用以显示0~9数字及英文数A、b、C、d、E、F。

目前常用的七段显示器通常附有小数点,如此使其得以显示阿拉伯数之小数点部份。

七段显示器的脚位和线路图如下图4.1所示( 其第一支接脚位于俯视图之左上角)。

图4.1、七段显示器俯视图由于发光二极管只有在顺向偏压的时候才会发光。

因此,七段显示器依其结构不同的应用需求,区分为低电位动作与高电位动作的两种型态的组件,另一种常见的说法则是共阳极( 低电位动作)与共阴极( 高电位动作)七段显示器,如下图4.2所示。

( 共阳极) ( 共阴极)图4.2、共阳极(低电位动作)与共阴极(高电位动作)要如何使七段显示器发光呢?对于共阴极规格的七段显示器来说,必须使用“ Sink Current ”方式,亦即是共同接脚COM为VCC,并由Cyclone II FPGA使接脚成为高电位,进而使外部电源将流经七段显示器,再流入Cyclone II FPGA的一种方式本实验平台之七段显示器模块接线图如下图4.5所示。

此平台配置了八组共阳极之七段显示器,亦即是每一组七段显示器之COM接脚,均接连至VCC电源。

而每一段发光二极管,其脚位亦均与Cyclone II FPGA接连。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

图4.5、七段显示器模块接线图七段显示器之常见应用如下可作为与数值显示相关之设计。

⏹电子时钟应用显示⏹倒数定时器⏹秒表⏹计数器、定时器⏹算数运算之数值显示器二七段显示器显示原理七段显示器可用来显示单一的十进制或十六进制的数字,它是由八个发光二极管所构成的( 每一个二极管依位置不同而赋予不同的名称,请参见图4.1 ) 。

4位7段数码管驱动电路设计要求

4位7段数码管驱动电路设计要求

4位7段数码管驱动电路设计要求4位7段数码管驱动电路图1 开发板电路原理图信号说明1. iRST_N(异步复位)当iRST_N信号为低时,Seg7_Driver模块中的所有寄存器异步复位为初值。

2. iCLK模块的输入时钟40MHz。

3. iSeg_Val[15:0]7段数码管输入二进制值,0x0~0xFiSeg_Val[15:12],左侧第一位7段数码管的值。

iSeg_Val[11: 8],左侧第两位7段数码管的值。

iSeg_Val[ 7: 4],左侧第三位7段数码管的值。

iSeg_Val[ 3: 0],左侧第四位7段数码管的值。

4. iDot_Val[3:0]各位7段数码管小数点的显示,值为1表示显示小数点,0表示不显示小数点。

iDot_Val[3],左侧第一位7段数码管的小数点。

iDot_Val[2],左侧第两位7段数码管的小数点。

iDot_Val[1],左侧第三位7段数码管的小数点。

iDot_Val[0],左侧第四位7段数码管的小数点。

5. oDisplay[7:0]7段数码管的数据信号。

4位7段数码管共用数据信号。

7段数码管为共阳极连接,各段数据线为0时,对应段发光。

6. oDis_En[3:0]各位7段数码管的使能信号,低有效。

oDis_En[3],左侧第一位7段数码管的使能信号。

oDis_En[2],左侧第两位7段数码管的使能信号。

oDis_En[1],左侧第三位7段数码管的使能信号。

oDis_En[0],左侧第四位7段数码管的使能信号。

建议的分块:将整个驱动电路分成Seg7_Ctrl模块与Seg7_Hex2seg模块Seg7_Ctrl模块负责产生数码管动态显示的控制信号oDis_En的时序Seg7_Hex2Seg模块负责将二进制值转换成数据码管显示的数据值,包括小数点的值。

注意点:1. 动态显示过程是利用人眼的视觉残留现象来实现的,应选择适当的数码管扫描频率。

可先选择数码管的扫描显示的刷新率为125Hz(8ms),即每位数码管用2ms。

实验报告 实验七 八段数码管显示实验

实验报告      实验七   八段数码管显示实验

实验报告实验七八段数码管显示实验----b46086b6-6eaf-11ec-8071-7cb59b590d7d实验报告--实验七-八段数码管显示实验EDA实验报告七段或八段数码管显示实验1、实验目的1)了解数码管动态显示的原理。

2)了解如何通过总线控制数码管显示器2、实验要求:利用实验仪提供的显示电路,动态显示一行数据.提示:显示显示缓冲区的内容(例如,可以使用60H~65h作为缓冲区)。

修改显示缓冲区的内容时,可以显示修改后的内容(为键盘扫描和显示实验做准备)。

3、实验说明实验仪器提供了一个6位8段编码的LED显示电路。

学生可以控制显示,只要他们根据地址输出相应的数据。

显示器共有6位,以动态方式显示。

8位段码和6位码由两个74ls374芯片输出。

位代码由mc1413或uln2022反相驱动后,选择相应的显示位。

本实验仪中8位段码输出地址为0x004h,位码输出地址为0x002h。

此处x是由key/ledcs决定,参见地址译码。

在进行键盘和led实验时,需要将按键/LEDC连接到相应的地址解码。

以便使用相应的地址进行访问。

例如,如果钥匙/ledcs连接到CS0,则段代码地址为08004h,位代码地址为08002h。

七段数码管的字型代码表如下表:a-----f | | b | |------| g | e | c-----d。

h显示字体gfedcba段代码001111113FH100011006H210110115BH3100111114FH41100111066H51016DH61111017DH70000 1107H81111117FH911011116fha111011177hb11111007chc011100139hd10111105ehe111100179hf111000171h4.原理图和接线5、实验内容1)使用仪器和仪表开发平台模型本实验用到了wave6000软件平台,电脑一台,lab6000实验箱,示波器,若干连线,串行数据线。

实验4~七段数码管

实验4~七段数码管

实验五七段数码管一.实验目的掌握数码管显示数字的原理二,实验设备TPC-USB9(块USB总线接口模块,一个扩展实验台及软件集成实验环境)二.实验原理与内容按电路图连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接闭) ,CS接288H ~28FH。

1、8255控制字寄存器端口地址28BH、A口地址288H、C口地址28AH。

2、动态显示:按图17连接好电路,将8255的A口分别与七段数码管a~g相连,S1接+5V,S0、dp接地。

编程在一位七段数码管上将本组某位同学的学号由高到低动态显示出来,然后返回DOS。

四、编程提示实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

七段数码管的字型代码表如下表:五、程序流程图六、汇编程序stack segment stack ‘stack’dw 32 dup(0)stack endsdata segmentbegin proc farassume cs:code,ds:data,ss:stackpush dssub ax,axpush axmov ax,datamov ds,ax;/**************************************************************/ MOV DX,28BH ;设置8255为端口A的工作方式0 MOV AL,00HOUT DX,ALMOV DX,288H ;设置端口A的地址MOV AL,06H ;显示数字1OUT DX,ALCALL DELAYMOV AL,06H ;显示数字1OUT DX,ALCALL DELAYMOV AL,3FH ;显示数字0OUT DX,ALCALL DELAYMOV AL,07H ;显示数字7OUT DX,ALCALL DELAYMOV AL,3FH ;显示数字0OUT DX,ALCALL DELAYMOV AL,4FH ;显示数字3OUT DX,ALCALL DELAYMOV AL,06H ;显示数字1OUT DX,ALCALL DELAYMOV AL,4FH ;显示数字3OUT DX,ALCALL DELAYMOV AL,06H ;显示数字1OUT DX,ALCALL DELAYMOV AH,4CH ;返回DOSINT 21HRETBEGIN ENDPDELAY PROC ;设置延时程序PUSH AXPUSH BXPUSH CXPUSH DXMOV BX,20000L1:MOV CX,1000L2:LOOP L2DEC DXJNZ L1POP DXPOP CXPOP BXPOP AXRETDELAY ENDPCODE ENDSEND BEGIN六、心得体会:通过本次试验,让我熟悉了用EDIT进行汇编程序编写的操作,也加强了在DOS上编译、连接、运行汇编程序的步骤。

实验四--单片机驱动数码管显示

实验四--单片机驱动数码管显示

实验四单片机驱动数码管显示一实验目的1 学习单片机驱动数码管动态显示的电路设计和编程方法二实验原理1、单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。

LED、LCD显示器有两种显示结构:段显示和点阵显示。

七段数码管显示为了显示数字或字符,必须对数字或字符进行编码。

七段数码管加上一个小数点,共计8段。

因此为LED显示器提供的编码正好是一个字节。

字母一般用米字型。

编码表:0x3f 0x06 0x5b 0x4f 0x66 0x6d0 1 2 3 4 50x7d 0x07 0x7f 0x6f 0x77 0x7c6 7 8 9 A B0x39 0x5e 0x79 0x71 0x00C D E F 无显示七段数码管对应八位由低到高:a,b,c,d,e,f,g,dp例:数码管显示2则要点亮a,b,g,e,d段,对应的八位是01011011数码管动态显示方式是将所有显示位的段选择线并联在一起,有统一的I/O资源来控制。

各个数码管公共端也有I/O资源来控制,分时的选通各个数码管进行动态显示。

每个瞬间只能选通一个数码管,人眼的暂留时间为,每个数码管的选通时间必须在以内,通常选择15ms~20ms。

电路图见实验附图。

三实验内容理解动态显示电路图,参考驱动程序,单片机P0口作段码输出控制,P1口作位码控制,使单片机驱动6个7段数码管输出实验当天年、月、日六位数字。

四、实验步骤(1)单片机最小应用系统1的P0口接段码口a~h,P1口接位码口S1~S6。

(2)在KEIL软件下编写程序并调试,完成实验内容要求。

(3)下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。

下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。

五参考程序与电路汇编语言参考程序:ORG 0000HLJMP STARTORG 0030HSTART: MOV R0,#30HMOV R1,#40HMOV 30H,#1MOV 31H,#2MOV 32H,#1MOV 33H,#1MOV 34H,#2MOV 35H,#0START1: MOV DPTR,#TABMOV R3,#6LOOP: MOV A,@R0MOVC A,@A+DPTRMOV @R1,AINC R0INC R1DJNZ R3,LOOPMOV R3,#6MOV R1,#40HMOV A,#20HLOOP1: MOV P1,@R1MOV P2,AACALL DELAYMOV P2,#00HRR AINC R1DJNZ R3,LOOP1LJMP START1TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,58H,5EH,7BH,71H,00H,40H DELAY: MOV R4,#100LOOP2: DJNZ R4,LOOP2RETENDC语言参考程序:#include <reg51.h>#include <intrins.h>unsigned char code table[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsigned char date[]={1,2,1,1,2,0};void delay(){unsigned char j;for(j=0;j<=100;j++);}void main(){unsigned char i,a;while(1){a=0x40;for(i=0;i<6;i++){P1=table[date[i]];a=_cror_(a,1);P2=a;delay();P2=0x00;}}}数码管动态显示电路图(位选信号为高电平,段选信号为高电平):。

8位数码管动态显示电路设计

8位数码管动态显示电路设计

电子课程设计—8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:姓名:学号:指导老师:2014年12月目录一、设计任务与要求................................................. (3)二、总体框图................................................. (3)三、选择器件................................................. (3)四、功能模块................................................. (9)五、总体设计电路图................................................. . (10)六、心得体会.................................................. .. (12)8位数码管动态显示电路设计一、设计任务与要求1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。

2. 要求在某一时刻,仅有一个LED数码管发光。

3. 该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。

4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。

5、研究循环地址码发生器的时钟频率和显示闪烁的关系。

二、总体框图设计的总体框图如图2-1所示。

图2-1总体框图三、选择器件1、数码管数码管是一种由发光二极管组成的断码型显示器件,如图1所示。

U13DCD_HEX图1 数码管数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。

数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED 的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。

而共阳极就是将八个LED的阳极连在一起。

硬件实验四--八段数码管显示

硬件实验四--八段数码管显示

硬件实验四 八段数码管显示一、实验要求利用实验箱提供的显示电路,动态显示一行数据.二、实验目的1. 了解数码管动态显示的原理。

2. 了解用总线方式控制数码管显示。

三、实验线路及连线四、实验说明1.本实验箱提供了6 位8段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

8位段码、6位位码是由两片74LS374输出。

位码经MC1413或ULN2003倒相驱动后,选择相应显示位。

本实验箱中8位段码输出地址为0X004H ,位码输出地址为0X002H 。

此处X 是由KEY/LED CS 决定,参见地址译码。

做键盘和LED 实验时,需将KEY/LED CS 接到相应的地址译码上。

以便用相应的地址来访问。

例如,将KEY/LED CS 接到CS0上,则段码地址为08004H ,位码地址为08002H 。

连线 连接孔1连接孔2 1KEY/LED_CS CS0 位选通信号 (0x002H) 段码输出(0x004H) 数据总线七段数码管的字型代码表如下表:五、程序参考程序、框图OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h data endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpStart proc nearmov ax, datamov ds, axmov Num, 0MLoop:inc Nummov ch,Nummov ah,0mov cl,6mov bx,offset LEDBufFillBuf:mov si, offset LEDMapmov al,chand al,0fhadd ax,simov si,axmov al,[si] ; 数据转换成显示码 mov [bx], al ; 显示码存入显示缓冲 inc bxinc chdec cljnz FillBufmov DelayT,20DispAgain:call DisplayLED ; 显示dec DelayTjnz DispAgainjmp MLoopStart endpcode endsend start六、实验步骤(1) 在实验箱断电的情况下连好线。

实验四 七段数码管显示实验报告

实验四 七段数码管显示实验报告

实验四七段数码管显示实验一、实验目的掌握数码管显示数字的原理。

二、实验内容1.静态显示:数码管为共阴极,通过BCD码译码驱动器CD4511驱动,其输入端A~D输入4位BCD码,位码输入低电平选中。

按图4-1连接好电路,将8255的A口PA0~PA3与七段数码管LED1的BCD码驱动输入端A1~D1相连,8255的A口PA4~PA7与七段数码管LED2的BCD码驱动输入端A2~D2相连,8255的B口PB0~PB3与七段数码管LED3的BCD码驱动输入端A3~D3相连,8255的B口PB4~PB7与七段数码管LED4的BCD码驱动输入端A4~D4相连,8255的C口PC0~PC3分别与七段数码管LED4~LED4的位驱动输入端DG1~DG4相连。

编程从键盘上每输入4个0~9数字,在七段数码管LED4~LED4上依次显示出来。

图4-12.动态显示:数码管为共阴极,段码采用相同驱动,输入端加高电平,选中的数码管对应段点亮,位码采用同相驱动,位码输入端低电平选中,按图4-2连接好电路,图中只画了2个数码管,实际是8个数码管,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~g相连(32TCI0模块上的J1连32LED8模块J2),8255的C口的PC0~PC7接七段数码管的段码驱动输入(32TCI0模块上的J3连32LED8模块J1),跳线器K1连2和3。

编程在8个数码管上显示“12345678”。

按任意键推出运行。

图4-2三、编程提示1.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不用,编程时需要了解当前的微机使用那段IO地址并进行处理。

2.对实验内容1,七段数码管字型代码与输入的关系如下表:四、参考流程图1.实验内容一的参考流程图图4-3 2.实验内容二的参考流程图图4-4五、参考程序1.内容一的参考程序源程序清单如下:data segmentioport equ 0c400h-0280hio8255a equ ioport+288hio8255b equ ioport+289hio8255c equ ioport+28ahio8255k equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,'Input a num (0--9),other key is exit:',0dh,0ah,'$'bz db ?cz db 04hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255k ;使8255的A口为输出方式mov ax,80hout dx,alsss0: mov si,offset bzmov cx,04hsss1: mov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收字符int 21hcmp al,'0' ;是否小于0jl exit ;若是则退出cmp al,'9' ;是否大于9jg exit ;若是则退出sub al,30h ;将所得字符的ASCII码减30Hmov [si],al ;存入显示缓冲区inc si ;显示缓冲区指针加1dec cx ;判断输入满4个数字吗?jnz sss1 ;不满继续mov si,offset bz ;从显示缓冲区取第一个数字的BCD 码mov al,[si]and al,0fh ;屏蔽高四位暂存ALinc si ;显示缓冲区指针加1mov ah,[si] ;取第二个数字的BCD码到AHsal ah,4h ;右移4次到高四位add al,ah ;两个BCD码合并成一个字节mov bl,al ;暂存入BLinc simov al,[si] ;取第三个数字的BCD码and al,0fhinc simov ah,[si] ;取第四个数字的BCD码到AHsal ah,4hadd ah,almov al,ahmov dx,io8255a ;从8255的A口输出(后两个数字)out dx,almov al,blmov dx,io8255b ;从8255的B口输出(前两个数字)out dx,almov al,0f0hmov dx,io8255c ;从8255的C口输出位码out dx,almov dl,0ffhmov ah,06int 21hje sss0 ;有键按下则退出exit: mov ah,4ch ;返回int 21hcode endsend start2.内容二的参考程序源程序清单如下:data segmentioport equ 0C400h-0280hio8255c equ ioport+28ahio8255k equ ioport+28bhio8255a equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 01h,02h,03h,04h,05h,06h,07h,08h ;存放要显示的十位和个位con db ? ;位码data endscode segmentassume cs:code, ds:datastart: mov ax,datamov ds,axmov dx,io8255k ;将8255设为A口C口输出mov al,80hout dx,alloop2: mov al,08h ;设置数码管位计数器初值到CON mov byte ptr con,almov si,offset buffer1 ;置显示缓冲器指针SImov ah,7fh ;置位码初值disp0: mov cx,0ffffhmov bl,ds:[si] ;取显示缓冲区显示值存BXmov bh,0hpush simov dx,io8255c ;位码从C口输出mov al,ahout dx,almov dx,io8255amov si,offset led ;置led数码表偏移地址为SIadd si,bx ;求出对应的led数码mov al,byte ptr [si]out dx,al ;段码从A口输出disp1: loop disp1 ;延时mov cx,0ffffhdisp2: loop disp2ror ah,01h ;位码右移1位pop siinc si ;显示缓冲区指针加1mov al,byte ptr condec almov byte ptr con,aljnz disp0 ;数码管位计数器减1为0吗?,不为0继续mov dx,io8255a ;为0,关数码管显示mov al,0out dx,almov dl,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov ah,4ch ;返回int 21hcode endsend start实验总结:通过这次试验,我了解到自定义数据类型可以根据自己的需要方便设定,有很大的灵活性。

【设计】实验四八位七段数码管动态显示电路的设计

【设计】实验四八位七段数码管动态显示电路的设计

【关键字】设计module sev_seg_led( Clk, //Key_n,Sev_Seg_Led_Data_n, //参数名del);input Clk; //50mhz脉冲名input [3:0] Key_n; //4个按键key——1 2 3 4output [6:0] Sev_Seg_Led_Data_n; //7个输出output [2:0] del; /*3-8译码器输出*///输控制八个信号/*---------------------------------------------------*//*---------------------------------------------------*/reg [6:0] Led1,Led2; //中间量reg [31:0] Cout;reg Clk_En;reg [2:0] i;reg [2:0] del;always @(posedge Clk ) //判断clk的值1?0?posedge上升沿if whenbegin // 括号{}//d50_000 十进制五万'd1Cout <= (Cout == 32'd50_000) ? 32'd0 : (Cout + 32'd1); //d十进制//分频//《=负值语句,可同时执// ==判断句Clk_En <= (Cout == 32'd50_000) ? 1'd1 : 1'd0; //分频。

if(Clk_En) //==0.5s 判断是否等于1begini <= i + 3'd1; //i+1del<=i; //是三八译码器三个输入端自身+1endendalways@(Key_n) //判断四个按键是否有值,是否有变化begincase (Key_n)4'b0000: begin Led2<= 7'b0111_111;Led1<=7'b0111_111; end //b二进制0111 个位数4'b0001: begin Led2<= 7'b0000_110;Led1<=7'b0111_111;end4'b0010: begin Led2<= 7'b1011_011;Led1<=7'b0111_111;end4'b0011: begin Led2 <= 7'b1001_111;Led1<=7'b0111_111;end4'b0100: begin Led2 <= 7'b1100_110;Led1<=7'b0111_111;end4'b0101: begin Led2 <= 7'b1101_101;Led1<=7'b0111_111;end4'b0110: begin Led2 <= 7'b1111_101;Led1<=7'b0111_111;end4'b0111: begin Led2 <= 7'b0000_111;Led1<=7'b0111_111;end4'b1000: begin Led2<= 7'b1111_111;Led1<=7'b0111_111;end4'b1001: begin Led2 <= 7'b1101_111;Led1<=7'b0111_111;end4'b1010: begin Led2 <= 7'b0111_111;Led1<=7'b0000_110;end//十位数4'b1011: begin Led2 <= 7'b0000_110; Led1<=7'b0000_110;end4'b1100: begin Led2 <= 7'b1011_011;Led1<=7'b0000_110;end4'b1101: begin Led2 <= 7'b1001_111;Led1<=7'b0000_110; end4'b1110: begin Led2 <= 7'b1100_110;Led1<=7'b0000_110;end4'b1111: begin Led2 <= 7'b1101_101;Led1<=7'b0000_110; end//用两位数码管显示//2个数码管奇数位偶数位default :begin Led1=Led2 <= 7'b0000_000;endendcaseend/*---------------------------------------------------*/assignSev_Seg_Led_Data_n =(del%2)?Led1:Led2;/*---------------------------------------------------*/Endmodule此文档是由网络收集并进行重新排版整理.word可编辑版本!。

七段数码管的动态显示

七段数码管的动态显示

七段数码管的动态显示1、实验内容:数码管的动态显示利用实验板上的某四位数码管依次显示16 进制的0000~FFFF。

为实现功能重用的目的,我们仍然将系统划分为几个部分:(1)时钟分频模块:将开发板上的50MHz 高速时钟进行分频产生一个5Hz 的时钟用于计数。

(2)计数模块:实现从0000~FFFF 的计数功能。

用4位十六进制数来实现,其中15‐12 位表示十六进制数的最高位,11‐8 位表示次高位,7‐4 位表示次低位,3‐0位表示最低位(3)数码管动态显示模块:将计数模块的输出作为显示字符的输入值,分时送出相应段码,实现数码管的动态显示效果。

2、参考程序:module SegDynamicDisp(CLK,rst_n,SEG0,SEG1,SEG2,SEG3);//数码管动态显示模块? input CLK;input rst_n;output [7:0]SEG0;//定义输出数码管0的段码带output [7:0]SEG1;//定义输出数码管1的段码带output [7:0]SEG2;//定义输出数码管2的段码带output [7:0]SEG3;//定义输出数码管3的段码带//..............................................................reg [7:0]SEG0;//定义输出数码管0的段码带reg [7:0]SEG1;//定义输出数码管1的段码带reg [7:0]SEG2;//定义输出数码管2的段码带reg [7:0]SEG3;//定义输出数码管3的段码带//..................................................................parameter seg0=8&#39;hC0,seg1=8&#39;hF9,seg2=8&#39;hA4,seg3=8&#39;hB0,seg4=8&#39;h99,seg5=8&#39;h92,seg6=8&#39;h82,seg7=8&#39;hF8,seg8=8&#39;h80,seg9=8&#39;h90,sega=8&#39;h88,segb=8&#39;h83,segc=8&#39;hC6,segd=8&#39;hA1,sege=8&#39;h86,segf=8&#39;h8E;//....................................................................reg[23:0] cnt;//定义计数寄存器,用来实现定时的功能reg [15:0]counter;//定义计数寄存器,用于实现显示的数值always @(posedge CLK or negedge rst_n)//计数过程,记录当前显示的位选序号if(!rst_n)begincnt&lt;=24&#39;D0;//复位时cnt初始化为0counter&lt;=2&#39;b00;//复位时counter初始化为0endelsebegincnt&lt;=cnt+1&#39;b1;//实现计数的功能if(cnt==24&#39;D1*******)begincnt&lt;=0;//当达到计数值以后回复初始值counter&lt;=counter+1;//当达到计时时间以后显示的数值也相应的+1endend//....................................................always @(posedge CLK or negedge rst_n)if(!rst_n)beginSEG0&lt;=0;SEG1&lt;=0;SEG2&lt;=0;SEG3&lt;=0;endelsealways @(counter)begincase(counter[3:0])4&#39;h0: sm_dbr &lt;= seg0;4&#39;h1: sm_dbr &lt;= seg1;4&#39;h2: sm_dbr &lt;= seg2;4&#39;h4: sm_dbr &lt;= seg4;4&#39;h5: sm_dbr &lt;= seg5;4&#39;h6: sm_dbr &lt;= seg6;4&#39;h7: sm_dbr &lt;= seg7;4&#39;h8: sm_dbr &lt;= seg8;4&#39;h9: sm_dbr &lt;= seg9; 4&#39;ha: sm_dbr &lt;= sega;4&#39;hb: sm_dbr &lt;= segb;4&#39;hc: sm_dbr &lt;= segc;4&#39;hd: sm_dbr &lt;= segd;4&#39;he: sm_dbr &lt;= sege;4&#39;hf: sm_dbr &lt;= segf;default: ;endcasecase(counter[7:4])4&#39;h0: sm_dbr &lt;= seg0;4&#39;h1: sm_dbr &lt;= seg1;4&#39;h2: sm_dbr &lt;= seg2;4&#39;h3: sm_dbr &lt;= seg3;4&#39;h4: sm_dbr &lt;= seg4;4&#39;h5: sm_dbr &lt;= seg5;4&#39;h6: sm_dbr &lt;= seg6;4&#39;h7: sm_dbr &lt;= seg7;4&#39;h8: sm_dbr &lt;= seg8;4&#39;h9: sm_dbr &lt;= seg9;4&#39;ha: sm_dbr &lt;= sega;4&#39;hb: sm_dbr &lt;= segb;4&#39;hc: sm_dbr &lt;= segc;4&#39;hd: sm_dbr &lt;= segd;4&#39;he: sm_dbr &lt;= sege;4&#39;hf: sm_dbr &lt;= segf;default: ;endcasecase(counter[11:8])4&#39;h0: sm_dbr &lt;= seg0;4&#39;h1: sm_dbr &lt;= seg1;4&#39;h2: sm_dbr &lt;= seg2;4&#39;h3: sm_dbr &lt;= seg3;4&#39;h4: sm_dbr &lt;= seg4;4&#39;h6: sm_dbr &lt;= seg6; 4&#39;h7: sm_dbr &lt;= seg7; 4&#39;h8: sm_dbr &lt;= seg8; 4&#39;h9: sm_dbr &lt;= seg9; 4&#39;ha: sm_dbr &lt;= sega; 4&#39;hb: sm_dbr &lt;= segb; 4&#39;hc: sm_dbr &lt;= segc; 4&#39;hd: sm_dbr &lt;= segd; 4&#39;he: sm_dbr &lt;= sege; 4&#39;hf: sm_dbr &lt;= segf; default: ;endcasecase(counter[15:12])4&#39;h0: sm_dbr &lt;= seg0; 4&#39;h1: sm_dbr &lt;= seg1; 4&#39;h2: sm_dbr &lt;= seg2; 4&#39;h3: sm_dbr &lt;= seg3; 4&#39;h4: sm_dbr &lt;= seg4; 4&#39;h5: sm_dbr &lt;= seg5; 4&#39;h6: sm_dbr &lt;= seg6; 4&#39;h7: sm_dbr &lt;= seg7; 4&#39;h8: sm_dbr &lt;= seg8; 4&#39;h9: sm_dbr &lt;= seg9; 4&#39;ha: sm_dbr &lt;= sega; 4&#39;hb: sm_dbr &lt;= segb; 4&#39;hc: sm_dbr &lt;= segc; 4&#39;hd: sm_dbr &lt;= segd; 4&#39;he: sm_dbr &lt;= sege; 4&#39;hf: sm_dbr &lt;= segf; default: ;endcaseendendmodule3、接口:clk--PIN_N2rst_n--PIN_N25SEG0[0]--PIN_AF10SEG0[1]--PIN_AB12SEG0[2]--PIN_AC12SEG0[3]--PIN_AD11SEG0[4]--PIN_AE11SEG0[5]--PIN_V14SEG0[6]--PIN_V13SEG1[0]--PIN_V20SEG1[1]--PIN_V21SEG1[2]--PIN_W21SEG1[3]--PIN_Y22SEG1[4]--PIN_AA24SEG1[5]--PIN_AA23SEG1[6]--PIN_AB24SEG2[0]--PIN_AB23SEG2[1]--PIN_V22SEG2[2]--PIN_AC25SEG2[3]--PIN_AC26SEG2[4]--PIN_AB26SEG2[5]--PIN_AB25SEG2[6]--PIN_Y24SEG3[0]--PIN_Y23SEG3[1]--PIN_AA25SEG3[2]--PIN_AA26SEG3[3]--PIN_Y26SEG3[4]--PIN_Y25SEG3[5]--PIN_U22SEG3[6]--PIN_W244、上机程序module SegDynamicDisp(CLK,rst_n,SEG0,SEG1,SEG2,SEG3); input CLK;input rst_n;output [6:0]SEG0;output [6:0]SEG1;output [6:0]SEG2;output [6:0]SEG3;reg [6:0]SEG0;reg [6:0]SEG1;reg [6:0]SEG2;reg [6:0]SEG3;//........以上是定义的一些输入输出接口.......................... parameter seg0=7&#39;hC0,seg1=7&#39;hF9,seg2=7&#39;hA4,seg3=7&#39;hB0,seg4=7&#39;h99,seg5=7&#39;h92,seg6=7&#39;h82,seg7=7&#39;hF8,seg8=7&#39;h80,seg9=7&#39;h90,sega=7&#39;h88,segb=7&#39;h83,segc=7&#39;hC6,segd=7&#39;hA1,sege=7&#39;h86,segf=7&#39;h8E;//..............以上是定义的参数,用来标记段代码................... reg[23:0] cnt;reg [15:0]counter;always @(posedge CLK or negedge rst_n)if(!rst_n)begincnt&lt;=24&#39;D0;counter&lt;=2&#39;b00;endelsebegincnt&lt;=cnt+1&#39;b1;if(cnt==24&#39;D1*******)begincnt&lt;=0;counter&lt;=counter+1;endend//..........用来实现计数功能和控制数字递增的速度.................... always @(counter)begincase(counter[3:0])4&#39;h0: SEG0 &lt;= seg0; 4&#39;h1: SEG0 &lt;= seg1; 4&#39;h2: SEG0 &lt;= seg2; 4&#39;h3: SEG0 &lt;= seg3; 4&#39;h4: SEG0 &lt;= seg4; 4&#39;h5: SEG0 &lt;= seg5; 4&#39;h6: SEG0 &lt;= seg6; 4&#39;h7: SEG0 &lt;= seg7; 4&#39;h8: SEG0 &lt;= seg8; 4&#39;h9: SEG0 &lt;= seg9; 4&#39;ha: SEG0 &lt;= sega; 4&#39;hb: SEG0 &lt;= segb; 4&#39;hc: SEG0 &lt;= segc; 4&#39;hd: SEG0 &lt;= segd; 4&#39;he: SEG0 &lt;= sege; 4&#39;hf: SEG0 &lt;= segf; default: ;endcasecase(counter[7:4])4&#39;h0: SEG1 &lt;= seg0; 4&#39;h1: SEG1 &lt;= seg1; 4&#39;h2: SEG1 &lt;= seg2; 4&#39;h3: SEG1 &lt;= seg3; 4&#39;h4: SEG1 &lt;= seg4; 4&#39;h5: SEG1 &lt;= seg5; 4&#39;h6: SEG1 &lt;= seg6; 4&#39;h7: SEG1 &lt;= seg7; 4&#39;h8: SEG1 &lt;= seg8; 4&#39;h9: SEG1 &lt;= seg9; 4&#39;ha: SEG1 &lt;= sega; 4&#39;hb: SEG1 &lt;= segb; 4&#39;hc: SEG1 &lt;= segc; 4&#39;hd: SEG1 &lt;= segd; 4&#39;he: SEG1 &lt;= sege; 4&#39;hf: SEG1 &lt;= segf; default: ;endcasecase(counter[11:8])4&#39;h0: SEG2 &lt;= seg0; 4&#39;h1: SEG2 &lt;= seg1; 4&#39;h2: SEG2 &lt;= seg2; 4&#39;h3: SEG2 &lt;= seg3;4&#39;h4: SEG2 &lt;= seg4;4&#39;h5: SEG2 &lt;= seg5;4&#39;h6: SEG2 &lt;= seg6;4&#39;h7: SEG2 &lt;= seg7;4&#39;h8: SEG2 &lt;= seg8;4&#39;h9: SEG2 &lt;= seg9;4&#39;ha: SEG2 &lt;= sega;4&#39;hb: SEG2 &lt;= segb;4&#39;hc: SEG2 &lt;= segc;4&#39;hd: SEG2 &lt;= segd;4&#39;he: SEG2 &lt;= sege;4&#39;hf: SEG2 &lt;= segf;default: ;endcasecase(counter[15:12])4&#39;h0: SEG3 &lt;= seg0;4&#39;h1: SEG3 &lt;= seg1;4&#39;h2: SEG3 &lt;= seg2;4&#39;h3: SEG3 &lt;= seg3;4&#39;h4: SEG3 &lt;= seg4;4&#39;h5: SEG3 &lt;= seg5;4&#39;h6: SEG3 &lt;= seg6;4&#39;h7: SEG3 &lt;= seg7;4&#39;h8: SEG3 &lt;= seg8;4&#39;h9: SEG3 &lt;= seg9;4&#39;ha: SEG3 &lt;= sega;4&#39;hb: SEG3 &lt;= segb;4&#39;hc: SEG3 &lt;= segc;4&#39;hd: SEG3 &lt;= segd;4&#39;he: SEG3 &lt;= sege;4&#39;hf: SEG3 &lt;= segf;default: ;endcaseend//...................用来实现显示功能..................... endmodule5、实验结果复位按键为0时:HEX3HEX2 HEX1 HEX0 显示的为0000;复位按键为1时:HEX3 HEX2 HEX1 HEX0 显示的依次为:0000——FFFF。

8位动态LED数码管显示实验(精)

8位动态LED数码管显示实验(精)

8位动态LED数码管显示实验(精)8位动态LED数码管显示实验2008-03-18 18:048.1 实物图与原理图本实验仪配置带8位动态扫描显示模块一个。

实物图如下:为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO 口,即采用3个IO来实现数据的传输。

原理图如下:所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。

在本实验仪中链接管教分布如下:STK-----P2.5DAT-----P2.6CLK-----P2.7B0、B1、B2、B3、B4、B5、B6、B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4 P0.5P0.6 P0.7)由于上一节已经讲述了CD4094驱动一位LED数码管的问题,这里我们讲如何来扫描8位数码管。

8.2 LED动态显示原理根据原理图管脚连接,我们知道P0口控制了8个LED数码管的位选中,所以如果想让8个数码管都亮起来,我们可以逐位扫描8位数码管。

动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。

动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。

如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。

8.3 DG3000 动态显示头文件display_s.h//----------------------------------------------------------//程序作用:显示头文件display_s.h//----------------------------------------------------------#ifndef _display_#define _display_#includesbit SDA=P2^6; //定义显示管脚sbit CLK=P2^7;unsigned char data display_bit;unsigned char codeled[20]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x 89,0x8C };//定义段码//延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)< bdsfid="131" p=""></k;i++)<>for(j=0;j<100;j++);}//数据传输void send(unsigned char a){unsigned char i;for(i=0;i<8;i++){if(_crol_(a,i)&0x80)SDA=1;elseSDA=0;CLK=0;CLK=1;}}//显示程序 8位LED数码管扫描void display(unsigned chardisplay_buffer[8]){unsigned char i,k;display_bit=0xfe;for(i=0;i<8;i++){k=led[display_buffer[i]];send(k);P0=display_bit;delay(0x01);P0=0xff;display_bit=_crol_(display_bit,1);}display_bit=0xfe;8.4 8位数码管动态显示01234567(C51程序)//----------------------------------------------------------//程序作用:动态扫描显示01234567//---------------------------------------------------------- #include#include //调用显示头文件main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6, 0x7};//显示01234567 while(1){display(a); //显示数据}}。

实验四 八位七段数码管动态显示电路的设计

实验四   八位七段数码管动态显示电路的设计

实验四八位七段数码管动态显示电路的设计一、 实验目的1、了解数码管的工作原理。

2、学习七段数码管显示译码器的设计。

3、学习Verilog的CASE语句及多层次设计方法。

二、 实验原理七段数码管是电子开发过程中常用的输出显示设备。

在实验系统中使用的是两个四位一体、共阴极型七段数码管。

其单个静态数码管如下图4-1所示。

图4-1 静态七段数码管由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

共阳极性的数码管与之相么。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

三、 实验内容本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。

在实验中时,数字时钟选择1KHZ作为扫描时钟,用四个开关做为输入,当四个开关置为一个二进制数时,在数码管上显示其十六进制的值。

实验箱中的拨动开关与FPGA的接口电路,以及开关FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。

数码管显示模块的电路原理如图4-2所示,表4-1是其数码管的输入与FPGA的管脚连接表。

图4-2 数字时钟信号模块电路原理信号名称 对应FPGA管脚名说明7SEG-A N4 七段码管A段输入信号 7SEG-B G4 七段码管B段输入信号 7SEG-C H4 七段码管C段输入信号 7SEG-D L5 七段码管D段输入信号 7SEG-E L4 七段码管E段输入信号 7SEG-F K4 七段码管F段输入信号 7SEG-G K5 七段码管G段输入信号7SEG-DP H3 七段码管dp段输入信号7SEG-SEL0 M4 七段码管位选输入信号7SEG-SEL1 F3 七段码管位选输入信号7SEG-SEL2 F4 七段码管位选输入信号表4-1 数码管与FPGA的管脚连接表四、 实验步骤1、打开QUARTUSII软件,新建一个工程。

4位7段数码管驱动电路设计要求

4位7段数码管驱动电路设计要求

4位7段数码管驱动电路图1 开发板电路原理图信号说明1. iRST_N(异步复位)当iRST_N信号为低时,Seg7_Driver模块中的所有寄存器异步复位为初值。

2. iCLK模块的输入时钟40MHz。

3. iSeg_Val[15:0]7段数码管输入二进制值,0x0~0xFiSeg_Val[15:12],左侧第一位7段数码管的值。

iSeg_Val[11: 8],左侧第两位7段数码管的值。

iSeg_Val[ 7: 4],左侧第三位7段数码管的值。

iSeg_Val[ 3: 0],左侧第四位7段数码管的值。

4. iDot_Val[3:0]各位7段数码管小数点的显示,值为1表示显示小数点,0表示不显示小数点。

iDot_Val[3],左侧第一位7段数码管的小数点。

iDot_Val[2],左侧第两位7段数码管的小数点。

iDot_Val[1],左侧第三位7段数码管的小数点。

iDot_Val[0],左侧第四位7段数码管的小数点。

5. oDisplay[7:0]7段数码管的数据信号。

4位7段数码管共用数据信号。

7段数码管为共阳极连接,各段数据线为0时,对应段发光。

6. oDis_En[3:0]各位7段数码管的使能信号,低有效。

oDis_En[3],左侧第一位7段数码管的使能信号。

oDis_En[2],左侧第两位7段数码管的使能信号。

oDis_En[1],左侧第三位7段数码管的使能信号。

oDis_En[0],左侧第四位7段数码管的使能信号。

建议的分块:将整个驱动电路分成Seg7_Ctrl模块与Seg7_Hex2seg模块Seg7_Ctrl模块负责产生数码管动态显示的控制信号oDis_En的时序Seg7_Hex2Seg模块负责将二进制值转换成数据码管显示的数据值,包括小数点的值。

注意点:1. 动态显示过程是利用人眼的视觉残留现象来实现的,应选择适当的数码管扫描频率。

可先选择数码管的扫描显示的刷新率为125Hz(8ms),即每位数码管用2ms。

实验四七段数码管显示译码电路设计

实验四七段数码管显示译码电路设计

实验四七段数码管显示译码电路设计一、实验目的1.学习7段数码显示译码器设计;2.学习VHDL的CASE语句应用及多层次设计方法;二、实验原理7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能做十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。

作为7段译码器,输出信号LED7S的7位分别接如图1数码管的7个段,高位在左,低位在右。

例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。

注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h。

图1 共阴数码管及其电路七段数码管显示译码电路真值表三、实验内容1、在QuartusII上用VHDL文本方式设计七段数码管显示译码电路;2;对该设计进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。

提示:用输入总线的方式给出输入信号仿真数据,仿真波形示例图如图2所示。

3、将经过仿真的设计下载到硬件实验箱进行验证。

图2 7段译码器仿真波形[引脚锁定]用键8~键5控制输入D3~D0,用第8位数码管输出(引脚号167,166,165,164,163,162,161)。

四、实验要求1用VHDL语言实现电路设计2设计仿真文件,进行软件验证3通过下载线下载到实验板上进行验证五、实验报告要求1写出VHDL程序并加以详细注释2给出软件仿真结果及波形图3通过下载线下载到实验板上进行验证并给出硬件测试结果4写出学习总结。

八位七段数码管动态显示电路设计知识讲解

八位七段数码管动态显示电路设计知识讲解

八位七段数码管动态显示电路设计八位七段数码管动态显示电路的设计一七段显示器介绍七段显示器,在许多产品或场合上经常可见。

其内部结构是由八个发光二极管所组成,为七个笔画与一个小数点,依顺时针方向为A、B、C、D、E、F、G与DP等八组发光二极管之排列,可用以显示0~9数字及英文数A、b、C、d、E、F。

目前常用的七段显示器通常附有小数点,如此使其得以显示阿拉伯数之小数点部份。

七段显示器的脚位和线路图如下图4.1所示( 其第一支接脚位于俯视图之左上角 )。

图4.1、七段显示器俯视图由于发光二极管只有在顺向偏压的时候才会发光。

因此,七段显示器依其结构不同的应用需求,区分为低电位动作与高电位动作的两种型态的组件,另一种常见的说法则是共阳极( 低电位动作 )与共阴极( 高电位动作 )七段显示器,如下图4.2所示。

( 共阳极 ) ( 共阴极 )图4.2、共阳极(低电位动作)与共阴极(高电位动作)要如何使七段显示器发光呢?对于共阴极规格的七段显示器来说,必须使用“ Sink Current ”方式,亦即是共同接脚COM为VCC,并由Cyclone II FPGA使接脚成为高电位,进而使外部电源将流经七段显示器,再流入Cyclone II FPGA的一种方式本实验平台之七段显示器模块接线图如下图4.5所示。

此平台配置了八组共阳极之七段显示器,亦即是每一组七段显示器之COM接脚,均接连至VCC 电源。

而每一段发光二极管,其脚位亦均与Cyclone II FPGA接连。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

图4.5、七段显示器模块接线图七段显示器之常见应用如下➢可作为与数值显示相关之设计。

⏹电子时钟应用显示⏹倒数定时器⏹秒表⏹计数器、定时器⏹算数运算之数值显示器二七段显示器显示原理七段显示器可用来显示单一的十进制或十六进制的数字,它是由八个发光二极管所构成的( 每一个二极管依位置不同而赋予不同的名称,请参见图4.1 ) 。

7段数码管动态显示实验说明

7段数码管动态显示实验说明

#define printf
xil_printf /* Smalller foot-print printf */
const unsigned int
Display_Code[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
const unsigned int Selected_Code[4]={0xEE,0xDD,0xBB,0x77};
}
xil_printf("Successfully ran 7segment leds Example\r\n"); return XST_SUCCESS; } //////////////////////////////////////////////////////////// //emerge 3 8bits bus into a 24bits bus ///////////////////////////////////////////////////////////// static int emerge_ledbus(int ledbus0,int ledbus1,int ledsel) { return ledbus0+(ledbus1<<8)+(ledsel<<16); }
/**************************** Type Definitions ******************************/
/***************** Macros (Inline Functions) Definitions *******************/
LED_BUS0 0X00 LED_BUS1 0X00 LED_SEL 0XFF

七段数码管的动态扫描显示实验

七段数码管的动态扫描显示实验

七段数码管的动态扫描显示实验一、实验名称:七段数码管的动态扫描显示实验二、实验目的:(1)进一步熟悉QuartusII软件进行FPGA设计的流程(2)掌握利用宏功能模块进行常用的计数器,译码器的设计(3)学习和了解动态扫描数码管的工作原理的程序设计方法三、实验原理:实验板上常用4位联体的共阳极7段数码管,其接口电路是把所有数码管的8个笔划段a-h同名端连在一起,而每一个数码管由一个独立的公共极COM端控制。

当向数码管发送字形码时,所有数码管都接收到相同的字形码时,但究竟是那个数码管亮,取决于COM端,这一端是由I/O控制的,所以就可以自行决定何时显示哪一位。

动态扫描即采用分时方法,轮流控制各个LED轮流点亮。

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

四、实验要求:实现显示0000-9999的十进制计数器。

五、实验步骤1.建立工程建立名为leddisplay的工程,并建立顶层图。

2.设计技术时钟设计一分频器,对50MHz分频输出到计数器,让计数器以较慢速度递增。

打开File..New,新建一个.v文件。

输入以下程序:module int_div(clk, div_out);input clk;output reg div_out;reg [31:0] clk_div;parameter CLK_FREQ = 'D50_000_000; //系统时钟50MHz parameter DCLK_FREQ = 'D10; //输出频率10/2Hz always @(posedge clk)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。

8位数码管动态显示电路设计

8位数码管动态显示电路设计

电子课程设计—8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:姓名:学号:指导老师:2014年12月目录一、设计任务与要求................................................. (3)二、总体框图................................................. (3)三、选择器件................................................. (3)四、功能模块................................................. (9)五、总体设计电路图................................................. . (10)六、心得体会.................................................. .. (12)8位数码管动态显示电路设计一、设计任务与要求1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。

2. 要求在某一时刻,仅有一个LED数码管发光。

3. 该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。

4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。

5、研究循环地址码发生器的时钟频率和显示闪烁的关系。

二、总体框图设计的总体框图如图2-1所示。

图2-1总体框图三、选择器件 1、数码管数码管是一种由发光二极管组成的断码型显示器件,如图1所示。

U13DCD_HEX图1 数码管数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形。

数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED 的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。

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

八位七段数码管动态显示电路的设计
一、实验目的
1、了解数码管的工作原理。

2、学习七段数码管显示译码器的设计。

3、学习VHDL的CASE语句及多层次设计方法。

二、实验原理
七段数码管是电子开发过程中常用的输出显示设备。

在实验系统中使用的是两个四位一体、共阴极型七段数码管。

其单个静态数码管如下图4-4-1所示。

图4-1 静态七段数码管
由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

共阳极性的数码管与之相么。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

三、实验内容
本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。

在实验中时,数字时钟选择1024HZ作为扫描时钟,用四个拨动开关做为输入,当四个拨动开关置为一个二进制数时,在数码管上显示其十六进制的值。

四、实验步骤
1、打开QUARTUSII软件,新建一个工程。

2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。

3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中
提供的示例程序。

4、编写完VHDL程序后,保存起来。

方法同实验一。

5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。

6、编译仿真无误后,根据用户自己的要求进行管脚分配。

分配完成后,再进行全编译
一次,以使管脚分配生效。

7、根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起来。

如果是调用的本书提供的VHDL代码,则实验连线如下:
CLK:FPGA时钟信号,接数字时钟CLOCK3,并将这组时钟设为1024HZ。

KEY[3..0]:数码管显示输入信号,分别接拨动开关的S4,S3,S2,S1。

LEDAG[6..0]:数码管显示信号,接数码管的G、F、E、D、C、B、A。

SEL[2..0]:数码管的位选信号,接数码管的SEL2、SEL1、SEL0。

8、用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。

观察实验结果是否与自
己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1464HZ,拨动四位拨动开关,使其为一个数值,则八个数码管均显示拨动开关所表示的十六进制的值。

六、源代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity smg is
port( clk : in std_logic; --定义动态扫描时钟信号
k : in std_logic_vector(3 downto 0); --定义四位输入信号
ledag : out std_logic_vector(6 downto 0); --定义七位输出信号
del : buffer std_logic_vector(2 downto 0) --定义八位数码管位置显示信号
);
end smg;
architecture beha of smg is
Signal key:std_logic_vector(3 downto 0);
begin
process(clk)
variable dount : std_logic_vector(2 downto 0);
begin
if clk'event and clk='1' then --检测时钟上升沿
dount:=dount+1; --计数器dount累加
end if;
del<=dount;
end process;
process(del,k)
begin
case (del) is
when "000"=>key<=k;--+"0000";
when "001"=>key<=k;--+"0001";
when "010"=>key<=k;--+"0010";
when "011"=>key<=k;--+"0011";
when "100"=>key<=k;--+"0100";
when "101"=>key<=k;--+"0101";
when "110"=>key<=k;--+"0110";
when "111"=>key<=k;--+"0111";
end case;
end process;
process(key)
begin
case key is
when "0000" => ledag <="0111111"; when "0001" => ledag <="0000110"; when "0010" => ledag <="1011011"; when "0011" => ledag <="1001111"; when "0100" => ledag <="1100110"; when "0101" => ledag <="1101101"; when "0110" => ledag <="1111101"; when "0111" => ledag <="0000111"; when "1000" => ledag <="1111111"; when "1001" => ledag <="1101111"; when "1010" => ledag <="1110111"; when "1011" => ledag <="1111100"; when "1100" => ledag <="0111001"; when "1101" => ledag <="1011110"; when "1110" => ledag <="1111001"; when "1111" => ledag <="1110001"; when others => null;
end case;
end process;
end beha;。

相关文档
最新文档