实验5 LED数码管动态显示电路的设计与仿真

合集下载

数码管动态显示实训报告

数码管动态显示实训报告

一、实训目的本次实训旨在通过实际操作,让学生掌握数码管动态显示的原理,了解数码管动态扫描显示电路的设计方法,提高学生使用Verilog HDL进行层次化设计电路的能力。

通过实训,学生能够理解并应用动态扫描显示数码管、数据选择器及其信号分配方法,同时熟悉使用可编程芯片(如FPGA/CPLD)控制多位动态扫描数码管的显示。

二、实训环境1. 实训设备:FPGA开发板、数码管、信号源、示波器等。

2. 软件工具:Quartus II、ModelSim等。

3. 实训教材:相关电子设计教材、Verilog HDL编程指南。

三、实训原理数码管动态显示技术是利用人眼的视觉暂留效应,通过快速切换显示不同的数码管,使观察者感觉多个数码管同时显示。

具体原理如下:1. 数码管结构:数码管由若干个LED段组成,通过点亮不同的段来显示数字或字符。

2. 共阳/共阴数码管:数码管分为共阳和共阴两种类型。

共阳数码管的阳极连接在一起,共阴数码管的阴极连接在一起。

3. 动态扫描:通过控制每个数码管的点亮和熄灭,实现多位数码管的动态显示。

4. 数据选择器:用于选择要显示的数字或字符对应的段编码。

四、实训过程1. 设计3位数码管动态扫描显示电路:- 使用Verilog HDL设计数码管显示模块,包括段编码生成、位选控制、时钟分频等。

- 设计数据选择器,用于选择要显示的数字或字符对应的段编码。

- 设计主控制器,用于控制动态扫描的时序。

2. 实现显示功能:- 将学号的后3位数字输入到数码管显示电路中。

- 使用可编程芯片(如FPGA/CPLD)实现电路的编译和下载。

3. 提高性实验:- 增加一个功能切换控制开关,实现数码管显示数字的自动循环移位。

- 设计其他显示功能,如显示不同的字符或图案。

4. 实验测试:- 使用示波器观察数码管显示电路的时序信号,确保电路正常工作。

- 使用Quartus II进行仿真测试,验证电路的功能。

五、实验结果与分析1. 3位数码管动态扫描显示电路:- 成功实现了学号后3位数字的动态显示。

数码管动态显示实验报告

数码管动态显示实验报告

一、实验目的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. 熟悉了单片机与数码管之间的接口连接,提高了动手能力。

数码管动态显示实验报告

数码管动态显示实验报告

数码管动态显示实验报告1.实验目的:本实验旨在通过使用单片机控制数码管的动态显示,了解数码管的原理和使用方法,加深对单片机控制的理解。

2.实验原理:数码管是由许多发光二极管(LED)组成的,每个数码管有7个发光二极管组成7段,再加上一个小数点(或8段数码管),通过控制每个发光二极管的亮灭状态,可以显示出数字、字母等字符。

本实验使用的是共阴极数码管,在通常情况下,数码管引脚为低电平时亮灯,为高电平时灭灯。

3.实验器材:-STC89C52单片机-共阴极数码管-电阻-面包板及连接线-电源4.实验步骤:步骤1:连接电路将数码管的7个引脚分别连接到单片机的7个I/O引脚上,并通过电阻限流。

连接电路后,确认连接无误。

步骤2:编写程序使用C语言编写程序,实现数码管的动态显示。

可以使用延时函数和位操作函数控制数码管的亮灭,通过改变每个数码管引脚的高低电平状态,实现显示不同的数字、字母。

步骤4:实验观察与分析观察数码管的显示效果,通过改变程序中的参数,可以实现不同的显示效果。

5.实验结果与分析:经过实验,我们成功实现了数码管的动态显示。

通过编写程序,我们可以实现数码管显示数字、字母等不同的字符。

调整程序中的参数,可以实现不同的动态显示效果,如流水灯、闪烁等。

数码管的动态显示是通过改变每个数码管引脚的高低电平实现的,通过快速改变引脚电平状态的时间间隔,创建了肉眼无法察觉的视觉效果,从而实现了动态显示。

此外,通过实验我们还了解到了单片机控制数码管的原理和方法,加深了对单片机控制的理解。

6.实验总结:通过本实验,我们了解到了数码管的动态显示原理和方法,并通过编写程序,成功实现了数码管的动态显示。

同时,我们还巩固了单片机控制的知识,提高了自己的动手能力和问题解决能力。

在今后的学习和工作中,我们将进一步掌握数码管的使用方法,并能够将其应用于更加复杂的应用场景中,实现更多有趣的功能。

实验说明:实验五 LED数码显示PLC控制组态仿真实验

实验说明:实验五  LED数码显示PLC控制组态仿真实验

247实验五 LED 数码显示PLC 控制组态仿真实验一、 实验目的1. 初步学会使用组态软件, 掌握PLC 控制系统的组态仿真设计基本原理。

2.学习FPWIN-GR 软件的使用,掌握用梯形图编写PLC 程序及程序的调试方法。

3.熟悉LED 数码显示控制的PLC 编程及调试。

二、实验器材1.微机一台(内有“力控”组态软件和“FPWIN -GR”编程软件)。

2.松下FP1-C24型PLC 一台或FP0R 系列PLC 一台。

3.连接线(微机与PLC 的通信线)和PLC 的电源线。

4.给FP0R 型PLC 供电的24V 直流电源(可选)、FP 手持编程器Ⅱ一台(可选)。

三、实验原理本实验是利用PLC 来控制一位7段LED 数码管的显示,LED 设备的组态仿真界面如图1所示。

图1 LED 组态仿真界面实验的控制要求为:1) 用PLC 来控制一位7段数码管。

数码管的每一段都对应于PLC 的一个输出端子。

PLC输出端子的“1”、“0”状态对应于相应段的亮与灭。

