微机实验5 七段数码管显示实验

合集下载

单 片 机 原 理 实 验 报 告-七段数码管的显示

单 片 机 原 理  实  验  报  告-七段数码管的显示

单片机原理实验报告一、实验目的:1、通过此次实验学会使七段数码管产生不同码段的显示。

2、通过设计中断使和使用计数器使数码管自动计数。

二、实验仪器:计算机,keil uVision3,proteus 7三、简要原理:用数码管显示自动计数,用按键来使计数开始或暂停,即按一下按键,使数码管自动加1计数,再按一下按键,使计数暂停,再按一下又继续计数。

四、实现程序和设计电路图:ORG 0000H LJMP MAIN ORG 0003H LJMP LOOP3 ORG 000BH LJMP LOOP4 MAIN:MOV R0,#00HMOV A,#00HMOV DPTR ,#TABLE MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0AFH MOV P1,#0C0H MOV P2,#0C0H SETB PX0CLR PT0SETB EASETB EX0CLR ET0SETB IT0SETB TR0LOOP:CJNE R0,#20,LOOP MOV R0,#00HMOV B,#0AHINC ACJNE A,#3CH,LOOP1 MOV A,#00HLOOP1:MOV R1,A DIV ABMOVC A,@A+DPTRMOV P2,AMOV A,BMOVC A,@A+DPTRMOV P1, AMOV A,R1AJMP LOOPLOOP3:CPL ET0RETILOOP4:MOV TH0, #3CHMOV TL0,#0AFHINC R0RETITABLE:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FHEND五、实验心得:通过这次实验,我发现中断的作用非常之大,可以用它来实现各种各样的功能。

Lab5 七段数码管显示设计

Lab5 七段数码管显示设计

1
1
1
0
1
1
1
A
11
1
0
1
1
0
0
1
1
1
1
1
b
12
1
1
0
0
1
0
0
1
1
1
0
C
13
1
1
0
1
0
1
1
1
1
0
1
d
14
1
1
1
0
1
0
0
1
1
1
1
E
15
1
1
1
1
0
0
0
0
0
0
0 灭灯
2. 动态扫描显示原理
2
北京中教仪装备技术有限公司
数码管动态扫描显示,是将所用数码管的相同段(a~g 和 p)并联在一起,通过选位通 信号分时控制各个数码管的公共端,循环依次点亮各个数码管。当切换速度足够快时,由于 人眼的“视觉暂留”现象,视觉效果将是六个数码管同时显示,选通信号的时序关系如图 5-4 所示。
四、 实验内容
根据七段数码管的显示原理,用 VHDL 语言编写七段数码显示管的源程序。 要求设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分: 1. 显示数据的设置:程序设定 4 位数码管从左至右分别显示 1、2、3、4; 2. 动态扫描:实现动态扫描时序,这部分是难点,也是重点。参看动态扫描显示原理,
图 5-1 7 段数码管显示原理
该四位数码管与 FPGA 之间通过 8 位拨码开关(JP1)进行连接,当 DIP 开关全部拨到 上方时(板上标示为:7SEGLED),FPGA 的相应 IO 引脚和四位 7 段数码管连接,7 段数码

七段数码管显示实验报告

七段数码管显示实验报告

七段数码管显示实验报告实验目的:本实验的目的是通过控制7段数码管的亮灭状态来显示不同的数字和字母。

实验原理:7段数码管常用于显示数字和字母,每个数码管由7个LED灯组成,分别表示A、B、C、D、E、F、G等7个段。

通过控制这些LED灯的亮灭状态,就可以显示不同的数字和字母。

在实际应用中,通常需要使用一个译码器来根据输入的数字或字母输出相应的控制信号。

常用的译码器有7447、DM9368等。

这些译码器通常都是BCD码到7段数码管的译码器。

在本实验中,我们将使用7447译码器来控制7段数码管的亮灭状态。

7447译码器具有4个输入线和7个输出线,每个输入线上的BCD码可以转换成相应的控制信号,用于控制数码管的7个LED 灯。

