数码管实验报告

合集下载

数码管的显示的实验报告

数码管的显示的实验报告

数码管的显示的实验报告数码管的显示的实验报告引言:数码管是一种常见的数字显示装置,广泛应用于各种电子设备中。

本实验旨在通过实际操作,了解数码管的原理和工作方式,并通过一系列实验验证其显示效果和功能。

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

通过对不同的发光二极管进行点亮或熄灭,可以显示出不同的数字或符号。

本实验使用的是共阳数码管,即共阳极连接在一起,而阴极分别连接到控制芯片的输出引脚。

实验二:数码管的驱动电路为了控制数码管的显示,需要使用驱动电路。

常见的驱动电路有共阴极驱动和共阳极驱动两种。

本实验使用的是共阳极驱动电路。

驱动电路由控制芯片、电阻和电容组成。

控制芯片通过控制输出引脚的高低电平来控制数码管的点亮和熄灭。

实验三:数码管的显示效果通过控制芯片的输出引脚,可以实现数码管的显示效果。

本实验使用的是四位数码管,可以显示0-9的数字。

通过改变控制芯片输出引脚的电平,可以控制数码管显示不同的数字。

实验中通过编写程序,使数码管显示从0到9的数字循环显示,并通过按键控制数字的增加和减少。

实验四:数码管的多位显示除了显示单个数字外,数码管还可以实现多位显示。

通过控制不同位数的数码管,可以显示更多的数字或符号。

本实验使用的是四位数码管,可以同时显示四个数字。

通过编写程序,可以实现四位数码管的多位显示,例如显示当前时间、温度等信息。

实验五:数码管的亮度调节数码管的亮度可以通过改变驱动电路中的电阻值来实现。

本实验通过改变电阻值,调节数码管的亮度。

实验中通过编写程序,通过按键控制数码管的亮度增加和减少,从而实现亮度的调节。

结论:通过本次实验,我们深入了解了数码管的原理和工作方式。

数码管可以通过驱动电路的控制,实现数字和符号的显示。

同时,数码管还可以实现多位显示和亮度调节。

数码管作为一种常见的数字显示装置,具有广泛的应用前景,可以应用于各种电子设备中。

通过进一步的研究和实践,我们可以更好地利用数码管的功能,满足不同应用场景的需求。

数码管动态显示实验报告

数码管动态显示实验报告

一、实验目的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.实验总结:通过本实验,我们了解到了数码管的动态显示原理和方法,并通过编写程序,成功实现了数码管的动态显示。

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

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

数码管实验报告实训步骤

数码管实验报告实训步骤

一、实验目的1. 理解数码管的显示原理,掌握数码管的分类和应用。

2. 学习使用51单片机控制数码管显示数字的方法。

3. 熟悉数码管驱动电路的设计与搭建。

4. 培养动手实践能力和问题解决能力。

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

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

本实验采用共阴极数码管。

共阴极数码管的特点是当LED的阴极接地时,LED会发光,从而显示出相应的数字或符号。

数码管由七个或八个LED组成,分别对应数字0-9或字母A-F。

三、实验器材1. 51单片机开发板2. 共阴极数码管3. 连接线4. 电源5. 示波器(可选)四、实验步骤1. 硬件连接(1)将数码管的阴极(GND)连接到单片机的GND引脚。

(2)将数码管的阳极(A-G或A-F)分别连接到单片机的P0、P1、P2等引脚。

(3)将数码管的位选引脚(DP或COM)连接到单片机的另一个引脚,用于控制数码管的显示。

2. 软件设计(1)编写初始化程序,设置单片机的P0、P1、P2等引脚为输出模式。

(2)编写数码管显示函数,根据需要显示的数字或字母,将对应的段码输出到数码管的阳极引脚。

(3)编写主程序,实现数码管动态显示数字0-9或字母A-F。

3. 动态显示(1)初始化数码管显示,清屏显示数字0。

(2)循环读取按键输入,根据按键值更新数码管显示的数字。

(3)使用定时器中断或延时函数实现数码管动态刷新。

4. 实验测试(1)连接电源,打开单片机开发板。

(2)使用示波器观察数码管的段码引脚,确认数码管显示正常。

(3)通过按键输入,测试数码管的动态显示功能。

五、实验结果与分析1. 硬件连接正确,数码管显示正常。

2. 数码管动态显示数字0-9,按键输入能够实时更新显示的数字。

3. 数码管刷新频率适中,显示效果稳定。

六、实验总结通过本次实验,我们学习了数码管的显示原理和驱动方法,掌握了使用51单片机控制数码管显示数字的技术。