2)仿真界面上有两个按钮“+”、“-”,每按动一次“+”按钮,数字加1,每按动一次“-”按钮,数字减1,同时界面上显示出现在应该显示的数字。

3)本实验要求能正确显示数字0~9即可。

1.I/O分配表(见表1)表1 I/O分配表说明:表1中的WR0+1和WR0-1指每按动一次界面上的按钮“+”是将PLC的中间继电器WR0的内容加1,即执行WR0=WR0+1操作;每按动一次界面上的按钮“-”是将PLC 的中间继电器WR0的内容减1,即执行WR0=WR0-1操作。

五、预习要求根据给定的控制要求和I/O分配表,用梯形图编写PLC程序并写出注释说明。

六、实验步骤与内容1.连接计算机与PLC装置,启动计算机,接通PLC装置的电源。

2.把参考程序led.fp或newled.fp下载到PLC中运行,之后关闭FPWIN或切换到离线状态,启动组态软件的运行系统,进入LED数码显示控制组态仿真系统观察一下程序运行的情况,这样有利于理解PLC的控制要求。

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)—数字时钟LED数码管显示二、实验内容和实验目的1. 6个数码管动态扫描显示驱动2. 按键模式选择(时\分\秒)与闹钟(时\分)调整控制,3. 用硬件描述语言(或混合原理图)设计时、分、秒计数器模块、闹钟模块、按键控制状态机模块、动态扫描显示驱动模块、顶层模块。

要求使用实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒;要求模式按键和调整按键信号都取自经过防抖处理后的按键跳线插孔。

实验目的: 1)学会看硬件原理图, 2)掌握FPGA硬件开发的基本技能3)培养EDA综合分析、综合设计的能力三、实验步骤、实现方法(或设计思想)及实验结果主要设备: 1)PC机, 2)硬件实验箱, 3)Quartus II软件开发平台。

1.打开Quartus II , 连接实验箱上的相关硬件资源, 如下图1所示。

2.建立新文件, 选择文本类型或原理图类型。

3. 编写程序。

4.编译5. 仿真, 加载程序到芯片, 观察硬件输出结果(数码管显示)6.结果正确则完成。

若结果不正确, 则修改程序, 再编译, 直到正确。