实验材料:1.7段数码管2.7447译码器3.电路板4.电压源5.连接线实验步骤:1.将7447译码器插入电路板上相应的插槽中,并将数码管连接到电路板上。

2.将电压源连接到电路板上,并调节电压和电流值。

3.根据所需显示的数字或字母,设置相应的BCD码输入信号。

4.打开电源,观察数码管是否能够正确显示。

实验结果:通过本实验,我们可以成功控制7段数码管的亮灭状态,实现了数字和字母的显示。

同时,我们也了解了7447译码器的原理和使用方法。

实验小结:本实验是电子技术的基础实验之一,通过实验我们深入了解了7段数码管和7447译码器的原理和应用,同时也锻炼了我们的动手能力和实验技能。

在实际应用中,7段数码管和译码器常常被用于数字显示、计数器、时钟、温度计等电子设备中,具有广泛的应用前景。

实验五SPI主机实验——7段数码管显示

实验五SPI主机实验——7段数码管显示

微机原理实验报告实验名称:SPI主机实验—7段数码管显示院系:物理与机电工程学院专业班级:08电子信息工程学号:2008041501学生姓名:陈琳琳指导教师:涂二生完成时间:2011年5月10日报告成绩:SPI主机实验-7段数码管显示一、实验目的学习SPI的通信方式和74HC575的SPI接口应用,比较I2C 、SSP与SPI 通信方式的区别。

二、实验仪器Easy-Arm2132开发板套件装有ADS1.2及EasyJTAG仿真器的计算机一台三、实验原理1、概述LPC2131 具有一个硬件SPI(SPI,Serial Peripheral Interface)接口,它是一个同步、全双工串行接口,最大数据位速率为时钟速率的 1/8,可以配置为主机或者从机。

在同一总线上可以有多个主机或者从机,但同一时刻只能有一个主机和一个从机能够进行通信,在一次数据传输过程中,主机向从机发送一字节数据,从机也向主机返回一字节数据。

SPI 可应用于:●串行存储器,如 DataFlash、三线 EEPROM 等;●串行外设,如 ADC、DAC、LCD 控制器、CAN 控制器、传感器等;●外部协处理器。

2、特性●两个完全独立的SPI控制器●遵循串行外设接口(SPI)规范●同步、串行、全双工通信●组合的SPI主机和从机●最大数据位速率为输入时钟速率的1/83、管脚寄存器管脚连接设置当进行如下设置时将P0.4、P0.5、P0.6和P0.7选择SPI功能:SPI管脚如下表所示4、寄存器描述SPI包含5个寄存器,见下表,所有寄存器都可以字节、半字节和字段形式访问。

四、硬件连接图五、程序流程图六、程序1、程序说明程序实现功能描述:按键KEY1控制7段数码管显示0~F,每按一次键十六进制加一,KEY2控制7段数码管显示LPC2138一次显示,程序初始化数码管显示零,合理利用SPI通信方式控制数码管显示。

2、实验程序(字体加粗部分为增加修改程序)#include "config.h"#define HC595_CS (1 << 29) // P0.29口为74HC595的片选const uint32 KEY1 = 1 << 16;const uint32 KEY2 = 1 << 17;/****************************************************************************** **************************** 函数名称:DelayNS()** 函数功能:长软件延时** 入口参数:dly 延时参数,值越大,延时越久** 出口参数:无******************************************************************************* *************************/void DelayNS(uint32 dly){uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);}/****************************************************************************** **************************** 函数名称:MSPI_Init()** 函数功能:初始化SPI接口,设置为主机。

七段数码显示器显示实验报告

七段数码显示器显示实验报告

七段数码显示器显示实验报告单片机原理及接口技术实验报告实验项目:姓名:专业:班级:学号:一、实验名称七段数码显示器显示实验(SPI通信方式)二、实验设备PC机1台,CEPARK畅学系列实验装置1套三、实验目的1.熟悉I/O口作为数字量输出的初始化;2.熟悉共阳极与共阴极两种数码管的工作原理;3.学会软硬件的设计和调试方法;4.根据七段数码管的特性,对应出每个数字引脚输出的16进制码,然后编写程序。