(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)

(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)
七段码管位选输入信号 七段码管位选输RTUSII 软件,新建一个工程。 2、建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3、按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序。其 程序如下所示:
(1)一位数码管显示0-9:
电子科技大学成都学院学院
标准实验报告
(实验)课程名称 数字电路 EDA 设计与应用
姓名 乱弹的枇杷 学号 专业 指导教师
一、 实验名称 数码管显示(一位数码管显示 0-9,八位数码管显示学号
后八位)
二、 实验目的 1、了解数码管的工作原理。 2、学习七段数码管显示译码器的设计。 3、掌握 VHDL 的 CASE 语句及多层次设计方法。
信号名称 7SEG-A 7SEG-B 7SEG-C 7SEG-D 7SEG-E 7SEG-F 7SEG-G 7SEG-DP 7SEG-SEL0 7SEG-SEL1 7SEG-SEL2
对应 FPGA 管脚名
F13 F14 F15 E15 F16 F17 E18 F18 G18 G17 G16
说明 七段码管 A 段输入信号 七段码管 B 段输入信号 七段码管 C 段输入信号 七段码管 D 段输入信号 七段码管 E 段输入信号 七段码管 F 段输入信号 七段码管 G 段输入信号 七段码管 dp 段输入信号
7、分配完成后,再进行一次全编译,以使管脚分配生效。 8、新建波形文件,对程序进行仿真,其仿真波形如下所示:
(1)一位数码管显示0-9:
(2)八位数码管显示学号后八位:
9、用下载电缆通过JTAG 口将对应的sof 文件加载到FPGA 中。观察实验 结果是否与自己的编程思想一致。
六、实验现象及结果 以设计的参考示例为例,当设计文件加载到目标器件后,将数字

led数码管显示控制实验报告

led数码管显示控制实验报告

led数码管显示控制实验报告篇一:单片机实验报告——LED数码管显示实验《微机实验》报告LED数码管显示实验指导教师:专业班级:姓名:学号:联系方式:一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。

实验内容:利用C8051F310单片机控制数码管显示器基本要求:利用末位数码管循环显示数字0-9,显示切换频率为1Hz。

提高要求:在4位数码管显示器上依次显示当天时期和时间,显示格式如下:yyyy(月份.日)(小时.分钟)思考题:数码管采用动态驱动方式时刷新频率应如何选择?为什么?二、设计思路C8051F310单片机片上晶振为,采用8分频后为,输入时钟信号采用48个机器周期。

0到9对应的断码为:FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H 基础部分:由于只需要用末位数码管显示,不需要改变位码,所以只需要采用LED的静态显示。

采用查表的方法,通过循环结构,每次循环查找数据表下一地址,循环十次后重新开始循环。

每次循环延时1s,采用定时器0定时方式1。

提高部分:四个数码管都要显示,所以采用LED的动态显示。

由于数码管的位选由、控制,P0端口的其他引脚都没用到,所以对P0端口初始化赋00H,每次循环加40H、选中下一位,四次后十六进制溢出,P0端口变又为00H回到第一个数码管。

每位数码管显示一个段码后都延时1ms(否则数码管太亮,刺眼)采用定时器0定时方式1,依然采用查表法改变段码值。

通过循环:DJNZ R5,BACKMOVR5,#250 DJNZ R4,BACK MOVR4,#8来控制每种模式的切换时间,我采用2s切换一次(8*250*1ms=2s)。

切换模式,可以采用改变查表法的偏移量来实现,没切换一次模式,偏移量加04H,三次后回到初始偏移量,来实现三种模式的循环显示。

三、资源分配基础部分:、:控制数码管的位选P1:控制数码管段码的显示R0:控制段选提高部分:、:控制数码管的位选P1:控制数码管段码的显示R0:控制位选R1:控制段选R3:用于改变偏移量来切换模式R4、R5:控制循环次数,控制模式切换时间四、流程图基础部分:提高部分篇二:实验八数码管LED实验报告苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:数码管LED实验一.实验目的理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管LG5641AH与MCU 的接线图。

数码管显示实验 实验报告

数码管显示实验 实验报告

数码管显示实验实验报告一、实验目的本次数码管显示实验的主要目的是深入了解数码管的工作原理和显示控制方式,通过实际操作掌握数码管与微控制器的接口技术,并能够编写相应的程序实现各种数字和字符的显示。

二、实验原理数码管是一种由多个发光二极管组成的显示器件,常见的有共阴数码管和共阳数码管两种类型。

