微原实验3——七段数码管显示
时间:2026-01-16
时间:2026-01-16
北航,微原,实验,报告
微原实验:七段数码管
一、实验目的
掌握接口芯片的编址方法,掌握8255的初始化设置,及数码管显示原理,掌握段控及位控的概念。
二、实验内容
①连接地址译码器与8255的连线及8255与数码管的连线;
②在数据段中存放0到9的字型码;
③从微机键盘输入2个数字的ASCII码,在输入过程中检查如非数字键的重新输入; ④然后将输入的ASCII码变成相应的数字,再利用换码指令XLAT查表得到的相应的字型码;
⑤将字型码送到8255输出口所接的数码管显示。
四、硬件连线
实验箱上设有两个共阴极七段数码管及驱动电路,如下图示,段码为同相驱动器,位码为反向驱动器,从段码与位码的驱动器输入端(段码输入端:a、b、c、d、e、f、dp,位码输入端:s1、s2)输入不同的代码即可显示不同数字或符号。
连接电路时,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1,S0接8255C口的PC1,PC0。
连线时:CS——288H~28FH,
PA0——a,PA1——b,PA2——c,PA3——d,PA4——e
PA5——f,PA6——g,dp——GND,PC0——S0,PC1——S1
四、程序流程图
北航,微原,实验,报告
定义堆栈段、数据段 初始化 8255A 调用输入子程序输入两位 x1 并存 使用 INT 21H 的 2 号功能显示 输入的两位数字
用换码指令将 AL 寄存器中的数 字换为段码
将段码输出给 8255A 的 A 端口
将二进制码 00000010 输出给 8255A 的 C 端口,显示数码管的十
延时 用换码指令将 AL 寄存器中的数 字换为段码
将段码输出给 8255A 的 A 端口
将二进制码 00000001 输出给 8255A 的 C 端口,显示数码管的个
延时
否
使用 INT 21H 的 6 号 功能检测是否有键输 入 是 返回 DOS
北航,微原,实验,报告
五、实验程序
stack segment stack
;
data segment
;
code segment
assume cs:code,ss:stack mov ax,data mov ds,ax mov al,10000010b mov dx,portcrl out dx,al mov si,offset x1 mov cx,2 and al,0fh mov si,[al] inc si loop next1 mov si,offset x1 mov bx,offset val mov al,[si] main proc x1 db 2 dup(0) val db 3fh,06h,5bh,4fh,66h,6dh,7dh,7fh porta equ 0ef00h-280h+288h portb equ 0ef00h-280h+289h portc equ 0ef00h-280h+28ah portcrl equ 0ef00h-280h+28bh dw 100 dup(?) stack ends data ends next1: call keyin next: mov dx,porta
北航,微原,实验,报告
; xlat out dx,al mov dx,portc mov al,10b out dx,al call delay mov dx,porta mov al,[si+1] xlat out dx,al mov dx,portc mov al,01b out dx,al call delay mov dl,0ffh mov ah,6 int 21h jz next mov ah,4ch int 21h main endp
delay proc
push bx push cx mov bx,100 mov cx,0 dec bx jnz next2 pop cx pop bx ret next2: loop next2
北航,微原,实验,报告
delay endp
;
keyin proc
again: mov ah,8
;
code ends
end main int 21h cmp al,30h jb again cmp al,39h ja again push ax mov dl,al mov ah,2 int 21h pop ax keyin endp
六、结论
符合预期,输入两个数字,七段数码管显示这两个数字。
七、实验心得
七段数码管作为本学期微原实验的第一个硬件实验,虽然不是很难,但是实验过程中也遇到了不少这样或者那样的问题,主要问题还是集中在硬件方面。程序方面,在上机之前我们组就已经完成了程序的编写,在实验室用了近二十分钟进行调试,如加了地址转换等等。但是进行编译运行后,数码管始终无法显示正确的数字,准确的说就是根本不变。在确定了程序无误的情况下,我们只能逐一排查没有正确显示结果的原因。我们检查了硬件接线,并且基本上重新接了实验线路,但是还是未能得到正确的结果。最后,我们将自己的程序拷到了有一个好的实验箱的电脑,终于得到了正确结果。实验结束后,我们分析了本次实验出现这个问题的原因,我觉得可能是与实验箱相连的扁平接线有问题才导致数码管始终无法正确显示。
经过本次实验,我基本掌握接口芯片的编址方法和8255的初始化设置,一定程度上理解了段控及位控的概念,尤其是在实验过程中遇到的问题,加深了我们分析问题解决问题的能力。
…… 此处隐藏:283字,全部文档内容请下载后查看。喜欢就下载吧 ……