实验四 七段数码管显示实验报告
- 格式:doc
- 大小:1.45 MB
- 文档页数:9
电子信息与自动化学院《可编程逻辑器件》实验报告学号:姓名:实验名称:静态显示学号一、实验原理LED七段数码管根据LED的接法不同分为共阴和共阳两类,是电子开发过程中常用的输出显示设备。
在本次实验中,使用的是四个共阳极型七段数码管。
每当送入一次字形码后,四个数码管同时显示同一数字,显示字形可一直保持,然后间隔1s再送入新的字形码,四个数码管同时显示下一个数字,以此类推,直到显示完四个数字再重头开始,轮流往复,便可实现四位学号的静态显示。
图1二、实验步骤1、编辑数码管静态显示的源程序执行“File”→“New”→“Verilog HDL File ”命令,进入Verilog HDL 文本编辑方式,按下列数码管静态显示的Verilog HDL 源代码输入源程序:module jiaoduxianshi (clk, rst, out0) ;input clk,rst;output reg[6:0] out0;reg [3:0] state;parameters0=4'd0,s1=4'd1, s2=4'd2, s3=4'd3, s4=4'd4,s5=4'd5, s6=4'd6, s7=4'd7;always@ (posedge clk or negedge rst)beginif(!rst) begin out0=7'b0111111;state=s0;endelsebegincase (state)//共阳s0: begin out0=7'b0010010;state<=s1;end//display 2s1: begin out0=7'b0000001;state<=s2;end//display 0s2: begin out0=7'b1001111;state<=s3;end //display 1s3: begin out0=7'b0001111;state<=s4;end //display 7s4: begin out0=7'b1000001;state<=s5;end //display 6s5: begin out0=7'b0001111;state<=s6;end //display 7 s6: begin out0=7'b0000110;state<=s7;end //display 3s7: begin out0=7'b1001111;state<=s0;end //display 1default:state<=0;endcaseendendendmodule图2 RTL viewer2、设计文件存盘和编译完成数码管静态显示的文本编辑后,以jingtaixianshi.v件名将设计文件保存在工程目录中,“.v”表示Verilog HDL 源程序文件。
实验名称 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。
实验四 8255和LED 数码管显示实验一、实验目的1.掌握并行接口8255A 的工作原理及使用方法。
2.了解七段数码管显示数字的原理。
3.掌握多位数码显示的接口技术。
二、实验电路实验电路如图2及图3所示。
三、实验内容1.静态显示:如图2所示,将8255A 的A 口PA0~PA6分别与七段数码管的段码驱动输入端a ~g 相连。
编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来,按其它键程序退出。
用Proteus 仿真软件搭建硬件电路,实现静态显示,完成系统的调试运行,并讲解搭建调试全过程。
用屏幕录像软件进行全过程录像,以MP4格式保存提交,提交仿真程序文件,完成实验报告的书写。
2.动态显示:按图3连接好电路,七段数码管段码连接不变,两个数码管的位码驱动输入端S1、S0分别接8255C 口的PC1、PC0。
编程在两个数码管上显示56,按任意键程序退出。
用Proteus 仿真软件搭建硬件电路,。
要求:在Proteus 仿真软件上搭建硬件系统,采用一个8255芯片实现两个数码管动态显示数字‘56’,完成系统的调试运行,并讲解搭建调试全过程。
用屏幕录像软件进行全过程录像,以MP4格式保存提交,提交仿真程序文件,完成实验报告的书写。
四、实验程序和结果<1>静态显示;************************************************ ;* 键盘输入数据(0-9)控制LED 数码管显示(静态显示) * ;************************************************ IO8255A EQU 288HP A 6P A 5P C 0 P A 4P A 3g f e d c b aS1 S0图3 动态态显示电路+5VP A 6P A 5P A 4C S P A 3g f e d c b a288H~ 28BH8255图2 静态显示电路 dp S3 S2 S1 S0IO8255CON EQU 28BHDATA SEGMENTLED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHMESG DB 0DH,0AH,'INPUT A NUM (0--9),OTHER KEY IS EXIT:',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,IO8255CON ;使8255的A口为输出方式MOV AX,80HOUT DX,ALSSS:MOV DX,OFFSET MESG ;显示提示信息MOV AH,09HINT 21HMOV AH,01 ;从键盘接收字符INT 21HCMP AL,'0' ;是否小于0JB EXIT ;若是则退出CMP AL,'9' ;是否大于9JA EXIT ;若是则退出SUB AL,30H ;将所得字符的ASCII码减30HMOV BX,OFFSET LED ;BX为数码表的起始地址XLAT ;求出相应的段码MOV DX,IO8255A ;从8255的A口输出OUT DX,ALJMP SSS ;转SSSEXIT: MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START<2>动态显示DATA SEGMENTINPORT EQU 2400H-280HIO8255A EQU INPORT+288HIO8255C EQU INPORT+28AHIO8255CTR EQU INPORT+28BHMESGL DB 0DH,0AH,’PRESS ANY KEY TO EXIT!’,0DH,0AH,’$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESGL ; 提示显示信息MOV AH,9INT 21HMOV DX,IO8255CTR ;将8255设为A口输出MOV AL,80HOUT DX,ALLOOP1:MOV DX,IO8255AMOV AL,6DHOUT DX,ALMOV DX,IO8255CMOV AL,2OUT DX,ALMOV CX,3000HDELAY:LOOP DELAY ;延时MOV DX,IO8255CMOV AL,0OUT DX,AL ; 关数码管MOV DX,IO8255AMOV AL,7DHOUT DX,ALMOV DX,IO8255CMOV AL,1OUT DX,ALMOV CX,3000HDELAY1:LOOP DELAY1 ;延时MOV AH,0BHINT 21HCMP AL,0JNZ EXIT ;按任意键退出JMP LOOP1EXIT:MOV DX,IO8255CMOV AL,0 ;关掉数码管显示OUT DX,ALMOV AX,4C00H ;返回DOSINT 21HCODE ENDSEND START。
十六进制7段数码显示译码器设计实验报告实验报告:十六进制7段数码显示译码器设计一、实验目的本实验的主要目的是设计一种用于将十六进制数码转化为七段显示的译码器电路。
通过这个实验,我们可以学习和了解数字电路的工作原理、数码管的控制方式以及七段数码的译码方法。
二、实验原理本实验所用到的数码管为共阳数码管,它由7个发光二极管组成,其中的每一个发光二极管称为一个段。
这七个段依次为a、b、c、d、e、f和g,它们分别对应数码管上的abcdefg七个引脚。
当一些引脚输出高电平时,相应的段就会被点亮,从而显示出特定的字符。
为了实现将十六进制数码转化为七段显示的功能,我们需要设计一个译码器电路。
译码器电路的输入为十六进制数码,输出为七段信号,用于控制数码管的每个段的亮灭情况。
为了简化设计,我们可以采用CMOS数字集成电路74LS47来实现译码器电路。
该集成电路内部集成了BCD转七段译码器,可以将二进制代码转化为七段数码显示所需要的信号。
它的输入为四个二进制输入端口A、B、C和D,输出为七个段芯片(a、b、c、d、e、f和g)的控制信号。
三、实验步骤1.首先,根据74LS47的真值表,确定译码器的输入和输出。
2.根据真值表,画出逻辑图,确定硬件电路的连接方式。
3.按照逻辑图和电路连接方式,进行硬件电路的布线。
4.按照实验仪器的操作说明,对电路进行调试和测试。
5.将输入端口连接至外部的十六进制信号源,观察输出端口的数据是否正确。
6.验证电路的正确性和稳定性,如果出现问题,进行排除和修复。
四、实验结果经过实验,我们成功地设计并实现了一个十六进制7段数码显示译码器电路。
当输入端口接收到一个十六进制信号时,通过电路的处理和转换,将其转化为了相应的七段信号,用于控制数码管的每个段的亮灭情况。
通过实验观察,我们发现电路的输出结果与预期一致,且工作稳定。
五、实验总结通过这个实验,我们对于数字电路的工作原理和数码管的控制方式有了更深的了解。
实验一、组合电路——7段数码管显示驱动电路设计一、实验目的了解EDA实验箱7位八段数码管显示模块的工作原理,设计标准扫描驱动电路模块,以备后面实验用。
二、硬件要求主芯片为Cyclone V E,型号为EP4CE22F17C8,7位八段数码管显示器,四位拨码开关。
三、实验内容用四位拨码开关产生8421BCD码,用CPLD分别产生7段数码管扫描驱动电路,然后进行仿真,观察波形,正确后编程下载实验测试。
四、实验原理1、72、动信号a,b,c,d,e,f,g。
通过调节四位拨码开关的状态,数码管应显示与之对应的字符。
五、实验连线输入:将芯片管角a0~a3分别接4个拨码开关;输出:将芯片管角led7s0~7分别接到数码管7段驱动信号a、b、c、d、e、f、g上。
六、实验源程序:decl7s.vhdlibrary ieee;use ieee.std_logic_1164.all;entity decl7s isport(a:in std_logic_vector(3 downto 0);led7s:out std_logic_vector(6 downto 0));end;architecture one of decl7s isbeginprocess(a)begincase a iswhen "0000" => led7s<="0111111"; when "0001" => led7s<="0000110"; when "0010" => led7s<="1011011"; when "0011" => led7s<="1001111"; when "0100" => led7s<="1100110"; when "0101" => led7s<="1101101"; when "0110" => led7s<="1111101"; when "0111" => led7s<="0000111"; when "1000" => led7s<="1111111"; when "1001" => led7s<="1101111"; when "1010" => led7s<="1110111"; when "1011" => led7s<="1111100"; when "1100" => led7s<="0111001"; when "1101" => led7s<="1011110"; when "1110" => led7s<="1111001"; when "1111" => led7s<="1110001"; when others => null;end case;end process;end;七、波形仿真结果。
数码管显示实验实验报告一、实验目的本次数码管显示实验的主要目的是深入了解数码管的工作原理和显示控制方式,通过实际操作掌握数码管与微控制器的接口技术,并能够编写相应的程序实现各种数字和字符的显示。
二、实验原理数码管是一种由多个发光二极管组成的显示器件,常见的有共阴数码管和共阳数码管两种类型。
共阴数码管是将所有发光二极管的阴极连接在一起,当阳极接高电平时,相应的二极管发光;共阳数码管则是将所有发光二极管的阳极连接在一起,当阴极接低电平时,相应的二极管发光。
在控制数码管显示时,通常采用动态扫描的方式,即依次快速地给每个数码管的段选端送入相应的字形码,同时使位选端选通对应的数码管,利用人眼的视觉暂留效应,使人看起来好像所有数码管同时在显示。
三、实验设备与材料1、实验开发板2、数码管模块3、杜邦线若干4、电脑5、编程软件四、实验步骤1、硬件连接将数码管模块与实验开发板进行连接,确定好段选和位选引脚的连接。
检查连接是否牢固,确保电路无短路或断路现象。
2、软件编程打开编程软件,选择相应的开发板型号和编程语言。
定义数码管的段选和位选引脚。
编写控制程序,实现数字 0 到 9 的循环显示。
3、编译与下载对编写好的程序进行编译,检查是否有语法错误。
将编译成功的程序下载到实验开发板上。
4、观察实验现象接通实验开发板的电源,观察数码管的显示情况。
检查显示的数字是否正确,显示的亮度和稳定性是否符合要求。
五、实验结果与分析1、实验结果数码管能够正常显示数字 0 到 9,并且能够按照设定的频率循环显示。
显示的数字清晰、稳定,没有出现闪烁或模糊的现象。
2、结果分析程序编写正确,能够准确地控制数码管的段选和位选信号,实现数字的显示。
动态扫描的频率设置合理,既保证了显示的稳定性,又不会出现明显的闪烁。
六、实验中遇到的问题及解决方法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实验总结:通过这次试验,我了解到自定义数据类型可以根据自己的需要方便设定,有很大的灵活性。
单片机数码管动态显示实验报告单片机数码管动态显示实验程序(汇编)单片机数码管动态显示实验程序org 00hajmp headorg 0030hhead:mov sp,#0070hnum equ p0 ;p0口连接数码管reset:mov dptr ,#tabmov r0,#4sh:acall show_tabcall dptr_adddjnz r0,shmov r0 ,#4sjmp resetdptr_add:inc dptrinc dptrinc dptrinc dptrrettab :db0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;;;;;;;;;;;;;;;;;;;;; 函数的功能是用来动态显示dptr上的四个数据 ;;;;;;;;;;;;;;;;;;;;;; show_tab:clr amov r2,#0mov r3,#148mov p2,#238loop:movc a,@a+dptrmov num ,aacall delay_5msinc r2mov a,r2;调用片选函数前注意A的变化acall select_movcjne r2,#4,loopmov r2,#0clr adjnz R3,loopret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;select_mov:;p2的初值238push 0e0hmov a,p2rl amov p2,apop 0e0hretdelay_5ms:mov r6,#5signed_5ms:call delay_1msdjnz r6,signed_5msret篇二:单片机动态数码显示设计实验报告微机原理与接口技术实验报告实验题目:指导老师:班级:计算机科学与技术系姓名:动态数码显示设计2014年 12月3日实验十三动态数码显示设计一、实验目的1.掌握动态数码显示技术的设计方法。
实验四七段数码管的动态扫描显示一、实验目的1.进一步熟悉QuartusII软件进行FPGA设计的流程;2.掌握利用宏功能模块进行常用的计数器,译码器的设计;3.学习和了解动态扫描数码管的工作原理的程序设计方法;二、实验原理及过程实验板上面常用的4为联体的共阳极7段数码管。
其接口电路是把所有数码管的8个笔划段a-h同名端连接起来,而每一个数码管由一个独立的公共极COM端控制。
对于这种结构的数码管,采用动态显示的方法是最为广泛的一种显示方式之一。
在轮流点亮的过程中每位显示器的点亮时间都极为短暂,但由于人的视觉暂留现象以及发光二极管的余晖效应,尽管实际上每个显示器并非同时点亮,但只要扫描的速度足够快(如达到30Hz 以上),给人的印象就是一组稳定的显示数据,不会有闪烁感。
本次实验要求在实验板上实现显示00000000-99999999的十进制计数器。
使用的是宏模块产生一个16位的二进制计数器counter()作为4个数码管的显示数据;编写一个分频模块div,其输出作为计数器counter()的时钟信号;编写数码管驱动模块segmain,完成7段译码和扫描显示控制1、建立工程,并建立顶层图。
2、设计计数时钟设计一分频器,对50Mhz分频输出到计数器,让计数器以较慢速度递增。
建立.v文件,输入以下代码module int_div(clk,div_out);input clk;output reg div_out;reg[31:0] clk_div;parameter CLK_FREQ='D50_000_000;parameter DCLK_FREQ='D10;always@(posedge clk)beginif(clk_div<CLK_FREQ/DCLK_FREQ)clk_div<=clk_div+1;elsebeginclk_div<=0;div_out=~div_out;endendendmodule输入完成后,将该文件设为顶层文件,并分析该设计文件,用于检查设计错误。
微机原理实验四LED数码管显示实验LED数码管显示实验是微机原理中的一项重要实验,通过该实验可以学习到数码管的工作原理以及如何通过控制数字信号来实现数字的显示。
本文将详细介绍实验所需材料和步骤,并解析实验原理。
一、实验材料1.STM32F407开发板2.数码管模块3.面包板4.连接线5.杜邦线二、实验原理数码管是一种能够显示数字的装置,它由七个发光二极管组成,分别代表数字0-9、通过控制这七个发光二极管的亮灭,可以显示出不同的数字。
在实验中,我们使用STM32F407开发板来控制数码管。
数码管模块通过引脚与STM32F407开发板进行连接,其中共阴数码管的引脚与开发板的GPIO引脚相连,通过控制GPIO引脚的高低电平来控制数码管的亮灭。
三、实验步骤1.在面包板上连接数码管模块。
将数码管模块的引脚与STM32F407开发板的相应引脚通过杜邦线连接。
具体连接方式可以参考数码管模块和开发板的引脚定义。
2. 打开STM32CubeMX软件,创建一个新工程。
选择适合的开发板型号,并进行引脚配置。
将引脚配置为通用输出模式,并将相应的引脚定义为控制数码管的引脚。
3. 在生成的代码中找到main.c文件,在其中添加控制数码管的代码。
首先需要引入相应的头文件,并定义控制数码管的引脚宏定义。
4. 在main函数中,初始化控制数码管的引脚为输出模式。
然后通过控制引脚的高低电平来实现数码管的亮灭。
四、实验结果与分析经过以上步骤,我们成功控制了数码管的显示。
数码管显示的数字由控制引脚的高低电平确定,通过改变控制引脚的电平可以实现不同的数字显示。
值得注意的是,数码管的亮灭是通过切换引脚的电平来实现的,当引脚为高电平时,数码管熄灭;反之,当引脚为低电平时,数码管亮起。
在实际应用中,可以通过编写代码来改变控制引脚的电平,从而实现字母、字符、动画等更加复杂的显示效果。
五、实验总结本次实验通过控制STM32F407开发板的GPIO引脚,成功实现了LED数码管的显示。
第1篇一、实验背景数码管是一种常用的显示器件,它可以将数字、字母或其他符号显示出来。
数码管广泛应用于各种电子设备中,如计算器、电子钟、电子秤等。
本实验旨在通过实践操作,让学生了解数码管的工作原理,掌握数码管的驱动方法,以及数码管在电子系统中的应用。
二、实验原理1. 数码管类型数码管分为两种类型:七段数码管和液晶数码管。
本实验主要介绍七段数码管。
七段数码管由七个发光二极管(LED)组成,分别代表七个笔画。
当七个LED中的某个或某几个LED点亮时,就可以显示出相应的数字或符号。
根据发光二极管的连接方式,七段数码管可分为共阳极和共阴极两种类型。
2. 数码管驱动方式(1)静态驱动静态驱动是指每个数码管独立驱动,每个数码管都连接到单片机的I/O端口。
这种方式下,数码管显示的数字或符号不会闪烁,但需要较多的I/O端口资源。
(2)动态驱动动态驱动是指多个数码管共用一组I/O端口,通过控制每个数码管的扫描时间来实现动态显示。
这种方式可以节省I/O端口资源,但显示的数字或符号会有闪烁现象。
3. 数码管显示原理(1)共阳极数码管共阳极数码管的特点是七个LED的阳极连接在一起,形成公共阳极。
当要显示数字时,将对应的LED阴极接地,其他LED阴极接高电平,即可显示出相应的数字。
(2)共阴极数码管共阴极数码管的特点是七个LED的阴极连接在一起,形成公共阴极。
当要显示数字时,将对应的LED阳极接地,其他LED阳极接高电平,即可显示出相应的数字。
4. 数码管驱动电路(1)BCD码译码驱动器BCD码译码驱动器是一种将BCD码转换为七段数码管所需段码的电路。
常用的BCD码译码驱动器有CD4511、CD4518等。
(2)74HC595移位寄存器74HC595是一种8位串行输入、并行输出的移位寄存器,常用于数码管的动态驱动。
它可以将单片机输出的串行信号转换为并行信号,驱动数码管显示。
三、实验目的1. 了解数码管的工作原理和驱动方式。
实验四 LED数码管实验一、实验目的本实验旨在通过搭建电路和编写程序,控制LED数码管显示特定的数字。
二、实验器材和材料•Arduino开发板 *1•LED数码管 *1•杜邦线若干三、实验原理LED数码管是一种由多个LED组成的显示器件,可用来显示数字和一些简单的字符。
数码管一般由七个显示单元组成,每个显示单元可以显示数字0-9中的一个。
通过控制不同的显示单元,可以实现显示不同的数字。
Arduino开发板具有数字输出引脚和电源引脚。
通过给数字输出引脚不同的电平(高电平或低电平),就可以控制LED数码管的亮灭。
四、实验步骤1.将数码管的引脚与Arduino开发板的数字输出引脚连接。
通常数码管的引脚分别为a、b、c、d、e、f、g(表示数码管的七个显示单元),接线顺序可以根据具体情况调整。
2.打开Arduino开发环境,编写程序控制数码管显示特定的数字。
以下是一个示例程序,用于控制数码管显示数字1:void setup() {// 将数码管的引脚设置为输出模式pinMode(2, OUTPUT); // apinMode(3, OUTPUT); // bpinMode(4, OUTPUT); // cpinMode(5, OUTPUT); // dpinMode(6, OUTPUT); // epinMode(7, OUTPUT); // fpinMode(8, OUTPUT); // g}void loop() {// 通过设置不同的引脚电平,控制数码管的显示digitalWrite(2, HIGH); // adigitalWrite(3, LOW); // bdigitalWrite(4, LOW); // cdigitalWrite(5, HIGH); // ddigitalWrite(6, HIGH); // edigitalWrite(7, HIGH); // fdigitalWrite(8, LOW); // gdelay(1000); // 等待1秒钟}3.将Arduino开发板连接到计算机,并烧录程序到开发板中。
一、实验目的本次实训的主要目的是让学生通过实际操作,掌握数码管的基本原理、连接方式、驱动方法以及编程技巧,能够利用数码管实现数字的显示。
通过本次实训,学生将能够:1. 理解数码管的工作原理和分类。
2. 掌握数码管的驱动电路和连接方法。
3. 学会使用编程语言控制数码管显示数字。
4. 培养动手能力和解决问题的能力。
二、实验原理数码管是一种常用的显示器件,用于显示数字、字母或其他符号。
根据发光段数的不同,数码管可以分为七段数码管和十六段数码管。
七段数码管由七个发光段组成,可以显示0-9的数字和部分字母;十六段数码管由十六个发光段组成,可以显示更多的字符。
数码管的显示原理是:通过控制各个发光段的亮与灭,来组成不同的字符。
在七段数码管中,通常将七个发光段分别命名为a、b、c、d、e、f、g,其中g段为小数点。
当某个发光段接收到高电平时,该段发光;当接收到低电平时,该段不发光。
数码管的驱动方法主要有以下几种:1. 静态驱动:每个数码管都连接到独立的驱动器上,优点是显示稳定,但需要较多的引脚和布线通道。
2. 动态驱动:多个数码管共用一组驱动器,通过轮流点亮各个数码管,实现多位数码管的显示。
优点是引脚和布线通道较少,但显示效果不如静态驱动。
三、实验器材1. 数码管(七段或十六段)2. 驱动芯片(如74HC595)3. 电阻、电容等电子元件4. 开发板(如Arduino、51单片机等)5. 编程软件(如Arduino IDE、Keil等)四、实验步骤1. 数码管识别:观察数码管的引脚排列,确定各个发光段的连接方式。
2. 驱动电路搭建:根据数码管的类型和驱动方法,搭建相应的驱动电路。
例如,使用74HC595芯片作为驱动器,连接数码管和驱动芯片。
3. 编程控制:使用编程软件编写程序,控制数码管显示数字。
程序主要包括以下内容:- 初始化驱动器;- 设置数码管的显示模式(静态或动态);- 根据需要显示的数字,计算并输出对应的段码;- 控制数码管显示。
Guangdong Polytechnic Normal UniversityLabVIEW程序设计基础实验报告实验题目:一位七段数码管显示专业:应用电子技术教育(师范)年级班别:13级2班组员姓名:指导教师:向英二级学院:电子与信息学院二◦一六年三月三^一日一位七段数码管显示【实验目的】1. 认识七段数码管并学习七段数码管的工作原理;2. 学习在NI ELVIS II硬件实验平台,并通过LabVIEW程序控制数码管显示的数字。
3. 学会使用NI ELVISII的软件驱动、连接NI ELVIS II实验平台、编写LabVIEW 程序。
【实验原理】利用NI ELVIS II硬件实验平台,采用元器件搭建硬件电路,编写LabVIEW 程序框图与前面板控制窗口,然后运行程序以实现采用自动与手动两种方式在数码管上显示数字的现象。
1. 了解数码管结构:图1 一位七段数码管结构图2 •数码管原理及接线原理:每个数码管的有8个段:a、b、c、d、e、f、g、h (h是小数点),都分别连到对应的P0-P7, 8个数码管分别由8个选通信号P0-P7来选择。
本实验采用共阴极的七段数码显示器,将七段数码显示器的阴极连在一起,为了不让数码管被意外烧掉,将abcdefgh七段数码管分别通过100Q的上拉电阻接入原型实验平台中的数字I/O 口,a接口接入上端数码管,b接口接入右上端数码管,c 接口接入右下端数码管,d接口接入下端数码管,e接口接入右下端数码管,f 接口接入右上端数码管。
当需要哪一段数码管发亮时,只需在LabVIEW的程序控制中输入高电平1即可。
2. 数码管硬件接线原理图。
段符十人进制代码显示号dp0f e d c b a共阴极共阳极0001111113FH COH06H F9H 1000001102010110115BH A4H3010011114FH BOH4010011099H5011011016DH92H601111101S2H70000011107H F8H8011111117FH SOH9011011116FH9OH图3 一位七段数码管真值表【实验所需元器件】所需元器件与器材:【实验步骤】、搭建硬件电路:GND■■■VE f 匸O O Q 1 O O S *■ F * ■■ d !• '* lr * n O O 0 o o H AD SB -M CR5O d 口 €Z3 o o o B F-" ■—* I —»■ED 7 tn 5图4七段数码管硬件连接图、设计程序流程图图5七段数码管程序流程图设计思路的是利用应用数码管显示数字,采用两种方式控制输入显示,每位显示的数字由实验者通过各自的数字输入框控制输入0-9的数值,各位数字的显示间相互独立,互不影响。
八位七段数码管动态显示电路的设计一、实验目的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。
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。
实验四七段数码管显示实验
一、实验目的
掌握数码管显示数字的原理。
二、实验内容
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-1
2.动态显示:数码管为共阴极,段码采用相同驱动,输入端加高电平,选中的数码管对应段点亮,位码采用同相驱动,位码输入端低电平选中,按图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 segment
ioport equ 0c400h-0280h
io8255a equ ioport+288h
io8255b equ ioport+289h
io8255c equ ioport+28ah
io8255k equ ioport+28bh
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
mesg1 db 0dh,0ah,'Input a num (0--9),other key is exit:',0dh,0ah,'$'
bz db ?
cz db 04h
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,io8255k ;使8255的A口为输出方式
mov ax,80h
out dx,al
sss0: mov si,offset bz
mov cx,04h
sss1: mov dx,offset mesg1 ;显示提示信息
mov ah,09h
int 21h
mov ah,01 ;从键盘接收字符
int 21h
cmp al,'0' ;是否小于0
jl exit ;若是则退出
cmp al,'9' ;是否大于9
jg exit ;若是则退出
sub al,30h ;将所得字符的ASCII码减30H
mov [si],al ;存入显示缓冲区
inc si ;显示缓冲区指针加1
dec cx ;判断输入满4个数字吗?
jnz sss1 ;不满继续
mov si,offset bz ;从显示缓冲区取第一个数字的BCD 码
mov al,[si]
and al,0fh ;屏蔽高四位暂存AL
inc si ;显示缓冲区指针加1
mov ah,[si] ;取第二个数字的BCD码到AH
sal ah,4h ;右移4次到高四位
add al,ah ;两个BCD码合并成一个字节
mov bl,al ;暂存入BL
inc si
mov al,[si] ;取第三个数字的BCD码
and al,0fh
inc si
mov ah,[si] ;取第四个数字的BCD码到AH
sal ah,4h
add ah,al
mov al,ah
mov dx,io8255a ;从8255的A口输出(后两个数字)out dx,al
mov al,bl
mov dx,io8255b ;从8255的B口输出(前两个数字)out dx,al
mov al,0f0h
mov dx,io8255c ;从8255的C口输出位码
out dx,al
mov dl,0ffh
mov ah,06
int 21h
je sss0 ;有键按下则退出
exit: mov ah,4ch ;返回
int 21h
code ends
end start
2.内容二的参考程序
源程序清单如下:
data segment
ioport equ 0C400h-0280h
io8255c equ ioport+28ah
io8255k equ ioport+28bh
io8255a equ ioport+288h
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 01h,02h,03h,04h,05h,06h,07h,08h ;存放要显示的十位和个位
con db ? ;位码
data ends
code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
mov dx,io8255k ;将8255设为A口C口输出mov al,80h
out dx,al
loop2: mov al,08h ;设置数码管位计数器初值到CON mov byte ptr con,al
mov si,offset buffer1 ;置显示缓冲器指针SI
mov ah,7fh ;置位码初值
disp0: mov cx,0ffffh
mov bl,ds:[si] ;取显示缓冲区显示值存BX
mov bh,0h
push si
mov dx,io8255c ;位码从C口输出
mov al,ah
out dx,al
mov dx,io8255a
mov si,offset led ;置led数码表偏移地址为SI
add si,bx ;求出对应的led数码
mov al,byte ptr [si]
out dx,al ;段码从A口输出
disp1: loop disp1 ;延时
mov cx,0ffffh
disp2: loop disp2
ror ah,01h ;位码右移1位
pop si
inc si ;显示缓冲区指针加1
mov al,byte ptr con
dec al
mov byte ptr con,al
jnz disp0 ;数码管位计数器减1为0吗?,不为0继续
mov dx,io8255a ;为0,关数码管显示
mov al,0
out dx,al
mov dl,0ffh
mov ah,06
int 21h
je loop2 ;有键按下则退出
mov ah,4ch ;返回
int 21h
code ends
end start
实验总结:
通过这次试验,我了解到自定义数据类型可以根据自己的需要方便设定,有很大的灵活性。
而在程序的编写过程中,我们应该首先分析各个端口的优先级顺序,然后进行判断,分析设计。