模24计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count24 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count24;ARCHITECTURE arc OF count24 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,en)BEGINhh<=a;hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0010" AND b="0011") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;IF(a="0010" AND b="0010") THENcout<='1';ELSE cout<='0';END IF;END IF;END IF;END PROCESS;END arc;模60计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count60 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count60;ARCHITECTURE arc OF count60 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL sout:STD_LOGIC;BEGINPROCESS(clk)BEGINhh<=a; hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0101" AND b="1001") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;END IF;END IF;END PROCESS;sout<='1' WHEN a="0101" AND b="1001" ELSE '0';cout<=sout AND en;END arc;4-7显示译码模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY segment4to7 ISPORT(s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g:OUT STD_LOGIC);END segment4to7;ARCHITECTURE arc OF segment4to7 IS SIGNAL y:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINa<= y(6);b<= y(5);c<= y(4);d<= y(3);e<= y(2); f<= y(1);g<= y(0);PROCESS(s)BEGINCASE s ISWHEN "0000"=>y<="1111110"; WHEN "0001"=>y<="0110000"; WHEN "0010"=>y<="1101101"; WHEN "0011"=>y<="1111001"; WHEN "0100"=>y<="0110011"; WHEN "0101"=>y<="1011011"; WHEN "0110"=>y<="1011111"; WHEN "0111"=>y<="1110000"; WHEN "1000"=>y<="1111111"; WHEN "1001"=>y<="1111011"; WHEN OTHERS=>y<="0000000"; END CASE;END PROCESS;END arc;带闹钟控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mode_adjust_with_alarm ISPORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END mode_adjust_with_alarm;ARCHITECTURE arc OF mode_adjust_with_alarm ISTYPE mystate IS (s0,s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS (c_state)BEGINCASE c_state ISWHEN s0=> next_state <= s1; clkh<=clk1hz; clkm<=clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="000";WHEN s1=> next_state <= s2; clkh<=adjust; clkm<= '0'; clks<='0';enh<='1'; enm<='0';enha<='0'; clkh_a<= '0';clkm_a<= '0'; mode_ss <="001";WHEN s2=> next_state <= s3; clkh<= '0'; clkm<=adjust; clks <= '0';enh<='0';enm<='1';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="010";WHEN s3=> next_state <= s4; clkh<= '0'; clkm<= '0'; clks<=adjust;enh<='0'; enm<='0';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="011";WHEN s4=> next_state <= s5; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0';enm<='0';enha<='1'; clkh_a<=adjust; clkm_a<= '0'; mode_ss <="100";WHEN s5=> next_state <= s0; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<=adjust; mode_ss <="101";END CASE;END PROCESS;PROCESS (mode)BEGINIF (mode'EVENT AND mode='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;扫描模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END scan;ARCHITECTURE arc OF scan ISTYPE mystate IS (s0, s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS ( c_state )BEGINCASE c_state ISWHEN s0=> next_state <=s1; ss<="010";WHEN s1=> next_state <=s2; ss<="011";WHEN s2=> next_state <=s3; ss<="100";WHEN s3=> next_state <=s4; ss<="101";WHEN s4=> next_state <=s5; ss<="110";WHEN s5=> next_state <=s0; ss<="111";END CASE;END PROCESS;PROCESS (clk256hz)BEGINIF (clk256hz'EVENT AND clk256hz='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;复用模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END mux;ARCHITECTURE arc OF mux ISSIGNAL a,hhtmp,hltmp,mhtmp,mltmp,shtmp,sltmp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(mode_ss)BEGINCASE mode_ss ISWHEN "000"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "001"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "010"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "011"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "100"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN "101"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN OTHERS=>hhtmp<="0000";hltmp<="0000";mhtmp<="0000";mltmp<="0000";shtmp<="0000";sltmp<="0000"; END CASE;END PROCESS;PROCESS(ss)BEGINCASE ss ISWHEN "010"=> a <=hhtmp;WHEN "011"=> a <=hltmp;WHEN "100"=> a <=mhtmp;WHEN "101"=> a <=mltmp;WHEN "110"=> a <=shtmp;WHEN "111"=> a <=sltmp;WHEN OTHERS => a <="0000";END CASE;y<=a;END PROCESS;alarm<='1' WHEN ((hh=hha)AND(hl=hla)AND(mh=mha)AND(ml=mla)) ELSE '0';END arc;闪烁模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY blink_control ISPORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END blink_control;ARCHITECTURE arc OF blink_control ISBEGINPROCESS (ss,mode_ss)BEGINIF(ss="010" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="110" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="111" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="010" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="101") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="101") THEN blink_en<='1';ELSE blink_en<='0';END IF;END PROCESS;END arc;Top文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY design3 ISPORT (mode,adjust,clk1hz,clk2hz,clk256hz,clk1khz:IN STD_LOGIC;alarm,a,b,c,d,e,f,g:OUT STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END design3;ARCHITECTURE arc OF design3 ISCOMPONENT mode_adjust_with_alarm PORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT scan PORT (clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT segment4to7 PORT (s: IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g: OUT STD_LOGIC);END COMPONENT;COMPONENT mux PORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END COMPONENT;COMPONENT blink_control PORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END COMPONENT;COMPONENT count24 PORT (clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT count60 PORT (clk ,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNALclkh,enh,clkm,enm,clks,clkh_a,clkm_a,coutm,couts,coutm_en,couts_en,cout,vcc,coutma_en,coutma,alarm1,bli nk_en,blink_tmp,enha: STD_LOGIC;SIGNAL mode_ss,ss1:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,y,i:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINvcc<='1';coutm_en <= enh OR coutm;couts_en <= enm OR couts;coutma_en<= enha OR coutma;blink_tmp<=blink_en and clk2hz;i(3)<=y(3) OR blink_tmp;i(2)<=y(2) OR blink_tmp;i(1)<=y(1) OR blink_tmp;i(0)<=y(0) OR blink_tmp;ss<=ss1;alarm<=alarm1 AND clk1khz;u1:mode_adjust_with_alarmPORT MAP( adjust,mode,clk1hz,clkh,enh,clkm,enm,clks,enha,clkh_a,clkm_a,mode_ss);u2:count24 PORT MAP(clkh,coutm_en,cout,hh,hl);u3:count60 PORT MAP(clkm,couts_en,coutm,mh,ml);u4:count60 PORT MAP(clks,vcc,couts,sh,sl);u5:count24 PORT MAP(clkh_a,coutma_en,cout,hha,hla);u6:count60 PORT MAP(clkm_a,vcc,coutma,mha,mla);u7:mux PORT MAP(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,ss1,mode_ss,y,alarm1);u8:scan PORT MAP(clk256hz,ss1);u9:blink_control PORT MAP(ss1,mode_ss,blink_en);u10:segment4to7 PORT MAP(i,a,b,c,d,e,f,g);END arc;实验结果:数字钟包括正常的时分秒计时, 实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒。

led数码显示实验报告

led数码显示实验报告

led数码显示实验报告LED数码显示实验报告引言:在现代电子技术领域中,LED(Light Emitting Diode)作为一种重要的光电器件,被广泛应用于数码显示、照明和通信等领域。

本实验旨在通过对LED数码显示的实验研究,深入了解其工作原理和特性。

一、实验目的本实验的主要目的是通过实际操作,掌握LED数码显示的原理和应用。

具体目标包括:1. 理解LED数码显示的基本工作原理;2. 掌握LED数码显示的驱动电路设计;3. 学会使用Arduino等开发板进行LED数码显示的控制。

二、实验原理1. LED数码显示的基本工作原理LED数码显示是利用LED的发光特性,通过控制不同的LED点亮或熄灭,来显示数字或字符。

每个LED都是由一个发光二极管和一个驱动电路组成。

当驱动电路给LED提供足够的电流时,LED会发光。

而当电流不足时,LED则熄灭。

2. LED数码显示的驱动电路设计LED数码显示的驱动电路通常采用多路复用方式。

以共阳极七段数码管为例,其驱动电路设计如下:- 使用NPN型晶体管作为开关,控制每个LED的点亮和熄灭;- 使用限流电阻限制LED的电流,避免过流损坏;- 使用Arduino等开发板产生控制信号,实现对LED数码显示的控制。

三、实验步骤1. 准备实验材料和设备,包括七段数码管、NPN型晶体管、限流电阻、Arduino开发板等;2. 按照电路图连接实验电路,确保连接正确无误;3. 编写Arduino程序,控制各个LED的点亮和熄灭,实现数字显示;4. 上传程序到Arduino开发板,并观察LED数码显示的效果;5. 调整程序,实现不同数字或字符的显示。

四、实验结果与分析通过实验,我们成功实现了LED数码显示的控制。

通过编写程序,我们可以控制每个LED的点亮和熄灭,从而实现数字或字符的显示。

同时,我们还观察到LED数码显示的亮度和颜色随电流的变化而变化。

通过调整限流电阻的值,我们可以控制LED的亮度,而通过改变驱动电流的方向,我们可以改变LED的颜色。

8位LED数码管动态显示电路的仿真测试

8位LED数码管动态显示电路的仿真测试

数字电子技术仿真实验实验题目:8位LED数码管动态显示电路院系:电子与信息工程学院专业:电子信息工程班级:2010级X班老师:XXX姓名:XXX学号:XXXXXXXXXX8位LED数码管动态显示电路的仿真测试一,实验目的:(1)掌握LED数码管动态显示的工作原理。

(2)掌握BCD—七段显示译码器74LS48,3—8线译码器74LS138的应用。

(3)掌握MultiSIM中LED数码管的应用。

二,实验原理:LED数码管有静态显示和动态显示2种显示方式。

LED数码管工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地,且使用一片译码驱动芯片驱动一位七段LED数码管进行数码显示。

LED数码管工作于动态显示方式时,使用一片译码驱动芯片驱动多位七段LED数码管,有控制电路控制各位显示器分别进行数码显示,即每个显示器按照不同的时间轮流使用这片译码驱动芯片,从而是电路更加简单。

三,实验设配及元器件:四,仿真结果:1,显示相同数码电路的仿真测试:2,显示不同数码电路的仿真实验:(1)当频率为100HZ时:LED数码管显示的数码及显示的顺序:(2)当频率为100KHZ时:LED数码管显示的数码及显示的顺序:五,实验总结:通过此次实验,不仅让我对仿真更加熟悉,也加深了我对数字电子电路的理解。

在仿真过程中,我遇到了很多困难,经过思考和尝试,终于将实验做成功了。

例如刚开始我不知道字符信号发生器再那里,于是就在原件中一个一个的试,很快就在工具栏上的图标中找到了。

还有数码管,在元件库中找了很久,终于在Indicators下面的HEX_DISPLAY中才找到。

电路图连接完后,因为字符信号发生器没有接地,数码管始终不能显示。

改正后,刚开始又始终只有一位数码管显示,经过思考,原来是频率低了,当我把频率变大后,循环扫描的速度变得足够快,就可以看到8位LED数码管的持续发光。

数码管动态显示实验

数码管动态显示实验

数码管动态显示实验一该实验采用proteus 7.5 sp3进行的仿真,仿真原理图如下图所示,其中采用的元器件有AT89C51单片机,74HC573锁存器,共阳极数码管。

单片机的P0口用与输出数码管要显示的段码,P2口用于选通要点亮的数码管。

数码管通过动态扫描显示HELLO,HELLO循环左移,左移一位LED灯亮下。

实验程序如下:/*********************************************************************** 程序名; 数码管动态显示实验* 功能:数码管通过动态扫描显示HELLO,HELLO循环左移,左移一位LED灯* 亮下。

* 编程者:ZPZ* 编程时间:2009/8/4**********************************************************************/#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit P1_7=P1^7;uchar num;uchar code table2[]={0x89,0x86,0xc7,0xc7,0xc0,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0x86,0xc7,0xc7,0xc0,0xbf};void delay(uint);void main(){unsigned long b=0;uint a;uint l=0,k=6;P1_7=0;while(1){b++;a=0x01;if(b<80){for(num=l;num<k;num++){P2=a;a=a<<1;if(a==0x40)a=0x01;P0=table2[num];delay(2);}}else{ b=0;l++;k++;P1_7=!P1_7;if(l==12){l=0;k=6;}}}}void delay(uint z){uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}数码管动态显示实验二该实验如同实验一,不同之处在于,该实验是将预先设定的一个百位数,通过动态扫描使其在数码管的后三位显示。

数码管的动态显示实验报告

数码管的动态显示实验报告

数码管的动态显示实验报告数码管的动态显示实验报告一、引言数码管是一种常见的数字显示器件,广泛应用于计算机、电子仪器和仪表等领域。

本实验旨在通过动态显示的方式,展示数码管的工作原理和应用。

二、实验目的1. 了解数码管的基本结构和工作原理;2. 学习使用单片机控制数码管进行动态显示;3. 掌握数码管的编码方式和显示原理。

三、实验器材和原理1. 实验器材:数码管、Arduino开发板、面包板、杜邦线等;2. 实验原理:数码管是由多个发光二极管组成的,每个发光二极管可以通过控制其阳极和阴极来实现亮灭。

通过快速切换不同的发光二极管,可以实现数码管的动态显示。

四、实验步骤1. 连接电路:将数码管的阳极和阴极分别连接到Arduino开发板的数字输出引脚和地线上;2. 编写程序:使用Arduino开发环境,编写程序控制数码管的动态显示;3. 上传程序:将编写好的程序上传到Arduino开发板;4. 运行实验:观察数码管的动态显示效果。

五、实验结果和分析经过实验,我们成功实现了数码管的动态显示。

通过控制不同的数字和显示时间间隔,我们可以展示各种数字、字母、符号等。

数码管的动态显示效果生动鲜明,能够吸引人的注意力。

六、实验心得通过本次实验,我深入了解了数码管的工作原理和应用。

数码管作为一种常见的显示器件,在现代电子领域扮演着重要的角色。

掌握数码管的编码方式和显示原理,对于今后的学习和工作都具有重要意义。

七、实验应用数码管广泛应用于各种计算机和电子设备中,如电子钟、电子秤、数字仪表等。

其动态显示效果可以提高用户体验,增加信息传递效果。

同时,数码管的低功耗、易控制等特点也使其成为电子产品中不可或缺的一部分。

八、实验展望数码管作为一种显示器件,随着科技的发展,其在分辨率、显示效果、节能等方面还有很大的发展空间。

未来,我们可以期待更加智能化、高清晰度的数码管产品的出现,为人们的生活和工作带来更多的便利和乐趣。

九、结论通过本次实验,我们深入了解了数码管的动态显示原理和应用。

实验五 数码管动态显示

实验五 数码管动态显示

实验五数码管动态显示实验
一.实验内容
1、在proteus软件中画好数码管动态显示实验电路,共阳数码管4个,由P0口作数据输出口与7段数码管数据引脚相连,P3.0~P3.3引脚输出位选控制信号。

2. 在keil软件中编写程序,采用动态显示法,实现数码管分别显示数字0,1,2,3 。

二.实验目的
1.巩固Proteus软件和keil软件的使用方法;
2. 掌握7段数码管的连接方式和动态显示法;
3. 掌握查表程序和延时子程序的设计。

三、实验电路及连线
四、程序流程图
五、实验代码
/*
*4只数码管采用动态扫描法显示0~3* */
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0}; void delay(uint16 x)
{
uint16 i,j;
for(i = x; i > 0; i --)
for(j = 114; j > 0; j --);
}
void main()
{
uint8 i;
while(1)
{
for(i = 0; i < 4; i ++)
{
P3 = 0x01 << i;
P0 = LED_CODE[i];
delay(10);
}
}
}
六、实验现象及结果分析。

