实验八 数码管显示实验

1275 字
6 分钟
实验八 数码管显示实验

实验八 数码管显示实验#

1. 实验内容#

基础部分

  • 用一片 8255 接口芯片的 A 口和 B 口分别连接数码管段码接口(ABCDEFG、Dp)和位码接口(X1~X6)。编写程序实现以下两种显示方式:
  1. 使六位数码管从右到左逐位显示移动的数字 0 到 9,即数字 0 从最右端移动到最左端,数字 1 从最右端移动到最左端,….,数字 9 从最右端移动到最左端,循环上述过程;

  2. 使六位数码管从左到右稳定显示数字“123456”。

扩展部分

  1. 编写数码管显示子程序,可实现 1 个或多个数码管的稳定显示,使用入口参数定义拟显示的位置和显示的内容。使用该子程序,重新完成基础实验 1 和 2。
  2. 在数码管上显示学号后六位,并使用 6 个开关控制对应数码管的亮灭(例如,开关为 1 点亮,为 0 熄灭)。
  3. 在左侧的三个数码管上显示“123”,每隔 1 秒钟(可用软件延时,也可用 8254定时)“123”向右移动一位(循环) 。

2. 连线#

机箱连线
机箱连线

3. 实验代码#

基础部分:#

1#
P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
DATA SEGMENT
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, P8255MODE
MOV AL, 80H ; A,B口输出
OUT DX, AL
MOV DX, P8255A
MOV AL, 00H
OUT DX, AL
MOV DX, P8255B
MOV AL, 00H
OUT DX, AL
LEA BX, TAB
MOV SI, 0
MOV AL, 11011111B ; 从最右侧数码管开始
MAIN:
MOV DX, P8255A ; 选择数码管
OUT DX, AL
ROR AL, 1
PUSH AX
MOV DX, P8255B
MOV AL, [BX+SI]
OUT DX, AL
CALL DELAY
POP AX
CMP AL, 01111111B ; 已经移至最左侧(多循环移动了一位)
JZ INIT_POS
JMP MAIN
INIT_POS: ; 初始化数码管位置
MOV AL, 11011111B
INC SI
CMP SI, 10 ; 已经显示到9(多加了一次)
JZ INIT_DIGIT
JMP MAIN
INIT_DIGIT: ; 初始化数码管数字
MOV SI, 0
JMP MAIN
DELAY:
PUSH CX
MOV CX, 0FFFFH
LOOP $
POP CX
RET
CODE ENDS
END START
2#
P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
DATA SEGMENT
TAB: DB 06H,5BH,4FH,66H,6DH,7DH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, P8255MODE
MOV AL, 80H
OUT DX, AL
LEA BX, TAB
MOV SI, 0
MOV AL, 11111110B ; 从最左侧数码管开始
MAIN:
MOV DX, P8255A ; 选择数码管
OUT DX, AL
ROL AL, 1
PUSH AX
MOV DX, P8255B
MOV AL, [BX+SI]
OUT DX, AL
CALL DELAY
POP AX
INC SI
CMP SI, 6
JZ RESET
JMP MAIN
RESET:
MOV SI, 0
MOV AL, 11111110B
JMP MAIN
DELAY:
PUSH CX
MOV CX, 0FFH
LOOP $
POP CX
RET
CODE ENDS
END START

扩展部分:#

1-1 略#
1-2#
P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
PUBLIC POS
DATA SEGMENT
TAB DB 06H,5BH,4FH,66H,6DH,7DH
POS DB 11111110B
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, P8255MODE
MOV AL, 80H
OUT DX, AL
LEA BX, TAB
MAIN:
MOV POS, 11111110B
MOV SI, 0
CALL DISPLAY_LEDS
JMP MAIN
DISPLAY_LEDS:
MOV CX, 6
D1: CALL SHOW_DIGIT
ROL POS, 1
INC SI
LOOP D1
RET
SHOW_DIGIT:
MOV DX, P8255A
MOV AL, POS
OUT DX, AL
MOV DX, P8255B
MOV AL, [SI+BX]
OUT DX, AL
CALL DELAY
RET
DELAY:
PUSH CX
MOV CX,0FFH
LOOP $
POP CX
RET
CODE ENDS
END START
2#

C口 PC0-PC7 接 K0-K7

P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
PUBLIC POS
DATA SEGMENT
TAB DB 5BH,3FH,3FH,6DH,06H,7DH
POS DB 11111110B
SSS DB 00100000B
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, P8255MODE
MOV AL, 89H ; A、B口输出,C口输入
OUT DX, AL
LEA BX, TAB
MAIN:
MOV POS, 11111110B ; 从最左侧数码管开始
MOV SSS, 00100000B ; 从最左侧开关开始
MOV SI, 0
CALL DISPLAY_LEDS
JMP MAIN
DISPLAY_LEDS:
MOV CX, 6
D1: CALL SHOW_DIGIT
ROL POS, 1
ROR SSS, 1
INC SI
LOOP D1
RET
SHOW_DIGIT:
MOV DX, P8255A
MOV AL, POS
OUT DX, AL
MOV DX, P8255C ; 读开关状态
IN AL, DX
MOV DX, P8255B
AND AL, SSS ; 判断当前位置开关状态
JZ OFF
MOV AL, [BX+SI]
OUT DX, AL
JMP EXITT
OFF:
MOV AL, 00H
OUT DX, AL
EXITT:
CALL DELAY
RET
DELAY:
PUSH CX
MOV CX,0FFH
LOOP $
POP CX
RET
CODE ENDS
END START
3#

