Pixiv - KiraraShss
实验八 数码管显示实验
1275 字
6 分钟
实验八 数码管显示实验
实验八 数码管显示实验
1. 实验内容
基础部分
- 用一片 8255 接口芯片的 A 口和 B 口分别连接数码管段码接口(ABCDEFG、Dp)和位码接口(X1~X6)。编写程序实现以下两种显示方式:
-
使六位数码管从右到左逐位显示移动的数字 0 到 9,即数字 0 从最右端移动到最左端,数字 1 从最右端移动到最左端,….,数字 9 从最右端移动到最左端,循环上述过程;
-
使六位数码管从左到右稳定显示数字“123456”。
扩展部分
- 编写数码管显示子程序,可实现 1 个或多个数码管的稳定显示,使用入口参数定义拟显示的位置和显示的内容。使用该子程序,重新完成基础实验 1 和 2。
- 在数码管上显示学号后六位,并使用 6 个开关控制对应数码管的亮灭(例如,开关为 1 点亮,为 0 熄灭)。
- 在左侧的三个数码管上显示“123”,每隔 1 秒钟(可用软件延时,也可用 8254定时)“123”向右移动一位(循环) 。
2. 连线

3. 实验代码
基础部分:
1
P8255A EQU 0600HP8255B EQU 0602HP8255C EQU 0604HP8255MODE EQU 0606H
DATA SEGMENT TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDATA ENDS
CODE SEGMENT ASSUME CS:CODE, DS:DATASTART: 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 MAININIT_POS: ; 初始化数码管位置 MOV AL, 11011111B INC SI CMP SI, 10 ; 已经显示到9(多加了一次) JZ INIT_DIGIT JMP MAININIT_DIGIT: ; 初始化数码管数字 MOV SI, 0 JMP MAIN
DELAY: PUSH CX MOV CX, 0FFFFH LOOP $ POP CX RETCODE ENDS END START2
P8255A EQU 0600HP8255B EQU 0602HP8255C EQU 0604HP8255MODE EQU 0606H
DATA SEGMENT TAB: DB 06H,5BH,4FH,66H,6DH,7DHDATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: 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 MAINRESET: MOV SI, 0 MOV AL, 11111110B JMP MAIN
DELAY: PUSH CX MOV CX, 0FFH LOOP $ POP CX RETCODE ENDS END START扩展部分:
1-1 略
1-2
P8255A EQU 0600HP8255B EQU 0602HP8255C EQU 0604HP8255MODE EQU 0606H
PUBLIC POSDATA SEGMENT TAB DB 06H,5BH,4FH,66H,6DH,7DH POS DB 11111110BDATA 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, TABMAIN: MOV POS, 11111110B MOV SI, 0 CALL DISPLAY_LEDS JMP MAIN
DISPLAY_LEDS: MOV CX, 6D1: 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 START2
C口 PC0-PC7 接 K0-K7
P8255A EQU 0600HP8255B EQU 0602HP8255C EQU 0604HP8255MODE EQU 0606H
PUBLIC POS
DATA SEGMENT TAB DB 5BH,3FH,3FH,6DH,06H,7DH POS DB 11111110B SSS DB 00100000BDATA 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, TABMAIN: MOV POS, 11111110B ; 从最左侧数码管开始 MOV SSS, 00100000B ; 从最左侧开关开始 MOV SI, 0 CALL DISPLAY_LEDS JMP MAIN
DISPLAY_LEDS: MOV CX, 6D1: 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 EXITTOFF: MOV AL, 00H OUT DX, ALEXITT: CALL DELAY RET
DELAY: PUSH CX MOV CX,0FFH LOOP $ POP CX RET
CODE ENDS END START3
定时器接线按照代码自行推知
P8255A EQU 0600HP8255B EQU 0602HP8255C EQU 0604HP8255MODE EQU 0606H
P8254A EQU 06C0HP8254B EQU 06C2HP8254C EQU 06C4HP8254MODE EQU 06C6H
PUBLIC POS
DATA SEGMENT TAB DB 06H,5BH,4FH POS DB 11111110B INIP DB 11111110BDATA 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 STIMAIN: MOV CL, INIP MOV POS, CL MOV SI, 0 CALL DISPLAY_LEDS JMP MAIN
DISPLAY_LEDS: MOV CX, 3D1: 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文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章 智能推荐
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 起始的一段空间中,并通过系统命令查看该存储空间,检查写入数据是否正确。 要求:分别按规则字、非规则字和字节三种方式将数据写入存储器,并观察实验结果。 拓展部分 编写程序实现如
随机文章 随机推荐