数码管显示电路实训报告

数码管显示电路实训报告

一、实训目的1. 掌握数码管的结构、工作原理及驱动方式;2. 学会使用动态扫描法驱动数码管;3. 熟悉常用数字电路元件及电路设计方法;4. 培养动手实践能力和团队合作精神。

二、实训器材1. 单片机实验箱2. 数码管(共阳极、共阴极各1个)3. 电阻、电容、二极管、三极管等数字电路元件4. 连接线、电源、示波器等辅助设备三、实训内容1. 数码管识别与测试2. 数码管静态显示电路设计3. 数码管动态显示电路设计4. 数码管显示电路应用实例四、实训步骤1. 数码管识别与测试(1)观察数码管外观,了解其结构特点,如共阳极、共阴极等;(2)使用示波器测试数码管各段位引脚的电压,判断其工作状态;(3)根据测试结果,确定数码管的驱动方式(静态或动态)。

2. 数码管静态显示电路设计(1)设计电路原理图,选择合适的驱动电路;(2)计算电阻、电容等元件参数,绘制元件布局图;(3)焊接电路,检查电路连接是否正确;(4)编写程序,实现数码管显示功能;(5)调试电路,观察数码管显示效果。

3. 数码管动态显示电路设计(1)分析动态扫描显示原理,确定扫描频率和占空比;(2)设计动态扫描控制电路,实现多位数码管的动态显示;(3)编写程序,实现动态显示功能;(4)调试电路,观察数码管显示效果。