四、实验要求1.将0-9这十个数字按顺序依次在数码管上显示出来,时间间隔为0.5S;2.熟悉延时函数的使用(可用for循环自己写一个延时函数);3.掌握PIC16F877A芯片及电子元件的使用方法;4.实现单片机软件与硬件的结合,将理论知识应用于实践。

五、理论原理1.LED七段数码显示器由8个发光二极管组成显示字段,根据内部发光二极管的连接形式不同,LED有共阴极和共阳极两种(原理图如下图1所示)。

(实验板采用的LED为共阳极的连接方式)图1.单个共阳极数码管原理图2.接口说明:接口编号为JP44,需要一个8位端口(A~G、DP)去控制,因此提供给LED的字形码也是8位的。

数码管各段编号如下图2所示:图2.数码管各段编号3.LED七段数码显示器各字段与控制端口位的对应关系如下表1所示:表1. 七段数码显示器各字段与控制端口位的对应关系控制端口位D7 D6 D5 D4 D3 D2 D1 D0 字段名dp g f e d c b a 4.共阳极LED七段数码显示器字形代码如下表2所示:字形显示编码字形显示编码0 C0H 9 90H1 F9H A 88H2 A4H b 83H3 B0H C C6H4 99H d A1H5 92H E 86H6 82H F 8EH7 F8H .(小数点)7FH8 80H -(负号)BFH六、实验内容步骤1.接线说明核心板RD口接底板JP15,具体为:RD0-A,RD1-B,RD2-C,RD3-D,RD4-E,RD5-F,RD6-G,RD7-DP2.创建项目打开MPLAB IDE v8.90 →选择Project,进入Project Wizard,进入下面的界面,单击下一步。

实验五-7段数码显示译码器设计

实验五-7段数码显示译码器设计

实验五7段数码显示译码器设计实验报告一、实验要求1、GW48实验箱2、写出7段数码显示译码器程序3、总结实验步骤和实验结果二、实验内容1、说明例中各语句的含义,以及该例的整体功能。

在max+plus2或quartus2上对以下该例进行编辑、编译、综合、适配仿真,给出其所有信号的时序仿真波形。

module zdw(in,out);output [6:0]out;input [3:0]in;reg[6:0]out;always@(in)begincase(in)4'd0: out=7'b1111110;4'd1: out=7'b0110000;4'd2: out=7'b1101101;4'd3: out=7'b1111001;4'd4: out=7'b0110011;4'd5: out=7'b1011011;4'd6: out=7'b1011111;4'd7: out=7'b1110000;4'd8: out=7'b1111111;4'd9: out=7'b1111011;4'd10: out=7'b1110111;4'd11: out=7'b0011111;4'd12: out=7'b1001110;4'd13: out=7'b0111101;4'd14: out=7'b1001111;4'd15: out=7'b1000111;default: out=7'bx;endcaseendendmodule2、引脚锁定以及硬件下载测试。

建议选实验电路模式6,用数码8显示译码输出(PIO46—PIO40)。

键8,键7,键6,键5四位控制输入,硬件验证译码器的工作性能。

七段LED数码管显示电路设计(精)

七段LED数码管显示电路设计(精)

实验七七段LED数码管显示电路设计一、实验目的1.学习EDA软件的基本操作2.学习使用原理图进行设计输入3.初步掌握软件输入、编译、仿真和编程的过程4.学习实验开发系统的使用方法二、实验说明本实验通过七段LED数码管显示电路的设计,初步掌握EDA 设计方法中的设计输入、编译、综合、仿真和编程的基本过程。