定时器接线按照代码自行推知

P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
P8254A EQU 06C0H
P8254B EQU 06C2H
P8254C EQU 06C4H
P8254MODE EQU 06C6H
PUBLIC POS
DATA SEGMENT
TAB DB 06H,5BH,4FH
POS DB 11111110B
INIP DB 11111110B
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
LEA AX, MIR7 ; 取中断入口地址
MOV SI, 003CH ; 中断矢量地址
MOV [ES:SI], AX ; 填IRQ7的偏移矢量确定地址
MOV AX, CS ; 段地址
MOV SI, 003EH
MOV [ES:SI], AX ; 填IRQ7的段地址矢量
CLI
MOV DX, P8255MODE
MOV AL, 81H
OUT DX, AL
LEA BX, TAB
MOV DX, P8254MODE
MOV AL, 36H
OUT DX, AL
MOV DX, P8254A
MOV AL, 00H ; 定时器初值4800H
OUT DX, AL
MOV AL, 48H
OUT DX, AL
MOV AL, 11H
OUT 20H, AL
MOV AL, 08H
OUT 21H, AL
MOV AL, 04H
OUT 21H, AL
MOV AL, 07H
OUT 21H, AL
MOV AL, 2FH
OUT 21H, AL
STI
MAIN:
MOV CL, INIP
MOV POS, CL
MOV SI, 0
CALL DISPLAY_LEDS
JMP MAIN
DISPLAY_LEDS:
MOV CX, 3
D1: CALL SHOW_DIGIT
ROL POS, 1
CMP POS, 10111111B ; 最右侧(多移动了一位)
JNZ EXI
MOV POS, 11111110B ; 下一个数码位置初始化至最左侧
EXI:
INC SI
LOOP D1
RET
SHOW_DIGIT:
MOV DX, P8255A
MOV AL, POS
OUT DX, AL
MOV DX, P8255B
MOV AL, [BX+SI]
OUT DX, AL
CALL DELAY
RET
MIR7:
ROL INIP, 1
CMP INIP, 10111111B ; 最右侧(多移动了一位)
JNZ EXITI
MOV INIP, 11111110B ; 起始数码(1)位置初始化至最左侧
EXITI:
IRET
DELAY:
PUSH CX
MOV CX,0FFH
LOOP $
POP CX
RET
CODE ENDS
END START

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

实验八 数码管显示实验
https://mathison2020.github.io/posts/2022-11-21-mcexp8/
作者
Mathison2020
发布于
2022-11-21
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
实验九 键盘扫描及数码管显示实验
微机实验 实验九 键盘扫描及数码管显示实验1. 实验内容基础部分 编写程序,实现如下功能:初始时数码管无显示;第一次按下键盘时,在最右侧数码管显示对应的十六进制数字;以后每次按下键盘,则将当前显示的数字全部向左移动一位(最左侧的数字移出数码管),并将刚刚键入的数字显示在数码管的最右侧。 扩展部分 编写程序,将所按键对应的数字(0
2
实验四 A/D转换实验
微机实验 实验四 A/D转换实验1. 实验内容基础+扩展部分 编写实验程序,将 ADC 单元中提供的 0V~5V 信号源作为 ADC0809 的模拟输入量,进行 A/D 转换,转换结果通过 8 位 LED 进行显示。分别使用延时等待、查询和中断三种方式实现本实验的实验内容。 2. 实验原理 延时方式:又名等待方式、定时采样方式,
3
实验五 D/A转换实验
微机实验 实验五 D/A转换实验1. 实验内容基础部分 编写程序,产生周期的锯齿波、矩形波、三角波和阶梯波,经 D/A 转换,显示在软件模拟示波器上。要求:每种波形的周期数、阶梯波的阶梯数可通过参数设置。 扩展部分 在软件模拟示波器上显示锯齿波、矩形波、三角波和阶梯波,并使用单脉冲开关KK1在四种波形间进行切换。 2. 实验原理
4
实验一 8255并行接口实验
微机实验 实验一 8255并行接口实验1. 实验内容基础部分编写一个基本输入输出程序,使8255的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。要求:数据灯的显示随开关动态变化。拓展部分在基础实验上增加如下功能: 若开关 K7~K0 均为高电平,则程序退出。 当 K0 为高电平时,数据灯高4位亮; 当 K0 为低电平时
5
实验二 存储器扩展实验
微机实验 实验二 存储器扩展实验1. 实验内容基础部分 编写实验程序,将 0000H~000FH(16个十六位的数据)写入SRAM从 8000:0000H 起始的一段空间中,并通过系统命令查看该存储空间,检查写入数据是否正确。 要求:分别按规则字、非规则字和字节三种方式将数据写入存储器,并观察实验结果。 拓展部分 编写程序实现如
随机文章 随机推荐
Profile Image of the Author
Mathison2020
Never really desperate, only the lost of the soul.
公告
欢迎来到 Mathison's Blog,这里记录算法、实验和学习笔记。
分类
标签
站点统计
文章
12
分类
3
标签
6
总字数
12,352
运行时长
0
最后活动
0 天前

目录