4. 数码管显示电路应用实例(1)设计一个简单的时钟显示电路,实现时分秒的显示;(2)设计一个温度显示电路,将温度值转换为数码管显示;(3)设计一个电压显示电路,将电压值转换为数码管显示;(4)编写程序,实现上述电路的显示功能;(5)调试电路,观察数码管显示效果。

五、实训总结1. 通过本次实训,掌握了数码管的结构、工作原理及驱动方式;2. 学会了使用动态扫描法驱动数码管,提高了电路设计能力;3. 熟悉了常用数字电路元件及电路设计方法,为后续课程学习奠定了基础;4. 培养了动手实践能力和团队合作精神,提高了综合素质。

六、实训心得1. 在实训过程中,我深刻体会到理论与实践相结合的重要性。

led数码显示控制实验报告

led数码显示控制实验报告

led数码显示控制实验报告LED数码显示控制实验报告引言:在现代科技的发展中,LED(Light Emitting Diode)数码显示控制技术得到了广泛的应用。

它具有高亮度、低功耗、长寿命等优势,被广泛应用于电子产品、汽车、舞台灯光等领域。

本实验旨在通过对LED数码显示控制的研究和实践,探索其工作原理以及应用场景。

一、实验目的本实验的主要目的是通过设计与搭建一个简单的LED数码显示电路,实现对数字的显示和控制。

通过实际操作,深入了解LED数码显示控制的工作原理以及相关的电路设计和控制方法。

二、实验材料1. LED数码管:用于显示数字的组件,通常由7个发光二极管组成。

2. 数码显示驱动芯片:用于控制LED数码管的亮灭,实现数字的显示。

3. 电路板:用于搭建实验电路。

4. 电阻、电容:用于限流和滤波。

5. 面包板、导线等。

三、实验步骤1. 搭建电路:根据实验要求,将LED数码管、数码显示驱动芯片以及其他所需元件连接在电路板上。

确保接线正确、稳固。

2. 编程控制:通过编程,实现对数码显示驱动芯片的控制。

根据需要显示的数字,设置相应的控制信号,通过控制芯片的输出状态来控制LED数码管的亮灭。

3. 调试测试:将电路连接到电源,进行调试测试。

观察LED数码管的显示情况,检查是否符合预期的结果。

如有问题,及时排查故障并修复。

4. 实验数据记录:记录实验中的关键数据和结果,包括电流、电压、亮度等参数的测量结果,以及LED数码管的显示效果等。

四、实验结果与分析在实验中,我们通过搭建LED数码显示电路,成功实现了对数字的显示和控制。

通过编程控制,我们可以灵活地改变数码管上显示的数字,实现了灵活性和可变性的要求。

在实验过程中,我们还发现LED数码管的亮度和电流之间存在一定的关系。

通过改变电流的大小,我们可以调节数码管的亮度。

这为我们在实际应用中的亮度调节提供了一定的参考。

此外,在实验中我们还注意到,LED数码管的显示效果会受到环境光的影响。

(单片机实验教学资料)5.数码管动态显示

