当前位置:文档之家› 实验四 七段数码管显示实验报告

实验四 七段数码管显示实验报告

实验四七段数码管显示实验
一、实验目的
掌握数码管显示数字的原理。

二、实验内容
1.静态显示:数码管为共阴极,通过BCD码译码驱动器CD4511驱动,其输入端A~D输入4位BCD码,位码输入低电平选中。

按图4-1连接好电路,将8255的A口PA0~PA3与七段数码管LED1的BCD码驱动输入端A1~D1相连,8255的A口PA4~PA7与七段数码管LED2的BCD码驱动输入端A2~D2相连,8255的B口PB0~PB3与七段数码管LED3的BCD码驱动输入端A3~D3相连,8255的B口PB4~PB7与七段数码管LED4的BCD码驱动输入端A4~D4相连,8255的C口PC0~PC3分别与七段数码管LED4~LED4的位驱动输入端DG1~DG4相连。

编程从键盘上每输入4个0~9数字,在七段数码管LED4~LED4上依次显示出来。

图4-1
2.动态显示:数码管为共阴极,段码采用相同驱动,输入端加高电平,选中的数码管对应段点亮,位码采用同相驱动,位码输入端低电平选中,按图4-2连接好电路,图中只画了2个数码管,实际是8个数码管,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~g相连(32TCI0模块上的J1连32LED8模块J2),8255的C口的PC0~PC7接七段数码管的段码驱动输入(32TCI0模块上的J3连32LED8模块J1),跳线器K1连2和3。

编程在8个数码管上显示“12345678”。

按任意键推出运行。

图4-2
三、编程提示
1.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不用,编程时需要了解当前的微机使用那段IO地址并进行处理。

2.对实验内容1,七段数码管字型代码与输入的关系如下
表:
四、参考流程图
1.实验内容一的参考流程图
图4-3 2.实验内容二的参考流程图
图4-4
五、参考程序
1.内容一的参考程序
源程序清单如下:
data segment
ioport equ 0c400h-0280h
io8255a equ ioport+288h
io8255b equ ioport+289h
io8255c equ ioport+28ah
io8255k equ ioport+28bh
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
mesg1 db 0dh,0ah,'Input a num (0--9),other key is exit:',0dh,0ah,'$'
bz db ?
cz db 04h
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,io8255k ;使8255的A口为输出方式
mov ax,80h
out dx,al
sss0: mov si,offset bz
mov cx,04h
sss1: mov dx,offset mesg1 ;显示提示信息
mov ah,09h
int 21h
mov ah,01 ;从键盘接收字符
int 21h
cmp al,'0' ;是否小于0
jl exit ;若是则退出
cmp al,'9' ;是否大于9
jg exit ;若是则退出
sub al,30h ;将所得字符的ASCII码减30H
mov [si],al ;存入显示缓冲区
inc si ;显示缓冲区指针加1
dec cx ;判断输入满4个数字吗?
jnz sss1 ;不满继续
mov si,offset bz ;从显示缓冲区取第一个数字的BCD 码
mov al,[si]
and al,0fh ;屏蔽高四位暂存AL
inc si ;显示缓冲区指针加1
mov ah,[si] ;取第二个数字的BCD码到AH
sal ah,4h ;右移4次到高四位
add al,ah ;两个BCD码合并成一个字节
mov bl,al ;暂存入BL
inc si
mov al,[si] ;取第三个数字的BCD码
and al,0fh
inc si
mov ah,[si] ;取第四个数字的BCD码到AH
sal ah,4h
add ah,al
mov al,ah
mov dx,io8255a ;从8255的A口输出(后两个数字)out dx,al
mov al,bl
mov dx,io8255b ;从8255的B口输出(前两个数字)out dx,al
mov al,0f0h
mov dx,io8255c ;从8255的C口输出位码
out dx,al
mov dl,0ffh
mov ah,06
int 21h
je sss0 ;有键按下则退出
exit: mov ah,4ch ;返回
int 21h
code ends
end start
2.内容二的参考程序
源程序清单如下:
data segment
ioport equ 0C400h-0280h
io8255c equ ioport+28ah
io8255k equ ioport+28bh
io8255a equ ioport+288h
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 01h,02h,03h,04h,05h,06h,07h,08h ;存放要显示的十位和个位
con db ? ;位码
data ends
code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
mov dx,io8255k ;将8255设为A口C口输出mov al,80h
out dx,al
loop2: mov al,08h ;设置数码管位计数器初值到CON mov byte ptr con,al
mov si,offset buffer1 ;置显示缓冲器指针SI
mov ah,7fh ;置位码初值
disp0: mov cx,0ffffh
mov bl,ds:[si] ;取显示缓冲区显示值存BX
mov bh,0h
push si
mov dx,io8255c ;位码从C口输出
mov al,ah
out dx,al
mov dx,io8255a
mov si,offset led ;置led数码表偏移地址为SI
add si,bx ;求出对应的led数码
mov al,byte ptr [si]
out dx,al ;段码从A口输出
disp1: loop disp1 ;延时
mov cx,0ffffh
disp2: loop disp2
ror ah,01h ;位码右移1位
pop si
inc si ;显示缓冲区指针加1
mov al,byte ptr con
dec al
mov byte ptr con,al
jnz disp0 ;数码管位计数器减1为0吗?,不为0继续
mov dx,io8255a ;为0,关数码管显示
mov al,0
out dx,al
mov dl,0ffh
mov ah,06
int 21h
je loop2 ;有键按下则退出
mov ah,4ch ;返回
int 21h
code ends
end start
实验总结:
通过这次试验,我了解到自定义数据类型可以根据自己的需要方便设定,有很大的灵活性。

而在程序的编写过程中,我们应该首先分析各个端口的优先级顺序,然后进行判断,分析设计。

相关主题