共阴数码管是将所有发光二极管的阴极连接在一起,当阳极接高电平时,相应的二极管发光;共阳数码管则是将所有发光二极管的阳极连接在一起,当阴极接低电平时,相应的二极管发光。

在控制数码管显示时,通常采用动态扫描的方式,即依次快速地给每个数码管的段选端送入相应的字形码,同时使位选端选通对应的数码管,利用人眼的视觉暂留效应,使人看起来好像所有数码管同时在显示。

三、实验设备与材料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实验总结:通过这次试验,我了解到自定义数据类型可以根据自己的需要方便设定,有很大的灵活性。

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

篇一:实验八数码管led实验报告苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:数码管led实验一.实验目的理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管lg5641ah与mcu的接线图。

二.实验内容理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,mcu的排8段数码管显示mcu复位后的开始到现在的运行时间。

由于只有四个数码管,所以只显示mcu 运行到目前为止的分钟和秒,当计时达到一个小时,就重新从00:00开始计时。

另外,也可以通过pc方的串口通信程序,指定计时的开始值。

三.实验过程(一)原理图图8-2数码管外形dpa b ce f g dp图8-1 数码管(二)接线图图8-3 mcu与4连排8段数码管的连接第1页(三)基本原理8段数码管一般由8个发光二极管(llight-emitting diode,led)组成,每一个位段就是一个发光二极管。

一个8段数码管分别由a、b、c、d、e、f、g位段,外加上一个小数点的位段h(或记为dp)组成。

根据公共端所接电平的高低,可分为共阳极和共阴极两种。

有时数码管不需要小数点,只有7个位段,称7段数码管。

共阴极8段数码管的信号端高电平有效,只要在各个位段上加上相应的信号即可使相应的位段发光,比如:要使a段发光,则在发光。

四.编程(一)流程图图8-4 数码管led显示流程图(及其中断子程序)(二)所用寄存器名称及其各个位程序中没有使用与led显示相关的控制和状态寄存器,仅仅使用了通用i/o口a口和b口。

(三)主要代码段1第2页第3页2.c第4页第5页篇二:数码管实验报告单片机实验报告一、实验名称数码管动态扫描显示01234567(实验五)二、实验目的(1)掌握数码管显示数字的原理。

(2)通过不同的编程实现灵活运用数码管。

三、实验原理四、相关原理图五、实验内容数码管显示12345678c程序:#include <reg51.h>#include <intrins.h>unsigned char data dis_digit;unsigned char code dis_code[11]={ 0x28, 0x7e, 0xa2, 0x62, 0x74, 0x61, 0x21, 0x7a, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表unsigned char data dis_buf[8];// 显示缓冲区unsigned char data dis_index;char code sst516[3] _at_ 0x003b;void main(){p0 = 0xff;p2 = 0xff;tmod = 0x01;th0 = 0xfc;tl0 = 0x17;ie = 0x82;dis_buf[0] = dis_code[0x1];dis_buf[1] = dis_code[0x2];dis_buf[2] = dis_code[0x3];dis_buf[3] = dis_code[0x4];dis_buf[4] = dis_code[0x5];dis_buf[5] = dis_code[0x6];dis_buf[6] = dis_code[0x7];dis_buf[7] = dis_code[0x8];dis_digit = 0xfe;dis_index = 0;tr0 = 1;while(1);}void timer0() interrupt 1// 定时器0中断服务程序, 用于数码管的动态扫描// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量// dis_digit --- 位选通值, 传送到p2口用于选通当前数码管的数值, 如等于0xfe时, // 选通p2.0口数码管// dis_buf--- 显于缓冲区基地址{th0 = 0xfc;tl0 = 0x17;p2 = 0xff;// 先关闭所有数码管p0 = dis_buf[dis_index]; // 显示代码传送到p0口p2 = dis_digit;//dis_digit = _crol_(dis_digit,1);// 位选通值左移, 下次中断时选通下一位数码管dis_index++;//dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 }汇编程序:code_seg segment codedata_seg segment datarseg data_segdis_digit: ds 1dis_index: ds 1dis_buf: ds 8stack: ds 20;===========================================================cseg at 00000h ; reset向量ljmp maincseg at 0000bh ; 定时器0中断向量ljmp timer0;===========================================================rseg code_segorg0080hmain:mov sp,#(stack-1); 初始化堆栈指针movp0,#0ffh; 初始化i/o口movp2,#0ffhmovtmod,#01h; 初始化timer0movth0,#0fchmovtl0,#017hmovie,#082hmov dptr, #dis_code; 设定显示初值mov a,#1movc a,@a+dptrmovdis_buf,amov a,#2movc a,@a+dptrmovdis_buf+01h,amov a,#3movc a,@a+dptrmovdis_buf+02h,amov a,#4movc a,@a+dptrmovdis_buf+03h,amov a,#5movc a,@a+dptrmovdis_buf+04h,amov a,#6movc a,@a+dptrmovdis_buf+05h,amov a,#7movc a,@a+dptrmovdis_buf+06h,amov a,#8movc a,@a+dptrmovdis_buf+07h,amovdis_digit,#0feh; 初始从第一个数码管开始扫描movdis_index,asetb tr0 ; 启动定时器0,开始动态扫描显示main_lp:; 主程序循环,增加其它代码sjmp main_lp;===========================================================using 0timer0:; 定时器0中断服程序, 用于数码管的动态扫描; dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量; dis_digit --- 位选通值, 传送到p2口用于选通当前数码管的数值, 如等于0xfe时, ; 选通p2.0口数码管; dis_buf--- 显于缓冲区基地址push accpush pswpush ar0movth0,#0fchmovtl0,#017hmovp2,#0ffh ; 先关闭所有数码管mova,#dis_buf ; 获得显示缓冲区基地址adda,dis_index ; 获得偏移量movr0,a; r0 = 基地址 + 偏移量mova,@r0; 获得显示代码movp0,a; 显示代码传送到p0口movp2,dis_digit ;mov a,dis_digit ; 位选通值左移, 下次中断时选通下一位数码管rl a篇三:数码管动态显示实验报告实验四数码管动态显示实验一一、实验要求1. 在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. 在电路中增加四个7段数码管(共阳/共阴自选),将p1口作数据输出口与7段数码管数据引脚相连,p2.0~p2.3引脚输出选控制信号3. 在keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4二、实验目的1.2.3.4. 巩固proteus软件和keil软件的使用方法学习端口输入输出的高级应用掌握7段数码管的连接方式和动态显示法掌握查表程序和延时等子程序的设计三.实验说明本实验是将单片机的p1口做为输出口,将四个数码管的七段引脚分别接到p1.0至p1.7。