(单片机实验教学资料)5.数码管动态显示
实验效果与注意事项
实验效果上,学生能够通过实际操作掌握数码管动态显示 的方法,提高对单片机的应用能力。在实验过程中,需要 注意避免数码管亮度过高导致视觉疲劳,以及保证程序的 稳定性,避免出现闪烁或乱码现象。
展望
技术发展与新应用
教学改进与新方法
个人能力提升与拓展
随着技术的不断发展,数码管动态显 示技术将会有更多的应用领域。例如 ,在智能家居、物联网等领域中,数 码管动态显示可以作为人机交互界面 ,实现更加直观、高效的信息展示。
或字符。
数码管内部通常有8个LED段, 分别表示数字0-9和字母A-F。
当给某个LED段加上正向电压时, 该段点亮;反之,则熄灭。
动态显示与静态显示的区别
静态显示
每个数码管在某一时刻只显示一 个字符,需要使用多路复用技术 来控制多个数码管。
动态显示
通过轮流点亮不同的数码管,使 多个数码管同时显示不同的字符 ,实现多位显示。
实验结果展示
结果1
数码管成功显示数字或字母,无闪烁 或错位现象。
结果2
数码管显示效果不理想,存在闪烁或 错位现象。
结果分析
分析1
程序编写正确,数码管连接无误,因此数码管能够正确显示数字或字母。
分析2
程序中存在延时函数设置不当或数码管连接存在问题,导致数码管显示效果不 理想。
05
总结与展望
总结
发送控制信号
02
根据需要显示的内容,编写程序代码以向数码管发送相应的控
制信号。
刷新显示
03
在需要动态显示的情况下,编写程序代码以实现数码管的刷新
显示。
数码管驱动程序的编写
确定驱动程序功能
根据实际需求,确定驱动程序应具备的功能,如显示数字、字母 或自定义字符等。

(完整版)LED数码管显示实验

(完整版)LED数码管显示实验

® P L 信息工程学院实验报告课程名称:单片机原理及接口 实验项目名称:LED 数码管显示实验 实验时间:2016年3月11 班级:通信141姓名:学号:一、 实验目的:熟悉keil 仿真软件、proteus 仿真软件、软件仿真板的使用 多位LED 数码管的电路结构、与单片机的连接方法及其应用原理。

学习proteus 构建LED 数码管显示电路的方法,掌握C51中单片机控制LED 数码管动态显示的原理与编程方法。

二、 实验设备与器件硬件:微机、单片机仿真器、单片机实验板、连线若干软件:KEIL C51单片机仿真调试软件,proteus 系列仿真调试软件三、 实验原理LED 显示器是由发光二极管显示字段的显示器件。

在单片机应用系统中通常使用的是七 段LED 这种显示器有共阴极与共阳极两种共阴极LED 显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发 光二极管则点亮;共阳极LED 显示器的发光二极管阳极并接。

七段LED 数码管与单片机连接时,只要将一个 8位并行输出口与显示器的发光二极管引成绩:日 ___________________指导老师(签名):了解并熟悉一位数码管与1 1 1 1 110 98 7 6/d / * dp 1 2 34 5I' 2 1 11(c)管脚配置(b)共阳极 g f a be d c dp脚相连即可。

8位并行输出口输出不同的字节数据即可获得不同的数字或字符,通常将控制 发光二极管的8位字节数据称为段选码。

多位七段LED 数码管与单片机连接时将所有 LED 的段选线并联在一起,由一个八位I / O 口控制,而位选线分别由相应的I /O 口线控制。

如:8位LED 动态显示电路只需要两个八位 I /O 口。

其中一个控制段选码,另一个控制位选。

由于所有位的段选码皆由一个I /0控制,因此,在每个瞬间,多位LED 只可能显示相同 的字符。

要想每位显示不同的字符,必须采用动态扫描显示方式。

数电实验报告:数码管显示控制电路设计

数电实验报告:数码管显示控制电路设计

数字电子技术实验报告实验五:数码管显示控制电路设计一、设计任务与要求:能自动循环显示数字0、1、2、3、4、1、3、0、2、4。

二、实验设备:1、数字电路实验箱;2、函数信号发生器;3、8421译码器;4、74LS00、74LS10、74LS90。

三、实验原理图和实验结果:1、逻辑电路设计及实验原理推导:将0、1、2、3、4、1、3、0、2、4用8421码表示出来,如下表:表一用8421码表示设想用5421码来实现8421码表示的0、1、2、3、4、1、3、0、2、4,故将0、1、2、3、4、5、6、7、8、9用5421码表示出来以与上表做对比:表二用5421码表示:观察表一,首先可得到最高位全为0,故译码器的“8”直接接低电平即可;对比表一和表二得,“4”位上的数字两表表示的数字是一样的,故“4”直接与5421码的“4”输出相连即可,即译码器的“4”连74LS90的“Q 3”端;表一的“2”位上的数字前五行与表二的“2”位上的数字前五行显示的一样,此时表二的“5”位上的数字均为0,表一的“2”位上的数字后五行与表二的“1”位上的数字后五行一样,此时表二上的“5”位上的数字均为1,故译码器的“2”要接的是实现函数表达式为1020Q Q Q Q +的电路;最后一位上没有明显的规律,可用卡诺图求得逻辑表达式,也即译码器的“1”要连接的是实现函数表达式为230130Q Q Q Q Q Q +的电路。

至此,实验原理图即可画出了。

2、 实验原理图:3、实验结果:编码器上依次显示0、1、2、3、4、1、3、0、2、4。

实验结果图如下:四、实验结果分析:实验结果为编码器上依次显示0、1、2、3、4、1、3、0、2、4,满足实验设计要求。

五、实验心得:在这次实验前,我认真的分析了实验原理并设计了电路,并用仿真软件得出了符合实验设计要求的结果,可是在实验过程中我遇到了问题,电路连了好几遍显示的结果都不完全对,第一次做的过程中没能顺利排除故障;但我在第二次做的过程中很顺利,因为实验原理已烂熟于心,所以很快完成了实验,一次成功。

数码管的动态显示实验报告

数码管的动态显示实验报告

数码管的动态显示实验报告一、实验目的1、了解数码管的工作原理和显示方式。

2、掌握数码管动态显示的编程方法和技巧。

3、通过实验,提高对数字电路和单片机编程的综合应用能力。

二、实验原理数码管是一种常用的数字显示器件,分为共阴极和共阳极两种类型。

