ToC
实验内容
使七段共阴极数码管显示如下内容:
- 从右到左逐位显示移动的数字
0~9
。即一开始是0
从右到左移动,然后是1
,然后是2
,以此类推。最后在9
移动完后返回0
,继续循环。 - 使六位数码管从左到右显示稳定的数字
123456
。
实验接线
照着书上连就可以了。在这个实验中,PC
甚至可以不连(笑)
代码
数字滚动
A8255 EQU 0600HB8255 EQU 0602HC8255 EQU 0604HCON8255 EQU 0606H
SSEG SEGMENT STACK DW 0, 0, 0, 0SSEG ENDS
DATA SEGMENT TBL: DB 3FH ;; 0 DB 06H ;; 1 DB 5BH ;; 2 DB 4FH ;; 3 DB 66H ;; 4 DB 6DH ;; 5 DB 7DH ;; 6 DB 07H ;; 7 DB 7FH ;; 8 DB 6FH ;; 9 SEQ: DB 00011111B ;; POS 0 DB 00101111B ;; POS 1 DB 00110111B ;; POS 2 DB 00111011B ;; POS 3 DB 00111101B ;; POS 4 DB 00111110B ;; POS 5DATA ENDS
CODE SEGMENTASSUME CS:CODE, DS:DATA, SS:SSEGSTART PROC MOV AX, DATA MOV DS, AX
MOV AL, 10001001B ;; A B OUT, C IN MOV DX, CON8255 OUT DX, AL
MOV AX, 0000HLO: CALL PUT CALL DELAY INC AL CMP AL, 6 JNE LO MOV AL, 0 INC AH CMP AH, 10 JNE LO MOV AH, 0 JMP LO
MOV AX, 4C00H INT 21HSTART ENDP
;; NUM: AH;; POS: ALPUT PROC PUSH AX
;; SELECT POS LEA BX, SEQ PUSH AX MOV AH, 0 MOV SI, AX
;; OUTPUT POS MOV DX, A8255 MOV AL, [BX+SI] OUT DX, AL POP AX
;; SELECT NUM LEA BX, TBL MOV AL, AH MOV AH, 0 MOV SI, AX
;; OUTPUT DATA MOV DX, B8255 MOV AL, [BX+SI] OUT DX, AL
POP AX RETPUT ENDP
DELAY PROC MOV CX, 0FFFFH LOOP $
MOV CX, 0FFFFH LOOP $ RETDELAY ENDP
CODE ENDSEND START
持久显示
A8255 EQU 0600HB8255 EQU 0602HC8255 EQU 0604HCON8255 EQU 0606H
SSEG SEGMENT STACK DW 0, 0, 0, 0SSEG ENDS
DATA SEGMENT TBL: DB 3FH ;; 0 DB 06H ;; 1 DB 5BH ;; 2 DB 4FH ;; 3 DB 66H ;; 4 DB 6DH ;; 5 DB 7DH ;; 6 DB 07H ;; 7 DB 7FH ;; 8 DB 6FH ;; 9 SEQ: DB 00011111B ;; POS 0 DB 00101111B ;; POS 1 DB 00110111B ;; POS 2 DB 00111011B ;; POS 3 DB 00111101B ;; POS 4 DB 00111110B ;; POS 5DATA ENDS
CODE SEGMENTASSUME CS:CODE, DS:DATA, SS:SSEGSTART PROC MOV AX, DATA MOV DS, AX
MOV AL, 10001001B ;; A B OUT, C IN MOV DX, CON8255 OUT DX, AL
MOV AX, 0000HLO: MOV AX, 0105H CALL PUT CALL DELAY
MOV AX, 0204H CALL PUT CALL DELAY
MOV AX, 0303H CALL PUT CALL DELAY
MOV AX, 0402H CALL PUT CALL DELAY
MOV AX, 0501H CALL PUT CALL DELAY
MOV AX, 0600H CALL PUT CALL DELAY JMP LO
MOV AX, 4C00H INT 21HSTART ENDP
;; NUM: AH;; POS: ALPUT PROC PUSH AX
;; SELECT POS LEA BX, SEQ PUSH AX MOV AH, 0 MOV SI, AX
;; OUTPUT POS MOV DX, A8255 MOV AL, [BX+SI] OUT DX, AL POP AX
;; SELECT NUM LEA BX, TBL MOV AL, AH MOV AH, 0 MOV SI, AX
;; OUTPUT DATA MOV DX, B8255 MOV AL, [BX+SI] OUT DX, AL
POP AX RETPUT ENDP
DELAY PROC MOV CX, 0FFH LOOP $ RETDELAY ENDP
CODE ENDSEND START
实验效果
这里就只展示数字滚动的效果好了(
选做实验
选做实验 1-2
说明
编写显示子程序,实现一个或多个数码管的稳定显示。使用入口参数定义拟显示的位置和显示的内容。
利用(1)实现的子程序,重新完成基本实验 1)和 2)。
实现
这部分其实在上面的实验里已经实现了,就是这个 PUT
函数。它可以将 AH
的数字显示在 AL
的位置上。
;; NUM: AH;; POS: ALPUT PROC PUSH AX
;; SELECT POS LEA BX, SEQ PUSH AX MOV AH, 0 MOV SI, AX
;; OUTPUT POS MOV DX, A8255 MOV AL, [BX+SI] OUT DX, AL POP AX
;; SELECT NUM LEA BX, TBL MOV AL, AH MOV AH, 0 MOV SI, AX
;; OUTPUT DATA MOV DX, B8255 MOV AL, [BX+SI] OUT DX, AL
POP AX RETPUT ENDP
选做实验 3
说明
在数码管上显示学号后 6
位,并使用 6
个开关控制对应数码管的亮灭。
实现
通过开关控制就可以了,只需要多连一个 8255
即可。
A8255 EQU 0600HB8255 EQU 0602HC8255 EQU 0604HCON8255 EQU 0606H
SSEG SEGMENT STACK DW 0, 0, 0, 0SSEG ENDS
DATA SEGMENT TBL: DB 3FH ;; 0 DB 06H ;; 1 DB 5BH ;; 2 DB 4FH ;; 3 DB 66H ;; 4 DB 6DH ;; 5 DB 7DH ;; 6 DB 07H ;; 7 DB 7FH ;; 8 DB 6FH ;; 9 SEQ: DB 00011111B ;; POS 0 DB 00101111B ;; POS 1 DB 00110111B ;; POS 2 DB 00111011B ;; POS 3 DB 00111101B ;; POS 4 DB 00111110B ;; POS 5DATA ENDS
CODE SEGMENTASSUME CS:CODE, DS:DATA, SS:SSEGSTART PROC MOV AX, DATA MOV DS, AX
MOV AL, 10001001B ;; A B OUT, C IN MOV DX, CON8255 OUT DX, AL
MOV AX, 0000H ;; DISPLAY 181117LO: MOV AX, 0105H CALL PUT_COND
MOV AX, 0804H CALL PUT_COND
MOV AX, 0103H CALL PUT_COND
MOV AX, 0102H CALL PUT_COND
MOV AX, 0101H CALL PUT_COND
MOV AX, 0700H CALL PUT_COND JMP LO
MOV AX, 4C00H INT 21HSTART ENDP
;; NUM: AH;; POS: ALPUT_COND PROC PUSH AX
MOV BX, 1 MOV CL, AL SHL BL, CL
MOV DX, C8255 IN AL, DX
TEST BL, AL JZ PUT_EXIT POP AX PUSH AX CALL PUT CALL DELAY
PUT_EXIT: POP AX RETPUT_COND ENDP
;; NUM: AH;; POS: ALPUT PROC PUSH AX
;; SELECT POS LEA BX, SEQ PUSH AX MOV AH, 0 MOV SI, AX
;; OUTPUT POS MOV DX, A8255 MOV AL, [BX+SI] OUT DX, AL POP AX
;; SELECT NUM LEA BX, TBL MOV AL, AH MOV AH, 0 MOV SI, AX
;; OUTPUT DATA MOV DX, B8255 MOV AL, [BX+SI] OUT DX, AL
POP AX RETPUT ENDP
DELAY PROC MOV CX, 0FFH LOOP $ RETDELAY ENDP
CODE ENDSEND START
效果
注意左下角的开关(
选做实验 4
说明
在左侧的三个数码管上显示 123
,每隔 1
秒钟向右移动一位(循环)。
实现
这里用到的是 8254
延时,不过实验的时候 8254
好像出了什么状况不大行。因此以下代码仅供参考。
A8255 EQU 0600HB8255 EQU 0602HC8255 EQU 0604HCON8255 EQU 0606H
C008254 EQU 0640HC018254 EQU 0642HC028254 EQU 0644HCON8254 EQU 0646H
SSEG SEGMENT STACK DW 0, 0, 0, 0SSEG ENDS
DATA SEGMENT TBL: DB 3FH ;; 0 DB 06H ;; 1 DB 5BH ;; 2 DB 4FH ;; 3 DB 66H ;; 4 DB 6DH ;; 5 DB 7DH ;; 6 DB 07H ;; 7 DB 7FH ;; 8 DB 6FH ;; 9 SEQ: DB 00011111B ;; POS 0 DB 00101111B ;; POS 1 DB 00110111B ;; POS 2 DB 00111011B ;; POS 3 DB 00111101B ;; POS 4 DB 00111110B ;; POS 5 POS DB 05DATA ENDS
CODE SEGMENTASSUME CS:CODE, DS:DATA, SS:SSEGSTART PROC ;; INIT 8255 MOV AL, 10001001B MOV DX, CON8255 OUT DX, AL
;; MIR6 MOV AX, OFFSET MIR6 MOV SI, 38H MOV [SI], AX MOV AX, CS MOV SI, 3AH MOV [SI], AX
MOV AX, DATA MOV DS, AX
;; INIT 8259 CLI 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
;; INIT 8254 MOV DX, CON8254 MOV AL, 00110110B OUT DX, AL MOV DX, C008254 MOV AL, 00H OUT DX, AL MOV AL, 48H OUT DX, AL
MOV AX, 0000HLO: MOV AH, 01H MOV AL, POS CALL PUT_PRE CALL PUT CALL DELAY
INC AH DEC AL CALL PUT_PRE CALL PUT CALL DELAY
INC AH DEC AL CALL PUT_PRE CALL PUT CALL DELAY
JMP LO
MOV AX, 4C00H INT 21HSTART ENDP
MIR6: DEC AX DEC POS CMP POS, 0 JGE MIR6_END ADD POS, 6MIR6_END: IRET
PUT_PRE PROC CMP AH, 0 JGE SKIP_AH ADD AH, 10SKIP_AH: CMP AL, 0 JGE FIN_PRE ADD AL, 6FIN_PRE: RETPUT_PRE ENDP
;; NUM: AH;; POS: ALPUT PROC PUSH AX
;; SELECT POS LEA BX, SEQ PUSH AX MOV AH, 0 MOV SI, AX
;; OUTPUT POS MOV DX, A8255 MOV AL, [BX+SI] OUT DX, AL POP AX
;; SELECT NUM LEA BX, TBL MOV AL, AH MOV AH, 0 MOV SI, AX
;; OUTPUT DATA MOV DX, B8255 MOV AL, [BX+SI] OUT DX, AL
POP AX RETPUT ENDP
DELAY PROC MOV CX, 0FFH LOOP $ RETDELAY ENDP
DELAY_LONG PROC MOV CX, 0FFFFH LOOP $ MOV CX, 0FFFFH LOOP $ MOV CX, 0FFFFH LOOP $ MOV CX, 0FFFFH LOOP $ RETDELAY_LONG ENDP
CODE ENDSEND START