由于电路中采用共阳极的数码管,所以当p1端口相应的引脚为0时,对应的数码管段点亮。

程序中预设了数字0-9的段码。

由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。

因此定义了scan函数,接到单片机的p2.0至p2.3在实验中,预设的数字段码表存放在数组tab中,由于段码表是固定的,因此存储类型可设为code。

在proteus软件中按照要求画出电路,再利用keil软件按需要实现的功能编写c程序,生成hex文件,把hex文件导到proteus软件中进行仿真。

为了能够更好的验证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89c51的一个机器周期包含12个时钟脉冲,而我们采用的是12mhz晶振,每一个时钟脉冲的时间是1/12us,所以一个机器周期为1us。

在keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。

四、硬件原理图及程序设计(一)硬件原理图设计电路中p1.0到p1.7为数码管七段端口的控制口,排阻rp1阻值为220ω,p2.0到p2.3为数码管的扫描信号。

at89c51单片机的9脚(rst)为复位引脚,当rst为高电平的时间达到2个机器周期时系统就会被复位;31引脚(ea)为存取外部存储器使能引脚,当ea为高电平是使用单片机内部存储器,当ea为低电平时单片机则使用外部存储器。

18、19引脚是接晶振脚。

而接地和电源端在软件中已经接好,所以不用在引线。

如下图所示:(二)流程图与程序设计(三)程序设源代码#include <reg51.h> //定义8051寄存器头文件 #define seg7p p1 //定义扫描信号的位置 #define scanp p2 //定义数码管的位置char code tab[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0~4的码值0x92, 0x83, 0xf8, 0x80, 0x98 }; //数字5~9的码值char disp[4]={1,2,3,4};//定义要显示的数值void delay_ms(int x); //声明延时函数char scan[4]={0xfe,0xfd,0xfb,0xf7}; //定义扫描char i,j; //定义变量i,jmain() //主函数的开始{while(1) //无限循环{for(i=0;i<4;i++) //从{j=disp[3-i]; //取出显示的数值scanp =scan[i]; //扫描的顺序seg7p =tab[j]; //将tab的数值赋给数码管delay_ms(4);//延时4ms}}}void delay_ms(int x){ int i,j;for (i=0;i<x;i++)for (j=0;j<120;j++);}五.实验总结问题一:运行电路时,数码管乱码解决的方法:检查电路,发现程序中扫描信号端口错误,将扫描信号的端口顺序调换,重新运行。

相关文档
最新文档