共阴极数码管的阴极连接在一起并接地,当阳极接高电平时,对应的段点亮;共阳极数码管则是阳极连接在一起并接电源,当阴极接低电平时,对应的段点亮。

动态显示是指依次快速地轮流点亮多个数码管,利用人眼的视觉暂留效应,使人感觉多个数码管同时稳定地显示不同的数字。

在动态显示中,需要通过控制数码管的位选和段选信号来实现数字的显示。

三、实验设备1、单片机开发板2、电脑3、编程软件四、实验步骤1、硬件连接将数码管与单片机的 I/O 口进行连接,确定位选和段选的引脚。

连接好电源和地线,确保电路连接正确无误。

2、软件编程选择合适的编程语言,如 C 语言。

定义数码管的引脚和相关的控制变量。

编写数码管显示的函数,包括位选函数和段选函数。

在主函数中,通过循环调用显示函数,实现数字的动态显示。

3、编译下载使用编程软件对编写的程序进行编译,检查是否有语法错误。

将编译成功的程序下载到单片机开发板中。

五、实验程序```cinclude <reg52h> //包含 52 系列单片机的头文件//数码管段选引脚定义sbit SEG_A = P2^0;sbit SEG_B = P2^1;sbit SEG_C = P2^2;sbit SEG_D = P2^3;sbit SEG_E = P2^4;sbit SEG_F = P2^5;sbit SEG_G = P2^6;sbit SEG_DP = P2^7;//数码管位选引脚定义sbit BIT1 = P1^0;sbit BIT2 = P1^1;sbit BIT3 = P1^2;sbit BIT4 = P1^3;//显示数字 0 9 的段码unsigned char code SEGMENT_CODE ={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//数码管位选函数void SelectBit(unsigned char bit){switch (bit){case 1:BIT1 = 0; BIT2 = 1; BIT3 = 1; BIT4 = 1; break;case 2:BIT1 = 1; BIT2 = 0; BIT3 = 1; BIT4 = 1; break;case 3:BIT1 = 1; BIT2 = 1; BIT3 = 0;BIT4 = 1;break;case 4:BIT1 = 1;BIT2 = 1;BIT3 = 1;BIT4 = 0;break;}}//数码管段选函数void SelectSegment(unsigned char num){SEG_A =(num & 0x01)? 1 : 0; SEG_B =(num & 0x02)? 1 : 0; SEG_C =(num & 0x04)? 1 : 0; SEG_D =(num & 0x08)? 1 : 0; SEG_E =(num & 0x10)? 1 : 0;SEG_F =(num & 0x20)? 1 : 0; SEG_G =(num & 0x40)? 1 : 0; SEG_DP =(num & 0x80)? 1 : 0;}//主函数void main(){unsigned char i, num = 0;while (1){for (i = 1; i <= 4; i++){SelectBit(i);SelectSegment(SEGMENT_CODEnum);num++;if (num == 10)num = 0;delay_ms(5);//适当的延时,以实现稳定显示}}}```六、实验现象与结果在实验中,当程序下载到单片机开发板后,数码管依次快速地显示数字 0 到 9,循环往复。

数码管动态显示实验报告

数码管动态显示实验报告

数码管动态显示实验报告数码管动态显示实验报告一、引言数码管是一种常见的电子显示器件,广泛应用于各种仪器仪表、计时器、计算器等电子设备中。

数码管动态显示实验是电子技术实验中的一项基础实验,通过控制数码管的亮灭状态,可以实现数字的显示。

本实验旨在通过实际操作,加深对数码管工作原理的理解,并掌握数码管的动态显示方法。

二、实验原理数码管是由多个发光二极管(LED)组成的,每个发光二极管代表一个数字或字符。

通过对发光二极管的亮灭状态进行控制,可以显示不同的数字或字符。

数码管一般采用共阳极或共阴极的方式接线,共阳极的数码管的阳极连接在一起,而共阴极的数码管的阴极连接在一起。

在动态显示实验中,采用的是共阳极数码管。

数码管的亮灭状态是通过控制数码管的阳极与地之间的电压差来实现的。

当某个数码管需要亮时,将其对应的阳极与地连接,电流通过发光二极管,使其发光。

当某个数码管需要灭时,将其对应的阳极与电源正极连接,断开与地的连接,发光二极管不通电,不发光。

三、实验步骤1. 准备实验所需材料:共阳极数码管、面包板、电阻、导线等。

2. 将数码管与面包板连接,确保连接正确,数码管的阳极连接到面包板的相应引脚。

3. 连接电路:将电源正极与数码管的共阳极连接,电源负极与面包板的地引脚连接。

4. 编写程序:根据控制数码管显示数字的逻辑,编写相应的程序。

5. 将程序下载到单片机中,通过单片机控制数码管的亮灭状态。

四、实验结果经过实验,我们成功实现了数码管的动态显示。

在程序的控制下,数码管可以显示不同的数字或字符,实现了数字的动态变化。

通过调整程序中的参数,可以实现不同的显示效果,如闪烁、滚动、循环等。

五、实验总结本次实验通过实际操作,加深了对数码管工作原理的理解。

通过编写程序,我们掌握了控制数码管动态显示的方法。

在实验过程中,我们遇到了一些问题,如数码管显示不正常、程序错误等,但通过仔细检查和调试,最终解决了这些问题。

通过这次实验,我们不仅学到了知识,还培养了动手实践和问题解决的能力。

数码管显示实验报告

数码管显示实验报告

一、实验目的1. 理解数码管的工作原理及驱动方式。

2. 掌握51单片机控制数码管显示的基本方法。

3. 学会使用动态扫描显示技术实现多位数码管的显示。

4. 提高编程能力和实践操作能力。

二、实验原理数码管是一种常用的显示器件,它由多个发光二极管(LED)组成,可以显示数字、字母或其他符号。

根据LED的连接方式,数码管可分为共阴极和共阳极两种类型。

