实验四 数码管静态显示
简要描述数码管的静态显示方式和动态显示方式
简要描述数码管的静态显示方式和动态显示方式数码管是一种常见的数字显示器件,它由多个发光二极管组成。
数码管广泛应用于各种仪器、仪表以及数码钟表等领域,方便人们对数字进行直观的观察。
数码管的显示方式可以分为静态显示和动态显示两种。
一、静态显示方式:静态显示方式是指在任意时刻,只有某一个数码管被点亮,显示对应的数字。
在静态显示模式下,每个数码管都有一个对应的驱动电路,通过给驱动电路加电来点亮相应的数码管。
这种方式显示的数字清晰、稳定,但相对来说比较耗能。
静态显示常用于对显示要求较高、静止不动的场合。
二、动态显示方式:动态显示方式是指通过快速切换多个数码管的点亮状态来显示一个完整的数字。
通常一次只有一个数码管被点亮,然后迅速关闭,接着点亮下一个数码管,如此循环往复,以达到显示多个数字的目的。
动态显示通过控制每个数码管点亮的时间片段,用肉眼看到的是所有数字都在不断刷新,形成一个连续的显示效果。
动态显示方式能够节省能源,适用于显示频繁切换的场合。
动态显示方式还可以分为多路复用和直接显示两种。
1. 多路复用动态显示方式:多路复用动态显示方式是指通过在每一个时间片段内,依次对每个数码管进行点亮,以形成数字的显示效果。
在每个时间片段内,通过给对应的驱动电路加电,在该时间段内点亮对应的数字。
通过快速地在不同的时间片段内切换数码管的点亮状态,人眼可以看到所有数字的完整显示。
这种方式能够降低驱动电路的复杂度,适用于需要显示较多位数的场合。
2. 直接显示动态显示方式:直接显示动态显示方式是指通过在每一个时间片段内,同时点亮多个数码管,以形成数字的显示效果。
在每个时间片段内,通过给对应的驱动电路加电,在该时间段内点亮多个数码管。
通过快速地在不同的时间片段内切换多个数码管的点亮状态,人眼可以看到所有数字的完整显示。
这种方式增加了驱动电路的复杂度,但能够提高数字的亮度,适用于需要显示较亮的数字的场合。
总结:数码管的静态显示方式和动态显示方式各有特点,适用于不同的场合。
数码管静态显示实训报告
一、实训目的通过本次实训,掌握数码管静态显示的原理和方法,熟悉51单片机的编程技巧,以及如何利用单片机控制数码管显示特定的数字和字符。
同时,了解数码管在电子显示中的应用及其驱动电路的设计。
二、实训器材1. 51单片机开发板2. 数码管(共阴极或共阳极)3. 电阻4. 译码器(如74HC138)5. 驱动器(如74HC245)6. 连接线7. 编程软件(如Keil)8. 仿真软件(如Proteus)三、实训原理数码管静态显示是指每个数码管的每个段都由单片机的I/O口直接驱动。
当某个段需要显示时,相应的I/O口输出高电平或低电平,控制该段LED的亮灭。
共阴极数码管的段码共用一个电源的负极,高电平点亮;共阳极数码管的段码共用一个电源的正极,低电平点亮。
在本次实训中,我们使用51单片机的P0口输出段码数据,P2口输出位选信号,通过译码器和驱动器实现对数码管的驱动。
四、实训步骤1. 硬件连接(1)将数码管按照共阴极或共阳极的接法连接到单片机的P0口。
(2)将译码器的输入端连接到单片机的P2口。
(3)将驱动器的输入端连接到译码器的输出端。
(4)将驱动器的输出端连接到数码管的位选端。
2. 软件编写(1)定义数码管的字形码数组,存储0~9数字的字形码。
(2)编写主函数,通过循环遍历字形码数组,控制数码管显示相应的数字。
(3)编写延时函数,实现数字显示的间隔。
3. 仿真测试(1)使用Proteus软件搭建仿真电路。
(2)编写Keil软件中的程序,并编译生成HEX文件。
(3)将HEX文件下载到51单片机中。
(4)运行仿真程序,观察数码管显示的数字是否正确。
五、实训结果经过实训,我们成功实现了数码管静态显示功能。
数码管能够按照程序设置的方式,依次循环显示0~9十个数字。
六、实训心得1. 通过本次实训,我们了解了数码管静态显示的原理和实现方法,掌握了51单片机的编程技巧。
2. 在实训过程中,我们学会了如何使用译码器和驱动器扩展单片机的I/O口功能。
数码管静态显示和动态显示原理
数码管静态显示和动态显示原理数码管是一种常见的显示设备,它由多个发光二极管(LED)组成,通过控制每个LED的点亮与否,可以显示数字、字母、符号等。
数码管的显示方式主要分为静态显示和动态显示两种。
静态显示即直接将需要显示的数字发送给数码管进行显示。
实现静态显示的原理是通过控制LED的正向电流,使其发光。
1.显示单个数码管静态显示一位数码管时,需要将需要显示的数字转换为对应的二进制编码,并通过控制数码管的引脚,将对应的编码信号送到数码管,从而点亮对应的LED。
LED管的引脚包括共阳(正)端和共阴(负)端,需要根据具体的数码管类型,将对应的编码信号送到相应的引脚上。
例如,常见的共阳数码管,其引脚对应的编码信号如下表所示:数码管编码,a,b,c,d,e,f,g,DOT二进制值,1,2,4,8,16,32,64,128我们可以选择使用并口或者串口的方式,将对应的编码信号通过控制引脚进行发送,从而实现对数码管的显示。
2.显示多位数码管如果需要显示多位数码管,可以依次控制每个数码管的引脚,逐个显示数字。
例如,如果需要显示一个四位的数字,可以选择多个数码管,然后依次对每个数码管进行静态显示。
对于多位数码管,如果静态刷新频率较低,人眼会觉得显示闪烁。
因此,在静态显示中,通常需要使用较高的刷新频率,以使得显示效果更加稳定。
动态显示是指通过间歇性显示不同的位数,从而实现连续显示的效果。
动态显示的原理是通过快速的切换不同的位数,让人眼产生连续显示的错觉。
1.时分复用最常见的动态显示原理是时分复用技术,即通过快速的切换不同的位数,以使得数码管在较短的时间内完成多个位数的显示。
例如,对于一个四位数码管的显示,可以快速切换每个数码管的引脚,使得数码管按照一定的频率逐个显示不同的数字。
实现时分复用的关键是要保证刷新频率足够高,以至于人眼无法察觉到刷新的效果。
2.位数切换在时分复用中,需要对每个数码管进行位数的切换,以显示对应的数字。
8255和LED数码管显示实验
实验四 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。
实验四 数码管显示控制
实验四数码管显示控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握LED数码管显示接口技术;3、理解单片机定时器、中断技术。
二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。
图4.1共阴四位八段LED数码管的原理图图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。
实验开发板中LED数码管模块的电路原理图,如图4.2所示。
SP1a~hP0.4~P0.7SP2P0.0~P0.3图4.2 LED数码管模块电路原理图图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。
当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。
训练内容一:轮流点亮数码管来检测数码管是否正常。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110B;数码管“位选信号”初值,低电平有效LOOP:SETB P1.1;数码管位控制锁存器有效MOV P0,ACLR P1.1RL A ;形成新的“位选信号”,为选择下一位数码管做准备SETB P1.0;数码管段控制锁存器有效MOV P0,#0FFH ;数码管的所有段点亮,显示“8”CLR P1.0CALL DELAYSJMP LOOPDELAY:MOV R5,#0;延时子程序D1: MOV R6,#0D2:NOPDJNZ R6,D2DJNZ R5,D1RETEND训练内容二:静态显示,0~9计数。
静态数码管显示(可编程)
电子信息与自动化学院《可编程逻辑器件》实验报告学号:姓名:实验名称:数码管静态显示一、实验原理七段数码管是电子开发过程中常用的输出显示设备。
在实验系统中使用的是四个共阳极型七段数码管。
由于七段数码管公共端连接到VCC(共阳极型),当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
图1数码管原理图图2程序设计大致流程图二、实验步骤1、打开QuartusII软件,新建一个工程然后创建一个Verilog File,打开VHDL编辑对话框进行编程;2、主要程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity JINGTAI isport (clk:in std_logic;x: out std_logic_vector(6 downto 0);y: out std_logic_vector(3 downto 0));end JINGTAI;architecture behave of JINGTAI issignal number :integer range 50000000 downto 0;signal count: std_logic_vector (1 downto 0);signal key: std_logic_vector (3 downto 0);beginy<="0000";PROCESS(clk)begin if clk'event and clk='1' then if number<50000000 thennumber <= number+1;else number <= 0;key <= key +1;end if;end if;end process;process(key)begincase key iswhen "0000" => x <= "1000000" ;when "0001" => x <= "1111001" ;when "0010" => x <= "0100100" ;when "0011" => x <= "0110000" ;when "0100" => x <= "0011001" ;when "0101" => x <= "0010010" ;when "0110" => x <= "0000010" ;when "0111" => x <= "1111000" ;when others => null;end case;end process;end behave;3、引脚锁定图3 引脚锁定三、实验结果仿真图如下:图4时序仿真图由以上可知,实验结果符合要求,则设计成功。
实验四 数码管静态显示
实验四数码管静态显示一、实验目的1.熟练掌握单片机定时器的原理和应用方法。
2.了解数码管的原理,掌握数码管的真值表的计算方法。
二、实验内容通过对单片机编程来实现数码管静态显示。
三、实验知识点3.1定时器的初步认识时钟周期:时钟周期T是时序中最小的时间单位具体计算的方法就是1/时钟源,我们KST-51单片机开发板上用的晶振是11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200秒。
机器周期:我们的单片机完成一个操作的最短时间。
机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而C语言一条语句的时间是不可计算的。
51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/11059200秒。
定时器和计数器。
定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能。
顾名思义,定时器就是用来进行定时的。
定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会加1一次,因此,我们可以把机器周期理解为定时器的计数周期。
我们的秒表,每经过一秒,数字加1,而这个定时器就是每过一个机器周期的时间,也就是12/11059200秒,数字加1。
3.2 定时器的寄存器描述标准的51里边只有定时器0和定时器1这两个定时器,现在很多单片机也有多个定时器的,在这里我们先讲定时器0和1。
那么我前边提到过,对于单片机的每一个功能模块,都是由他的SFR,也就是特殊功能寄存器来控制。
而和定时器有关的特殊功能寄存器,有TCON和TMOD,定时值存储寄存器。
a)定时值存储寄存器表4-1中的寄存器,是存储计数器的计数值的,TH0/TL0用于T0, TH1/TL1用于T1。
表4-1 定时值存储寄存器表4-2 TCON--定时器/计数器控制寄存器的位分配(地址:88H)表4-3 TCON--定时器/计数器控制寄存器的位描述表4-2中有TF1、TR1、TF0、TR0这4位需要我们理解清楚。
实验四 七段数码管显示实验报告
实验四七段数码管显示实验一、实验目的掌握数码管显示数字的原理。
二、实验内容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实验总结:通过这次试验,我了解到自定义数据类型可以根据自己的需要方便设定,有很大的灵活性。
静态数码管显示
//做的,
{
//插入这几条语句是用来保护数码管的,使其亮度不要过高。
P1_0=~P1_0;
//当然了,明白数码显示的原理就可以了,实际应用中几乎不
//用单片机直接对数码管进行静态扫描,
del_count=0;
//因为直接用单片机静态显示数码管太耗 I/O 口了,有专门
////静态扫描数码管的芯片,比如 MAX7219 等。
void t0(void) interrupt 1 using 0
{
tcount++;
/*********************///实际应用的静态扫描是不用这几条语句的,
del_count++;
//现在实验板上没有独立的静态扫描数码管,
if(del_count==50)
//做静态扫描实验时是利用动态扫描连接方式其中一个数码管
Created with novaPDF Printer (). Please register to remove this message.
4.实物连接图: 实物图 1:
Created with novaPDF Printer (). Please register to remove this message.
}
/*********************/
if(tcount==4000) //1S 到
{
tcount=0;
count++;
if(count==10)
count=0;
P0=dispcode[count]; //送出数码管代码显示
}
} /*************程序到此结束***********************/
静态数码管显示程序
/************************************************************************** ****** 实验名 : 静态数码管实验* 使用的IO : 数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3* 实验效果 : 按下K1键,显示0,按下K2键,显示9,按下K3键,显示减1,按下K4键,*显示加1。
* 注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验*效果,最好把红外线先取下来。
*************************************************************************** ****/#include<reg51.h>#include<intrins.h>#define GPIO_DIG P0sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit K1=P3^1;sbit K2=P3^0;sbit K3=P3^2;sbit K4=P3^3;unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值void Delay10ms(); //延时10ms/************************************************************************** ****** 函数名 : main* 函数功能 : 主函数* 输入 : 无* 输出 : 无*************************************************************************** ****/void main(void){unsigned int i,j;LSA=0;LSB=0;LSC=0;while(1){if(K1==0) //检测按键K1是否按下{Delay10ms(); //消除抖动if(K1==0){j=0;}while((i<50)&&(K1==0)) //检测按键是否松开{Delay10ms();i++;}i=0;}if(K2==0) //检测按键K2是否按下{Delay10ms();if(K2==0){j=9;}while((i<50)&&(K2==0)){Delay10ms();i++;}i=0;}if(K3==0) //检测按键K3是否按下{Delay10ms();if(K3==0){j--;if(j>9)j=9;}while((i<50)&&(K3==0)){Delay10ms();i++;}i=0;}if(K4==0) //检测按键K4是否按下{Delay10ms();if(K4==0){j++;if(j>9)j=0;}while((i<50)&&(K4==0)){Delay10ms();i++;}i=0;}GPIO_DIG=DIG_CODE[j];}}/************************************************************************** ****** 函数名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输入 : 无* 输出 : 无*************************************************************************** ****/void Delay10ms(void) //误差 0us{unsigned char a,b,c;for(c=1;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);}(资料素材和资料部分来自网络,供参考。
单片机led数码管的静态控制显示方式实验报告
单片机led数码管的静态控制显示方式实验报告开发环境:
本实验使用的是Keil uV5,MCU为STC89C52RC,和四位数码管模块。
实验目的:
本次实验是静态控制数码管显示,目的是使用单片机控制四位数码管上显示一个数字。
实验准备:
硬件:STC89C52RC单片机模块,4位数码管模块;
软件:Keil uV51.3 + STC-ISP软件;
实验原理:
单片机控制数码管显示,需要使用三个管脚控制,分别为A,B,C,当A为高电平时,B和C同时为低电平时,这时显示第一个数字;当B为高电平时,A和C同时为低电平时,这时显示第二个数字;当C为高电平时,A和B同时为低电平时,这时显示第三个数字。
实验步骤:
1. 设计电路:确定STC89C52RC控制四位数码管控制连接。
2. 安装软件:安装Keil uV5以及STC-ISP软件。
3. 编程:根据原理进行程序编写,编写完整的显示代码,实现任意数字的显示。
4. 烧录:将编写的程序通过STC-ISP软件烧录,然后重新启动单片机。
5. 测试:当烧写完成,四位数码管显示正确且稳定时,表示实验测试成功。
实验结果:
实验成功,STC89C52RC控制四位数码管显示正确且稳定。
实验结论:
实验证明,基于STC89C52RC芯片,通过编写程序,可以实现不同数字或字母在四位
数码管上的显示,达到定量和定性的要求。
led数码管 静态显示 电路
LED数码管及其在静态显示电路中的应用1. 介绍LED数码管的基本概念LED数码管是一种由发光二极管(LED)组成的数字显示器件,通常用于显示数字和少量特殊字符。
它们可以在各种设备中被发现,包括数字时钟、仪表盘和计算器等。
LED数码管通常由7段或14段LED组成,每个LED代表显示数字中的一个线条或段。
2. 静态显示电路的基本原理静态显示电路是指在不改变显示内容的情况下,通过给显示器件(如LED数码管)加电来显示一组固定的数字或字符。
在静态显示电路中,LED数码管的每个段由一个控制开关来控制,当控制开关打开时,相应的LED亮起,反之则灭。
3. LED数码管在静态显示电路中的连接方式在静态显示电路中,LED数码管的连接方式通常采用共阳或共阴的方式。
共阳接法是指LED数码管的阳极均接在一起,通过接通对应的阴极来控制显示内容。
而共阴接法则是LED数码管的阴极均接在一起,通过接通对应的阳极来控制显示内容。
4. 静态显示电路中的驱动电路设计静态显示电路需要配合驱动电路来实现稳定的显示效果。
驱动电路通常包括译码器、锁存器和显示数据输入端等部分,通过这些部件能够将外部输入的数字信号转换成LED数码管需要的控制信号,从而实现对LED数码管的静态显示。
5. 对LED数码管静态显示电路的个人理解和观点静态显示电路中LED数码管的应用非常广泛,不仅可以用于数字显示,还可以结合其他传感器等模块来实现更为复杂的功能。
在设计静态显示电路时,需要考虑电路的稳定性、功耗以及显示效果等因素,以确保显示效果的同时也保证电路的可靠性和稳定性。
6. 总结LED数码管在静态显示电路中的应用是一种常见且重要的应用场景。
通过合理的连接方式和驱动电路设计,能够实现稳定、清晰的数字显示效果,为各种电子设备的显示提供了便利和可靠性。
通过这篇文章的撰写,我对LED数码管在静态显示电路中的原理和应用有了更深入的了解。
希望这篇文章也能够帮助读者更好地理解LED数码管及其在静态显示电路中的应用。
数码静态显示实训报告
一、实训目的通过本次实训,掌握数码管的基本工作原理,学习如何使用51单片机控制数码管进行静态显示,并了解静态显示的优缺点及在实际应用中的注意事项。
二、实训原理数码管是一种常用的显示器件,由多个发光二极管(LED)组成。
根据连接方式的不同,数码管可分为共阴极和共阳极两种类型。
共阴极数码管的段码共用负极,高电平点亮;共阳极数码管的段码共用正极,低电平点亮。
静态显示是指每个数码管的每个段码都由单片机的I/O口进行驱动,或使用BCD码二-十进位转换器进行驱动。
静态显示的优点是编程简单,显示亮度高,但缺点是占用I/O口多。
三、实训步骤1. 硬件连接:- 将共阴极数码管的段码(a-g、dp)连接到单片机的P0口。
- 将数码管的共阴极连接到单片机的GND。
- 将数码管的正极连接到单片机的VCC。
2. 软件设计:- 编写程序,定义数码管显示数字的字形码。
- 使用循环语句控制数码管依次显示0~9的数字。
- 使用延时函数实现数字显示的切换。
3. 程序代码:```c#include <reg51.h>// 定义数码管字形码,共阴极unsigned char code digit_code[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--);}void main() {unsigned char i;while (1) {for (i = 0; i < 10; i++) {P0 = digit_code[i]; // 显示数字delay(500); // 延时}}}```4. 测试与调试:- 将程序烧录到单片机中。
- 连接数码管,观察数码管是否能够依次显示0~9的数字。
课题四 数码管显示
图4-1 数码管显示实物图
任务一
LED数码管的静态显示
本任务就是将单片机与数码管接成图 4-2所示静态显示方式,编程实现数码管 每隔0.5s的0-9数字显示。
图4-2
数码管显示电路图
一、任务分析
所谓静态显示,就是当单片机某一端口输出 一组显示数据之后,该端口一直保持该数据输出, 维持数码管的显示数字,直到端口数据改变,又 保持显示下一数据的显示方式。 在具体电路连接上,将单片机一个端口的八 个端子接在一只数码管的八个引脚上(h端为小数 点),控制数码管的七段LED的亮或熄,显示器 出数字,这种显示控制方式就是静态显示。静态 显示电路连接特点是单片机端口的每一位与数码 管的一个端相连接,相当于单片机的一个引脚外 接一只发光二极管。
unsigned char dispcount; void delay02s(void) { unsigned char i,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--);} void main(void) { while(1) {for(dispcount=0;dispcount<8;dispcount++) { P0=tablewe[dispcount]; P1=tabledu[dispcount]; delay02s(); } } }
数码管段码表
表4-1 共阴数码管显示数字的段码表
段名称 dp g f e d c b a 对应段码
对应引脚
数字0 数字1 数字2 数字3 数字4 数字5 数字6 数字7 数字8
P1.7
0 0 0 0 0 0 0 0 0
P1.6
0 0 1 1 1 1 1 0 1
数码管静态显示实验
1、根据LED数码管连接电路(电路中U1是74LS244作为段码驱动电路;U5和U4是SN75452,与非门,作为位选信号电路),编写实验程序,实现1位数码管的静态显示,要求:内容为0~9循环显示。
2、接线方案:
P10~P17/51单片机 接 a、b…dp/数码管;
P2.0~P2.3/51单片机 接 s1~s4/数码管。
单 片 机实验报告
通信工程系13班(2016年5月19日 )
姓名学号31130
实验题目:数码管静态显示实验
实验目的:
1.掌握8051单片机与七段LED数码管连接的设计方法;
2.掌握LED数码管静态显示的编程方法。
实验仪器:
51单片机、LED数码管
实验原理:
LED数码管静态显示的显示程序简单,显示亮度高,但所需的I/O端口较多,并且功耗较大。所以静态显示常用在显示位数较少的系统中。下表为共阴极LED数码管的段码表
实验步骤:
1.连接串行通信电缆盒电源线;
2.将C51单片机核心板上的三个开关分别拨到“独立”、”运行”“单片机”;
3.打开实验箱上的电源开关。
4.利用KeilC51创建实验程序,并进行编译生产后缀为.HEX的文件;
5.利用STC-ISP软件将后缀为.HEX的文件下载到单片机ROM中;
6.观察实验现象,并记录。若实验现象有误请重复第5、6步。
实验程序:
实验结果:
任课老师评语:
签名:__________
日期_____Leabharlann __月__
数码管静态显示实验,单片机实验报告
数码管静态显示实验,单片机实验报告数码管静态显示实验一.实验目的 1.熟悉数码管的功能和使用。
2.熟悉延时子程序的编写和使用。
3.初步熟悉单片机软硬件设计方法。
二.实验仪器计算机、Keil 编程环境、普中下载软件、单片机开发实验仪。
三.实验原理与内容P0 口做输出口,接一个共阳极数码管,要求循环显示。
共阳极数码管字形表(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,-共17 个字形码)0C0H,0FCH,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0 A1H,86H,8EH,0BFH。
四 . 实验线路及原理五 . 注意事项1.安装实验仪时,先接通讯串口线,再开电源开关。
2.实验过程中,在进行接插线操作时,必须先关闭电源。
六 . 实验步骤1、主机连线说明:JP10 单片机0 P0 口(8 8 位)JP3 共阳极数码管七 . 实验步骤2.打开 Keil 编程软件编写程序,并进行汇编产生HEX 文件。
(1)流程图(2)汇编源程序ORG 00H LJMP MAIN ;初始位置直接跳转MAIN 主程序START; MOV R2,#0 ;赋值R2=0 MOV R5,#17;赋值 R5=17 MAIN: MOV DPTR,#TAB;将 TAB 地址传送给数据指针MOV A,R2 ;赋值累加器 A=0 MOVC A,@A+DPTR;将数组第 A+1 的数据赋值 A MOV P0,A ;赋值 P0 数据的数据INC R2 ;R2 加一LCALL DELAY ;调用延时子程序DJNZ R5,MAIN ;R5 减一不为0 跳转主程序MAIN JMP START ;跳转 START RET DELAY: MOV R0,#5 ;延时子程序DL2: MOV R7,#200 DL1: MOV R6,#250DJNZ R6,$ DJNZ R7,DL1 DJNZ R0,DL2 TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0 A1H,86H,8EH, END (1) C 语言源程序#include #define uint unsigned int Uint table [ ]= (0xC0,0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xBF )Void delay (int z) { int x,y; for (x=z;x>0;x--) for (y=100;y>0;i++) } Void main ( ) {int i ;While (1) {for (i=0;i<17;i++) { P0=table [i]; delay (1000) // 延时 } } } 3.点击普中下载软件,检查设置是否正确,然后下载到实验仪的单片机中。
数码管的静态显示原理
数码管的静态显示原理数码管是一种常用的显示器件,可以用来显示数字、字母和符号。
它由多个发光二极管(LED)组成,通过控制LED的亮灭状态来显示不同的字符。
1.数码管的每个LED是一个发光效果良好的二极管,结构上有阳极和阴极两个引脚。
2. 数码管的每个LED都有一个对应的传导管,用于连接到数码管扫描电路的供电电压源。
这个传导管通常作为阳极(Anode)使用。
3. 数码管的每个LED的阴极(Cathode)通过选择电路与字库电路连接起来。
选择电路可以控制LED是否通电发光。
4.数码管的数字信号可以通过字库电路将数字转换为对应的二进制码,然后通过选择电路控制数码管的每个LED的亮灭状态。
5.数码管一般采用共阳极或共阴极的连接方式,共阳极时,数码管的阳极连接到正电源,阴极通过选择电路来控制。
共阴极时,数码管的阴极连接到负电源,阳极通过选择电路来控制。
具体实现静态显示的步骤如下:1.首先,设置好所要显示的数字或字符。
2.将数字或字符转换为对应的二进制编码,例如使用BCD码(二进制编码的十进制)。
3.通过选择电路将二进制编码应用到数码管的对应引脚上,以控制显示器的亮灭状态。
4.控制选择电路的开关,通过切换引脚的高低电平,实现对应LED的通断,从而显示所需的数字或字符。
具体的步骤可以分为以下几个过程:1.第一步,在一个很短的时间内,选择数码管中的一个数字管,并将其阴极置为低电平,阳极接入所需的信号电压。
2.第二步,根据要显示的数字或字符,根据字库电路将其转换为对应的二进制编码。
3.第三步,通过选择电路将二进制编码应用到数码管对应的引脚上,控制LED的通断状态。
4.第四步,将所选择的数码管阴极置为高电平,关闭其它数码管的选择。
5.第五步,在刷新周期之间,保持数码管的状态,直到下一次刷新周期开始。
6.第六步,重复上述步骤,循环刷新所有数码管,以显示所需的数字或字符。
通过上述过程,数码管的静态显示原理可以实现。
控制选择电路的开关,以周期性地刷新数码管的状态,从而完成多个数码管的显示操作。
数码管动态显示和静态显示的原理
数码管动态显示和静态显示的原理
数码管动态显示和静态显示都使用LED数码管作为显示器件。
不同之处在于,动态显示是通过周期性地刷新数码管来实现显示效果,而静态显示则是通过直接将数码管接通电源来实现显示效果。
具体原理如下:
动态显示:在动态显示中,每个数码管都有一个独立的控制信号,也就是所谓的扫描信号。
控制信号的频率通常在几十赫兹到几千赫兹之间,可以忽略不计的频率,因为人眼无法分辨过于频繁的变化。
每次扫描信号到来时,只有一个数码管会被点亮,显示当前需要呈现的数字。
为了实现连续的数字显示,控制信号在所有数码管之间轮流切换,切换速度快到人眼无法察觉。
这就像是在快速地切换电影幻灯片,使得不同的图片连续呈现在眼前的感觉。
这种方法的好处是可以极大地减少需要的控制信号线的数量,实现简单而经济的数字显示。
静态显示:与动态显示相比,静态显示不需要扫描信号,也就不需要周期性地刷新数码管。
数字显示的实现过程更加简单直接,只需要将数字和相应的管脚连接即可。
尽管静态显示需要更多的针脚,但是它的显示效果更加稳定和清晰。
同时,它可以承载更多的信息,并且在视觉效果上更加炫酷。
总之,无论是使用动态显示还是静态显示,都在数码管的控制信号和显示电路之间建立了一条有用的桥梁,使得我们可以方便地将数字信息呈现给用户。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四数码管静态显示一、实验目的1.熟练掌握单片机定时器的原理和应用方法。
2.了解数码管的原理,掌握数码管的真值表的计算方法。
二、实验内容通过对单片机编程来实现数码管静态显示。
三、实验知识点3.1定时器的初步认识时钟周期:时钟周期T是时序中最小的时间单位具体计算的方法就是1/时钟源,我们KST-51单片机开发板上用的晶振是11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200秒。
机器周期:我们的单片机完成一个操作的最短时间。
机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而C语言一条语句的时间是不可计算的。
51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/11059200秒。
定时器和计数器。
定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能。
顾名思义,定时器就是用来进行定时的。
定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会加1一次,因此,我们可以把机器周期理解为定时器的计数周期。
我们的秒表,每经过一秒,数字加1,而这个定时器就是每过一个机器周期的时间,也就是12/11059200秒,数字加1。
3.2 定时器的寄存器描述标准的51里边只有定时器0和定时器1这两个定时器,现在很多单片机也有多个定时器的,在这里我们先讲定时器0和1。
那么我前边提到过,对于单片机的每一个功能模块,都是由他的SFR,也就是特殊功能寄存器来控制。
而和定时器有关的特殊功能寄存器,有TCON和TMOD,定时值存储寄存器。
a)定时值存储寄存器表4-1中的寄存器,是存储计数器的计数值的,TH0/TL0用于T0, TH1/TL1用于T1。
表4-1 定时值存储寄存器表4-2 TCON--定时器/计数器控制寄存器的位分配(地址:88H)表4-3 TCON--定时器/计数器控制寄存器的位描述表4-2中有TF1、TR1、TF0、TR0这4位需要我们理解清楚。
两位定时器1的,两位定时器0的,我们只解释定时器1的,定时器0的同理。
先看TR1,当我们程序中写TR1 = 1以后,定时器值就会每经过一个机器周期加1,当我们程序中写TR1 = 0以后,定时器值就会保持不变化。
TF1,这个是一个标志位,他的作用是告诉我们定时器溢出了。
比如我们的定时器设置成16位的定时器,那么每经过一个机器周期,TL1加1一次,当TL1加到255后,再加1,TL1变成0,TH1会加1一次,如此一直加到TH1和TL1都是255(即TH1和TL1组成的16位整型数为65535)以后,再加1一次,那么就会溢出,TH1和TL1同时都变为0,只要一溢出,TF1马上自动变成1,告诉我们定时器溢出了,仅仅是提供给我们一个信号,让我们知道定时器溢出了,它不会对定时器是否继续运行产生任何影响。
c)TMOD--定时器方式控制寄存器表4-4 TMOD--定时器方式控制寄存器的位分配(地址89H)几乎不会用到这种模式,而模式3根据我的应用经验,他的功能模式2完全可以取代,所以基本上也是不用,那么我们重点就学习模式1和模式2。
模式1就是THn和TLn组成了一个16位的定时器,取值范围是0到65535,溢出后,只要不对THn和TLn重新赋值,则从0开始计数。
模式2的功能是自动装载,就是TLn溢出后,TFn就直接置1了,并且THn的值直接赋给TLn,然后TLn从新赋值的这个数字开始计数。
这个功能可以用来产生串口的通信波特率。
为了加深大家理解这个定时器原理,我们来看一下他的模式1的电路示意图3-1。
图4-1 定时器/计数器模式1示意图OSC框表示时钟频率,d等于12,因为1个机器周期等于12个时钟周期,下边GATA 右边的那个门是一个非门电路,再右侧是一个或门,再往右是一个与门电路。
图上可以看出来,下边部分电路是控制了上边部分,那我们先来看下边是如何控制的,我们以定时器0为例。
1、TR0和下边或门电路的结果要进行与门运算,TR0如果是0的话,与运算完了肯定是0,所以确定如果要让定时器工作,TR0 = 1。
2、与门结果要想是1,那或门出来的信号必须也得是1才行。
在GATE位为1的情况下,经过一个非门变成0,或门电路结果要想是1的话,那INT0即P3.2引脚必须是1的情况下,这个时候定时器才会工作,而INT0引脚是0的情况下,定时器不工作,这就是GATE位的作用。
3、当GATE位为0的时候,经过一个非门变成1,不管INT0引脚是什么电平,经过或门电路后则肯定是1,定时器就会工作。
4、要想让定时器工作,就是加1,从图上看有两种方式,第一种方式是那个开关打到上边的箭头,就是C/T = 0的时候,一个机器周期TL就会加1一次,当开关打到下边的箭头,即C/T =1的时候,T0引脚即P3.4引脚来一个脉冲,TL就加1一次,这也就是计数器功能。
INT0引脚是P3.2,INT1引脚是P3.3,T0引脚是P3.4,T1引脚是P3.5,这个可以从我们KST-51开发板原理图上看出来。
3.3 定时器程序应用我们这节课的程序先使用定时器0,在使用定时器的时候,需要以下几个步骤:第一步:设置特殊功能寄存器TMOD,配置好工作模式;第二步:设置计数寄存器TH0和TL0的初值;第三步:设置TCON,通过打开TR0位来让定时器开始计数。
第四步:判断TCON寄存器的TF0位,监测定时器溢出情况。
如何用定时器定时时间?晶振是11.0592M,时钟周期就是1/11059200,机器周期就是12/11059200,我们假如要定时20ms,就是0.02秒,要经过x个机器周期得到0.02秒,我们来算一下x*12/11059200=0.02,得到x= 18432。
那么我们现在16位的定时器溢出值是65536,我们可以这样,先给TH0和TL0一个初值,让他们经过18432个机器周期后刚好溢出,溢出后我们可以通过检测TF0位得知,就刚好是0.02秒。
这个初值y = 65536 - 18432 = 47104,转成16进制就是0xB800,那么就是TH0 = 0xB8,TL0 = 0x00。
那0.02秒我们已经定时出来了,细心的同学会发现,我们如果初值直接给一个0x0000,一直到65536溢出,定时器定时值最大也就是71ms左右,那么我们想定时更长时间怎么办呢?倍数关系就可以解决此问题。
那好了,我们下面就用程序来实现以下这个功能。
#include<reg52.h>sbit LED = P0^0;sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void main(){unsigned char counter = 0;ENLED = 0;ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;ADDR3 = 1;LED = 1; //74HC138和LED灯初始化部分TMOD = 0x01; //设置定时器0为模式1,0b00000001TH0 = 0xB8;TL0 = 0x00; //定时值初值TR0 = 1; //打开定时器0, 从初始值47104开始一个机器周期加1,直到65536溢出,TF会被置1.while(1){if(1 == TF0) //判断定时器0是否溢出{TF0 = 0;TH0 = 0xB8; //一旦溢出后,重新赋值TL0 = 0x00;counter++;if(50 == counter) //判断定时器0溢出是否达到50次,50*20ms=1s{counter = 0; //counter清0,重新计数LED = !LED; //LED取反操作,0-->1,1-->0 小灯1秒亮,一秒灭}}}}本程序实现的结果是我们板子上最右边的小灯点亮持续一秒,熄灭持续一秒,也就是以0.5HZ的频率进行闪烁。
3.4 数码管的基本介绍图4-1 数码管原理图从图4-1能看出来,数码管共有a,b,c,d,e,f,g,dp这8个段,而实际上,这8个段每一段都是一个LED小灯,所以数码管就是由8个LED小灯所组成的。
我们看一下数码管内部结构图4-2。
图4-3 数码管结构图数码管分为共阳数码管和共阴数码管,所谓的共阴数码管就是8只LED小灯的阴极是接在一起的,也就是阴极是公共端,由阳极来控制小灯是否亮灭。
同理,共阳数码管就是阳极是接到一起的,从我们板子的电路图上能看出来,我们所用的数码管是共阳数码管,如图4-4所示。
图4-4 共阳数码管电路他们的com是接到了正极上,当然了,和LED小灯电路类似,也是由74HC138控制了三极管的导通来控制整个数码管的电流,我们先来看DS1这个数码管。
原理图上可以看出来,控制DS1的三极管是Q17,控制Q17的引脚是LEDS0,对应到74HC138上边就是Y0端的输出。
图4-5 74HC138控制图我们现在的目的是让LEDS0这个引脚输出低电平,相信大家现在可以独立根据前边学到的内容把ADDR0,ADDR1,ADDR2,ADDR3,ENLED这4个输入状态写出来。
数码管通常是用来显示数字的,我们板子上的6个数码管,习惯上我们称之为6位,那控制位选择的就是74HC138了。
而数码管内部的8个LED小灯我们称之为数码管的段,那么数码管的段选择(即该段的亮灭)是通过P0口控制,经过74HC245驱动。
3.5 数码管的真值表数码管的8个段,我们直接当成8个LED小灯来控制,那就是a、b、c、d、e、f、g、dp一共8个LED小灯。
我们通过图5-1可以轻而易举的看出来,如果我们点亮b和c这两个LED小灯,也就是数码管的b段和c段,其他的所有的段都熄灭的话,就可以让数码管DS1显示一个数字1,那么这个时候实际上P0的值的二进制就是0b11111001,十六进制就是0xF9。
那么我们写一个程序进去,看看让数码管显示一下看看。
#include<reg52.h> //包含寄存器的库文件sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void main(){unsigned char j = 0;unsigned int i = 0;ENLED = 0;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;ADDR3 = 1; //74HC138开启三极管Q17while(1) //程序死循环{P0 = 0xF9; //打开数码管b和c段}}大家把这个程序编译一下,下载到单片机里会发现,最右侧的数码管成功显示1这个数字。