七段LED数码管显示电路有四个数据输入端(D0-D3),七个数据输出端(A-G。

三、实验要求1、完成七段LED数码管显示电路的原理图输入并进行编译2、对设计的电路经行仿真验证3、编程下载并在实验开发系统上验证设计结果四、实验步骤1、新建工程2、新建Verilog HDL文件3、在文本输入窗口键入代码4、保存HDL文件5、编译文件直至没有错误6、新建波形文件7、添加观察信号8、添加输入激励,保存波形文件9、功能仿真七段LED数码管显示电路真值表:输入D3D2D1D0G F E D C B A 000000111111 100010000110 200101011011 300111001111 401001100110 501011101101 601101111101 701110001111 810001111111910011101111 A10101110111 B10111111100 C11001111001 D110111011110 E11101111001 F11111110001五、电路原理图啊Verilog代码描述:module qiduan(data_in,data_out;input [3:0]data_in;output [6:0]data_out;reg [6:0]data_out;always @(data_inbegincasex(data_in4'b0000:data_out<=7'b0111111;4'b0001:data_out<=7'b0000110; 4'b0010:data_out<=7'b1011011; 4'b0011:data_out<=7'b1001111; 4'b0100:data_out<=7'b1100110; 4'b0101:data_out<=7'b1101101; 4'b0110:data_out<=7'b1111100; 4'b0111:data_out<=7'b0000111; 4'b1000:data_out<=7'b1111111; 4'b1001:data_out<=7'b1100111; 4'b1010:data_out<=7'b1110111; 4'b1011:data_out<=7'b1111100; 4'b1100:data_out<=7'b0111001; 4'b1101:data_out<=7'b1011110; 4'b1110:data_out<=7'b1111001; 4'b1111:data_out<=7'b1110001; default:data_out<=7'b0000000; endcaseendendmodule仿真波形:六、实验体会七段LED数码管显示电路是常用的数码管之一,它有四个数据输入端(D0-D3),七个数据输出端(A-G。

实验2:8255七段数码管静动态显示

实验2:8255七段数码管静动态显示

实验2:8255七段数码管静动态显示北京科技大学机械专业微机原理实验报告~用到的带走哦!微机实验报告书学号:姓名:班级:同组名单:实验日期:20XX年.12.21实验题目:七段数码管的静态显示实验目标:掌握数码管显示数字的原理(功能:键盘输入一位十进制数字(0~9),用七段数码管显示。

)解题思路:1. 静态显示:按图10(a)连接好电路,将8255的A口PA0-PA6分别与七段数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp接地。

编程从键盘输入一位十进制数字,在七段数码管上显示出来。

2. 动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。

编程在两个数码管上显示“56”。

程序框图:静态显示见图11(a),动态显示见图11(b)。

北京科技大学机械专业微机原理实验报告~用到的带走哦!关键问题分析(静态显示):1、按键判断和程序结束判断按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断,只需要判断按键是否在0-9之间即可。

用以下程序即可:cmp al,'0' jl exit ; jl,条件转移指令,即在小于时转移cmp al,'9' jg exit ;jg, 条件转移指令,即在大于时转移程序中还要用到“cmp”即比较指令,用来比较输入数与0、9的大小关系。

程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS。

2、七段码显示。

北京科技大学机械专业微机原理实验报告~用到的带走哦!实验指导书中给出了七段码的字型代码。

这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。

前提是必须将七段码字型编成数码表以字符串的形式写进程序中。

3、数字键ASCII码与数值间的转换。

因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现:sub al,30h程序清单:静态显示:data segmentioportio8255aio8255b equ 0c800h-0280h equ ioport+288h equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$'data endscode segmentassume cs:code,ds:data mov ds,ax mov dx,io8255b ;使8255的A口为输出方式mov al,80h ;***-*****B,控制字PA以方式0输出out dx,al mov ah,09h int 21h mov ah,01 ;从键盘接收字符int 21h cmp al,'0' ;是否小于0 jl exit ;如若小于0,则跳转到exit 退出程序cmp al,'9' ;是否大于9 jg exit ; 如若大于9,则跳转到exit退出程序sub al,30h ;将所得字符的ASCII码减30H,数字键ascii码同数值转换mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,al jmp zby ;转zby start: mov ax,data zby: mov dx,offset mesg1 ;显示提示信息exit: mov ah,4ch ;返回DOS北京科技大学机械专业微机原理实验报告~用到的带走哦!int 21hcode endsend start动态显示:data segmentioportio8255aio8255bio8255c equ 0c800h-0280h equ ioport+28ah equ ioport+28bh equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:data mov ds,ax mov dx,io8255b ;将8255设为A口输出mov al,80h ;***-*****B,控制字PA以方式0输出out dx,al mov di,offset buffer1 ;设di为显示缓冲区start: movax,dataloop2: mov bh,02zby: mov byte ptr bz,bhpush di dec di add di, bz mov bl,[di] ;bl为要显示的数pop dimov al,0mov dx,io8255aout dx,almov bh,0 mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码mov al,byte ptr [si] mov dx,io8255c ;自8255A的口输出out dx,al mov al,byte ptr bz ;使相应的数码管亮mov dx,io8255a out dx,al mov cx,3000delay: loop delay ;延时北京科技大学机械专业微机原理实验报告~用到的带走哦!mov bh,byte ptr bz shr bh,1 jnz zby mov dx,0ffh mov ah,06 int 21h je loop2 ;有键按下则退出mov dx,io8255a mov al,0 ;关掉数码管显示out dx,al mov ah,4ch ;返回int 21h end start code ends运行结果:静态显示:在键盘上输入一个0-9的任意数字,会显示在数码管上。

单片机实验五按键及七段数码管实验

单片机实验五按键及七段数码管实验

单片机实验五按键及七段数码管实验第一篇:单片机实验五按键及七段数码管实验实验五按键及七段数码管实验一、实验目的1、熟悉keil软件;2、掌握矩阵式按键的原理;3、掌握七段数码管显示的原理;4、掌握STC单片机的按键及数码管程序编写及下载;二、实验要求1、编写矩阵式按键的读取程序、七段数码管的动态显示程序,并将程序结合在一起,产生某一按键按下,显示对应键值的程序。

2、编写串行通信的发送及接收程序,实现串行口跟PC及的通信,并在PC机上用串口调试工具观察实验结果;3、利用keil软件调试程序,并产生.hex文件;4、将.hex文件利用STC单片机下载工具下载到单片机最小系统中,并观察LED灯的显示状态;5、提交实验报告,报告包含程序及LED的显示结果。

三、实验内容1、打开keil软件,熟悉软件的菜单、工作界面及工具。

然后按照keil的编程步骤编写程序(创建工程----选择单片机AT89C51----新建源文件----保存为C程序----编写完整的C51程序----将文件添加到工程----编译并修改错误----连接产生.hex文件)。

2、打开STC下载软件,将keil生成的.hex文件打开,下载到最小系统板,测试程序并观察实验结果。

3、按键及七段LED的程序,实现更多的LED与按键结合的效果。

四、实验说明1、程序中使用的按键及LED灯的IO端口要与自己的单片机最小系统板对应;2、按键程序注意抗消抖;3、思考计算器程序如何实现;第二篇:单片机数码管显示实验实验一数码管实验一、实验目的1.了解数码管的显示原理;2.掌握JXARM9-2440 中数码管显示编程方法二、实验仪器JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE集成开发环境、串口连接线、PC机。

三、实验原理7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。

LED显示器的接口一般有静态显示与动态显示接口两种方式。

微机实验5七段数码管显示实验

微机实验5七段数码管显示实验

微机实验5七段数码管显示实验一、实验目的1、掌握七段LED数码管的结构及工作原理。

2、掌握共阴极LED数码管连接方法、及其静态和动态显示方法。

3、进一步掌握并行接口芯片8255A的使用方法。

二、实验设备微型计算机、单片机仿真器、实验仪;实验连线(若干)。

三、实验原理如图4.9-1所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。

通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。

LED数码管中的发光二极管共有两种连接方法:共阴极接法图4.9-1共阳极接法1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极。

使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。

实验中使用的LED显示器为共阴极接法2)共阳极接法:把发光二极管的阳极连在一起构成公共阳极。

使用时公共阳极接+5V。

这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。

七段发光二极管,再加上一个小数点位,共计八段。

因此提供给LED显示器的字形代码正好一个字节。

若a、b、c、d、e、f、g、dp8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,则用共阴极LED数码管显示十六进制数时所需的字形代码如表4.9-1所示。

表4.9-1共阴极LED数码管字形代码四、实验内容动态显示:按图18连接好电路,将8255的A口分别与七段数码管a~g相连,S1接位码驱动,S0接8255C口的PC1,PC0。

编程在两位七段数码管上动态显示00~99,若键盘有键按下则返回DOS。

五、程序代码tackegmenttack'tack'dw32dup(0)tackenddataegmentio8255aequ288hio8255cequ28ahleddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码buffer1db0,0;存放要显示的十位和个位bzdw;位码dataendcodeegmentaumec:code,d:datatart:mova某,datamovd,a某movd某,28bh;将8255设为A口输出moval,80houtd某,almovdi,offetbuffer1;设di为显示缓冲区loop1:movc某,0300h;循环次数loop2:movbh,02lll:movbyteptrbz,bhpuhdidecdiadddi,bzmovbl,[di];bl为要显示的数popdimovbh,0movi,offetledaddi,b某moval,byteptr[i]movd某,io8255coutd某,almoval,byteptrbzmovd某,io8255coutd某,alpuhc某movc某,100delay:loopdelaypopc某moval,00houtd某,almovbh,byteptrbzhrbh,1jnzllllooploop2mova某,wordptr[di]cmpah,09jnzetcmpal,09jnzetmova某,0000mov[di],almov[di+1],ahjmploop1et:movah,01int16h jnee某itmova某,wordptr[di]incalaaa;置led数码表偏移地址为SI;求出对应的led数码;自8255A的口输出;使相应的数码管亮;延时;循环延时;有键按下则转e某itmov[di],al;al为十位mov[di+1],ah;ah中为个位jmploop1 e某it:movd某,io8255amoval,0;关掉数码管显示outd某,almovah,4ch;返回int21hcodeendendtart六、实验总结通过本次试验,我基本上掌握了数码管显示的程序流程,学会编写一些程序调用相应的相应的子程序,显示所需内容,了解了动态扫描显示的程序执行过程,结合定时器的设置和中断的返回,来实现最基本的百分秒显示,从而完成时钟显示,由此,结合前面所学的知识,巩固了数码管显示的知识,增强了我的程序调试能力,为下一步的学习打下了坚实基础。

七段数码管的动态显示

七段数码管的动态显示

七段数码管的动态显示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。

七段数码管

七段数码管
loop2: mov bh,02
lll: mov byte ptr bz,bh
push di
dec di
add di, bz
mov bl,[di] ;bl为要显示的数
pop di
mov al,0
mov dx,io8255a
out dx,al
mov bh,0
mov si,offset led ;置led数码表偏移地址为SI
mov bh,byte ptr bz
shr bh,1
jnz lll
mov dx,0ffh
mov ah,06
int 21h
je loop2 ;有键按下则退出
mov dx,io8255a
mov al,0 ;关掉数码管显示
out dx,al
mode ends
end start
六.运行截图
七.实验总结(教师提问及回答)
1、教师提问及回答
2、实验体会与感想
通过这次实验,掌握了数码显示数字的原理,知道它是怎么运行的。亲自动手,觉得获得了很多乐趣和知识。
add si,bx ;求出对应的led数码
mov al,byte ptr [si]
mov dx,io8255c ;自8255A的口输出
out dx,al
mov al,byte ptr bz ;使相应的数码管亮
mov dx,io8255a
out dx,al
mov cx,3000
delay: loop delay ;延时
四.实验原理图与流程图
五.实验程序(有注释)
data segment
io8255a equ 28ah
io8255b equ 28bh
io8255c equ 288h

7段数码管

7段数码管

实验题目:7段数码管静态显示控制一、实验目的:掌握7段数码管静态显示控制二、实验要求:利用keil 软件和proteus 软件提供显示电路 三、实验器材:keil 软件、proteus 软件、电脑一台 四、程序流程图五、实验程序 ORG 00H START:MOVDPTR,#NUM_TABLE ; 装表,DPTR 指向数据表累加器清零判断是否为88H自加1输出 不是调用延时 不显示NUM_TABLELOADTABLE:CLR A ; 累加器A清0MOVC A,@A+DPTR ; 取表操作CJNE A,#88H,DISPLAY ; 判断是否为结束码88H,不是跳到显示程序段JMP START ; 循环DISPLAY:MOV P0,A ; 显示数据从P0口输出CALL DELAY ; 调延时子程序INC DPTR ; DPTR自增1JMP LOADTABLE ; 继续取表显示DELAY:MOV R5,#20 ; 延时200msD2:MOV R6,#20D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETNUM_TABLE: ; 七段数码管显示数据表DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,10H DB 88HENDXTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51六、实验总结在做七段数码管时时使我明白了,什么叫眼高手低,让我知道要踏踏实实的学习,也要踏踏实实的做实验,不能眼高手低。

微机接口_实验五.七段数码管

微机接口_实验五.七段数码管

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

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

2、动态显示:按图5-2连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0 接8255 C口的PC1,PC0。

编程在两个数码管上显示“56”。

3、动态显示(选作):使用图5-2的电路,编程在两个数码管上循环显示“00-99”。

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

2、七段数码管的字型代码表如下表:五、参考流程图(见图5-3、图5-4)六、汇编程序LED1.ASMdata segmentio8255a equ 288hio8255cw equ 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,'$'data endscode segmentassume cs:code,ds:datastart:mov ax,data ; data送到AX中mov ds,ax ;首地址mov dx,io8255cw ; 控制寄存器端口地址送DX;使8255的A口为输出方式mov ax,80h ;准备控制字,(10000000)Bout dx,al ;控制字送控制寄存器sss: mov dx,offset mesg1 ;显示提示信息mov ah,09h ;显示每次中断的提示信息(DS:DX=字符缓冲首址)int 21h ;执行调用mov ah,01 ;从键盘接收字符int 21h ;执行调用cmp al,'0' ;是否小于0jl exit ;若是则退出cmp al,'9' ;是否大于9jg exit ;若是则退出sub al,30h ;将所得字符的ASCII码减30Hmov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;A口地址送到DX中out dx,al ;从8255的A口输出jmp sss ;转SSSexit: mov ah,4ch ;返回int 21h ;执行调用code endsend start温馨提示:最好仔细阅读后才下载使用,万分感谢!。

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

七段数码管1

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

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

2、动态显示:按图5-2连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0 接8255 C口的PC1,PC0。

编程在两个数码管上显示“56”。

3、动态显示(选作):使用图5-2的电路,编程在两个数码管上循环显示“00-99”。

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

2、七段数码管的字型代码表如下表:五、参考流程图(见图5-3、图5-4)六、汇编程序LED1.ASMdata segmentio8255a equ 288hio8255cw equ 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,'$'data endscode segmentassume cs:code,ds:datastart:mov ax,data;data送到AX中mov ds,ax;首地址mov dx,io8255cw ;控制寄存器端口地址送DX;使8255的A口为输出方式mov ax,80h;准备控制字,(10000000)Bout dx,al;控制字送控制寄存器sss: mov dx,offset mesg1 ;显示提示信息mov ah,09h;显示每次中断的提示信息(DS:DX=字符缓冲首址)int 21h;执行调用mov ah,01 ;从键盘接收字符int 21h;执行调用cmp al,'0' ;是否小于0jl exit ;若是则退出cmp al,'9' ;是否大于9jg exit ;若是则退出sub al,30h ;将所得字符的ASCII码减30Hmov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;A口地址送到DX中out dx,al;从8255的A口输出jmp sss ;转SSSexit: mov ah,4ch ;返回int 21h;执行调用code endsend start六、心得体会本学期的所有试验我都很重视,因为我觉得这次我是真真正正的自己亲自去完成。

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

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

实验四七段数码管的动态扫描显示一、实验目的1.进一步熟悉QuartusII软件进行FPGA设计的流程;2.掌握利用宏功能模块进行常用的计数器, 译码器的设计;3.学习和了解动态扫描数码管的工作原理的程序设计方法;二、实验原理及过程实验板上面常用的4为联体的共阳极7段数码管。

其接口电路是把所有数码管的8个笔划段a-h同名端连接起来, 而每一个数码管由一个独立的公共极COM端控制。

对于这种结构的数码管, 采用动态显示的方法是最为广泛的一种显示方式之一。

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

1、本次实验要求在实验板上实现显示00000000-99999999的十进制计数器。

使用的是宏模块产生一个16位的二进制计数器counter()作为4个数码管的显示数据;编写一个分频模块div, 其输出作为计数器counter()的时钟信号;编写数码管驱动模块segmain, 完成7段译码和扫描显示控制2、建立工程, 并建立顶层图。

3、设计计数时钟设计一分频器, 对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输入完成后, 将该文件设为顶层文件, 并分析该设计文件, 用于检查设计错误。

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

七段数码管显示实验
一、实验目的
1、掌握七段LED数码管的结构及工作原理。

2、掌握共阴极LED数码管连接方法、及其静态和动态显示方法。

3、进一步掌握并行接口芯片8255A的使用方法。

二、实验设备
微型计算机、单片机仿真器、实验仪;实验连线(若干)。

三、实验原理
如图4.9-1所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。

通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。

LED数码管中的发光二极管共有两种连接方法:
共阴极接法共阳极接法
图4.9-1
1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极。

使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。

实验中使用的LED显示器为共阴极接法
2)共阳极接法:把发光二极管的阳极连在一起构成公共阳极。

使用时公共阳极接+5V。

这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。

七段发光二极管,再加上一个小数点位,共计八段。

因此提供给LED显示器的字形代码正好一个字节。

若a、b、c、d、e、f、g、dp 8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,则用共阴极LED数码管显示十六进制数时所需的字形代码如表4.9-1所示。

表4.9-1 共阴极LED数码管字形代码
字型共阴极字形代码字型共阴极字形代码字型共阴极字形代码
0 3FH 6 7DH C 39H
1 06H 7 07H d 5EH
2 5BH 8 7FH E 79H
3 4FH 9 6FH F 71H
4 66H A 77H 灭00H
5 6DH b 7CH
四、实验内容
动态显示:
按图18连接好电路,将8255的A口分别与七段数码管a~g相连,S1接位码驱动,S0接8255C口的PC1,PC0。

编程在两位七段数码管上动态显示00~99,若键盘有键按下则返回DOS。

五、程序代码
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
io8255a equ 288h
io8255c equ 28ah
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码
buffer1 db 0,0 ;存放要显示的十位和个位
bz dw ? ;位码
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,28bh ;将8255设为A口输出
mov al,80h
out dx,al
mov di,offset buffer1 ;设di为显示缓冲区
loop1: mov cx,0300h ;循环次数
loop2: mov bh,02
lll: mov byte ptr bz,bh
push di
dec di
add di, bz
mov bl,[di] ;bl为要显示的数
pop di
mov bh,0
mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码
mov al,byte ptr [si]
mov dx,io8255c ;自8255A的口输出
out dx,al
mov al,byte ptr bz ;使相应的数码管亮
mov dx,io8255c
out dx,al
push cx
mov cx,100
delay: loop delay ;延时
pop cx
mov al,00h
out dx,al
mov bh,byte ptr bz
shr bh,1
jnz lll
loop loop2 ;循环延时
mov ax,word ptr [di]
cmp ah,09
jnz set
cmp al,09
jnz set
mov ax,0000
mov [di],al
mov [di+1],ah
jmp loop1
set: mov ah,01
int 16h
jne exit ;有键按下则转exit
mov ax,word ptr [di]
inc al
aaa
mov [di],al ;al为十位
mov [di+1],ah ;ah中为个位
jmp loop1
exit: mov dx,io8255a
mov al,0 ;关掉数码管显示
out dx,al
mov ah,4ch ;返回
int 21h
code ends
end start
六、实验总结
通过本次试验,我基本上掌握了数码管显示的程序流程,学会编写一些程序调用相应的相应的子程序,显示所需内容,了解了动态扫描显示的程序执行过程,结合定时器的设置和中断的返回,来实现最基本的百分秒显示,从而完成时钟显示,由此,结合前面所学的知识,巩固了数码管显示的知识,增强了我的程序调试能力,为下一步的学习打下了坚实基础。

相关文档
最新文档