本实验使用的是共阳极数码管。

51单片机控制数码管显示的基本原理是:通过单片机的I/O口输出高低电平信号,控制数码管的各个段(a-g)的亮灭,从而显示相应的数字或符号。

动态扫描显示技术是将多个数码管连接到单片机的I/O口,通过快速切换各个数码管的显示状态,实现多位数码管的显示。

三、实验器材1. 51单片机实验板2. 共阳极数码管3. 电阻、电容等元件4. 仿真软件(如Proteus)5. 编译器(如Keil)四、实验步骤1. 搭建电路:按照实验原理图连接51单片机、数码管和电阻等元件。

2. 编写程序:使用Keil软件编写控制数码管显示的程序。

程序主要包括以下部分:a. 初始化:设置单片机的工作状态,配置I/O口等。

b. 显示函数:根据需要显示的数字或符号,控制数码管的各个段亮灭。

c. 动态扫描函数:实现多位数码管的动态显示。

3. 编译程序:将编写好的程序编译成机器码。

4. 仿真测试:使用Proteus软件对程序进行仿真测试,观察数码管的显示效果。

5. 实验验证:将程序烧录到51单片机实验板上,进行实际测试。

五、实验结果与分析1. 实验结果:通过仿真测试和实际测试,数码管能够正确显示0-9的数字。

2. 结果分析:实验结果表明,51单片机可以成功地控制数码管显示数字。

动态扫描显示技术能够有效地实现多位数码管的显示,提高了显示效率。

六、实验总结1. 通过本次实验,我们掌握了51单片机控制数码管显示的基本方法,提高了编程能力和实践操作能力。

2. 动态扫描显示技术能够有效地实现多位数码管的显示,提高了显示效率。

《数码管动态显示》实验报告

《数码管动态显示》实验报告
延时函数:数码管显示动态扫描时,用到延时程序,这里使用延迟10us的程序,此程序会反复调用,除数码管动态扫描外,数码管的闪烁提示也用到延时函数。
显示函数:在显示前先对小时和分钟的十位和个位进行判断,小时数除以10,得到的整数为小时的十位,对小时数取余,得到小时的个位,分钟数除以10,得到分钟数的十位,对分钟数取余,得到分钟数的个位,4个数码管轮流进行显示,分别延时10us,达到数码管显示时钟的效果。
《单片机原理与应用》实验报告
姓名:
学 号:
实验名称:
数码管动态显示
班级:
电信二班
一、实验工具、器材
Proteus仿真软件,Keil程序编写软件,四个共阳数码管,AT89C51单片机
二、实验原理
a)四个七段LED数码管,通过与单片机P2接口连接实现显示功能,用延时程序和循环程序产生一秒的定时,达到时、分、秒的计时。
b)动态显示:所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度合适,字符才不闪烁。本实验要求显示的时间为时,分,并且都用两个一位数码管来实现显示,此处调用显示函数计算显示。
三、硬件电路说明
本实验使用共阳型数码管,通常的数码管分为8段,即8个LED显示段, 其中dp代表小数点。数码管显示方法可分为静态显示和动态显示两种,这里采用动态显示方式,用P2.0~P2.7口来控制LED数码管的段控线。四位共阳LED数码管,其标号分别为HourH,HourL,MinL,MinH,低电平选通,且任何时候仅有一位输出低电平,显示时对各显示器进行动态扫描,显示器分时轮流工作。虽然每次只有一个显示器显示,但是由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。P2.0~P2.7口作为输出口控制8个发光二极管的亮灭,控制数码管的显示。因此,可以实现4个LED在我们看来同时亮,显示时间。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验项目五 LED数码管动态显示电路的设计与仿真
[实验目的]
1.掌握LED数码管的动态显示原理
2.掌握LED数码管动态显示电路的设计
3.掌握对LED数码管动态显示的控制方法
[实验原理]
动态扫描显示原理:
动态显示方式是指逐位轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选。

对于每一位显示器来说,每隔一段时间点亮一次。

显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。

调整电流和时间参数,可实现亮度较高较稳定的显示。

若显示器的位数不大于8位,则控制显示器公共极电位只需8位口(称为扫描口),控制各位显示器所显示的字形也需一个8位口(成为段数据口)。

[实验仪器]
PC机一台
[Proteus用到器件的关键词]
单片机(AT89C52)、六位一体数码管(7SEG-6MPX6-CC-BLUE)
[实验内容与步骤]
1.用Proteus软件设计出六位一体LED数码管动态显示电路原理图。

2.用Keil编写程序。

首先通过单片机的P3口逐个选通数码管的位选端,再通过单片机的P2口送出要显示的字符,最后调整每个数码管点亮时间,最终便可以看到动态显示的效果。

3.将HEX文件装载到AT89C52中,单击Start按钮开始动态仿真。

[实验数据记录]
;******六位一体数码管动态显示程序*******;
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN: MOV DPH,#02H
AGAIN: MOV R2,#00H ;段选端指针计数器
MOV R3,#50H ;位选端指针计数器
LP: MOV DPL,R3
MOVC A,@A+DPTR
MOV P3,A
INC R3
CLR A
MOV DPL,R2
MOVC A,@A+DPTR
MOV P2,A
MOV R2,DPL
INC R2
CLR A
LCALL DELAY
MOV P3,#0FFH ;为了去掉余辉,在下一次显示之前关掉位选端
CJNE R2,#6,LP
AJMP AGAIN
DELAY: MOV R0,#01FH
DL1: MOV R1,#01FH
DL2: NOP
NOP
DJNZ R1,DL2
DJNZ R0,DL1
RET
ORG 0200H
TAB1: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段选代码,对应0123456789 ORG 0250H
TAB2: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH ;位选代码,分别选通第1,第2,第3,第4,
;第5,第6个数码管
END
[实验数据处理] [实验结果及讨论]。

相关文档
最新文档