PORTA EQU 0200H ;8255的PA口地址
PORTB EQU 0202H ;A1、A2用于端口选择
PORTC EQU 0204H ;PC口,上面是PB口
PCONT EQU 0206H ;8255的控制口地址
RESET EQU 11100010B ;LCD复位命令码
DISP_ON EQU 10101111B ;LCD显示开命令码
DISP_NOR EQU 10100110B ;LCD正常显示命令码
DISP_ALL EQU 10100100B ;LCD所有点全部显示命令码
LINE0 EQU 01000000B ;行号,0开始,到63
PAGE0 EQU 10110000B ;页号,0开始,到7
COLHIGH EQU 00010000B ;列号高四位
COLLOW EQU 00000000B ;列号低四位,共16列
ADCA EQU 10100000B ;向左显示命令码
DATA SEGMENT ;定义数据段
;西北师范大学
SC0 DB 04H,0C4H,44H,44H,44H,0FCH,44H,44H
DB 44H,0FCH,44H,44H,44H,0E6H,44H,00H
DB 00H,0FFH,40H,50H,48H,47H,40H,40H
DB 40H,47H,48H,48H,40H,0FFH,00H,00H
SC1 DB 00H,20H,20H,20H,20H,0FFH,00H,00H
DB 0FFH,20H,10H,08H,0CH,00H,00H,00H
DB 20H,60H,20H,10H,10H,7FH,00H,00H
DB 3FH,40H,40H,40H,40H,40H,70H,00H
SC2 DB 00H,0FCH,00H,00H,0FFH,00H,02H,0F2H
DB 12H,12H,0FEH,12H,12H,0FBH,12H,00H
DB 00H,8FH,40H,30H,0FH,00H,00H,3FH
DB 00H,00H,0FFH,10H,20H,1FH,00H,00H
SC3 DB 04H,44H,94H,24H,6FH,04H,0E4H,24H
DB 24H,24H,2FH,0F4H,24H,06H,04H,00H
DB 04H,04H,0FDH,04H,02H,00H,3FH,40H
DB 40H,42H,44H,43H,40H,40H,70H,00H
SC4 DB 20H,20H,20H,20H,20H,20H,0A0H,7FH
DB 0A0H,20H,20H,20H,20H,30H,20H,00H
DB 00H,40H,40H,20H,10H,0CH,03H,00H
DB 01H,06H,08H,10H,20H,60H,20H,00H
SC5 DB 40H,30H,11H,96H,90H,90H,91H,96H
DB 90H,90H,98H,14H,13H,50H,30H,00H
DB 04H,04H,04H,04H,04H,44H,84H,7EH
DB 06H,05H,04H,04H,04H,06H,04H,00H
;计算机学院
SA0 DB 40H,40H,42H,0CCH,00H,40H,40H,40H
DB 40H,0FFH,40H,40H,40H,60H,40H,00H
DB 00H,00H,00H,7FH,20H,10H,08H,00H
DB 00H,0FFH,00H,00H,00H,00H,00H,00H
SA1 DB 08H,04H,03H,0FAH,0AEH,0AAH,0AAH,0ACH
DB 0ABH,0AAH,0AEH,0FAH,02H,02H,00H,00H,
DB 08H,08H,88H,4BH,3EH,0AH,0AH,0AH
DB 0AH,0AH,0FEH,0BH,08H,0CH,08H,00H
SA2 DB 10H,10H,0D0H,0FFH,90H,10H,00H,0FCH
DB 04H,04H,04H,0FEH,04H,00H,00H,00H
DB 04H,03H,00H,0FFH,80H,41H,20H,1FH
DB 00H,00H,00H,3FH,40H,40H,70H,00H
SA3 DB 40H,30H,11H,96H,90H,90H,91H,96H
DB 90H,90H,98H,14H,13H,50H,30H,00H
DB 04H,04H,04H,04H,04H,44H,84H,7EH
DB 06H,05H,04H,04H,04H,06H,04H,00H
SA4 DB 00H,0FEH,22H,5AH,96H,0CH,24H,24H
DB 25H,26H,24H,34H,0A4H,14H,0CH,00H
DB 00H,0FFH,04H,08H,87H,81H,41H,31H
DB 0FH,01H,3FH,41H,41H,41H,70H,00H
;刘艳鸿
NA0 DB 08H,28H,49H,8AH,0EH,88H,78H,0CH
DB 08H,00H,0FCH,00H,00H,0FFH,00H,00H
DB 40H,20H,10H,09H,06H,09H,30H,60H
DB 00H,00H,0FH,40H,80H,7FH,00H,00H
NA1 DB 08H,48H,48H,0FFH,48H,48H,28H,0F8H
DB 24H,27H,0F4H,2CH,24H,0F0H,20H,00H
DB 02H,02H,02H,0FFH,02H,02H,02H,3FH
DB 42H,42H,43H,42H,42H,47H,70H,00H
NA2 DB 10H,21H,62H,16H,10H,0F0H,18H,10H
DB 0FCH,06H,55H,84H,7EH,04H,00H,00H
DB 04H,04H,0FCH,0BH,18H,0FH,04H,14H
DB 13H,12H,1AH,52H,82H,7FH,02H,00H
;学号
C0 DB 00H,0E0H,10H,08H,08H,10H,0E0H,00H
DB 00H,0FH,10H,20H,20H,10H,0FH,00H
C1 DB 00H,10H,10H,0F8H,00H,00H,00H,00H
DB 00H,20H,20H,3FH,20H,20H,00H,00H
C2 DB 00H,70H,08H,08H,08H,88H,70H,00H
DB 00H,30H,28H,24H,22H,21H,30H,00H
C3 DB 00H,30H,08H,88H,88H,48H,30H,00H
DB 00H,18H,20H,20H,20H,11H,0EH,00H
C4 DB 00H,00H,0C0H,20H,10H,0F8H,00H,00H
DB 00H,07H,04H,24H,24H,3FH,24H,00H
C5 DB 00H,0F8H,08H,88H,88H,08H,08H,00H
DB 00H,19H,21H,20H,20H,11H,0EH,00H
C6 DB 00H,0E0H,10H,88H,88H,18H,00H,00H
DB 00H,0FH,11H,20H,20H,11H,0EH,00H
C7 DB 00H,38H,08H,08H,0C8H,38H,08H,00H
DB 00H,00H,00H,3FH,00H,00H,00H,00H
C8 DB 00H,70H,88H,08H,08H,88H,70H,00H
DB 00H,1CH,22H,21H,21H,22H,1CH,00H
C9 DB 00H,0E0H,10H,08H,08H,10H,0E0H,00H
DB 00H,00H,31H,22H,22H,11H,0FH,00H
TEMP DB 32 DUP(0) ;临时字模数据区
X DB 0 ;显示位置的起始行号
Y DB 0 ;显示位置的起始列号
DATA ENDS ;数据段定义结束
STACK SEGMENT STACK ;准备定义堆栈段
STP DW 100 DUP(?) ;预先定义的堆栈深度
LEN EQU $-STP
STACK ENDS ;堆栈段定义结束
CODE SEGMENT 'code' ;定义代码段
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA ;初始化数据段
MOV DS,AX
CALL INIT ;LCD初始化
;准备显示学校
MOV BL,X
MOV BH,Y
LEA SI,SC0
CALL DISPCHN
LEA SI,SC1
ADD BH,32
CALL DISPCHN
LEA SI,SC2
ADD BH,32
CALL DISPCHN
LEA SI,SC3
ADD BH,32
CALL DISPCHN
LEA SI,SC4
ADD BH,32
CALL DISPCHN
LEA SI,SC5
ADD BH,32
CALL DISPCHN
;准备显示学院
MOV BL,0
MOV BH,1
LEA SI,SA0
CALL DISPCHN
LEA SI,SA1
ADD BH,32
CALL DISPCHN
LEA SI,SA2
ADD BH,32
CALL DISPCHN
LEA SI,SA3
ADD BH,32
CALL DISPCHN
LEA SI,SA4
ADD BH,32
CALL DISPCHN
;准备显示姓名
MOV BL,0
MOV BH,2
LEA SI,NA0
CALL DISPCHN
LEA SI,NA1
ADD BH,32
CALL DISPCHN
LEA SI,NA2
ADD BH,32
CALL DISPCHN
;准备显示半角数字2,SI<-2的字模区首地址
;列号->BL,行号->BH,因半角数字与全角汉字字模存储
; 空间数不同,故用不同的子程序来显示
;学号
MOV BL,0
MOV BH,3
LEA SI,C2
LEA DI,C0
LEA BP,TEMP
CALL FULLCHA
LEA SI,C2
LEA DI,C3
ADD BH,16
CALL FULLCHA
LEA SI,C3
LEA DI,C1
ADD BH,16
CALL FULLCHA
LEA SI,C6
LEA DI,C0
ADD BH,16
CALL FULLCHA
LEA SI,C7
LEA DI,C3
ADD BH,16
CALL FULLCHA
LEA SI,C1
LEA DI,C7
ADD BH,16
CALL FULLCHA
;显示完一个汉字和一个数字,在原地循环等待
JMP $
INIT PROC NEAR ;LCD与8255初始化子程序
MOV AL,1 0000000B
MOV DX,PCONT
OUT DX,AL ;INIT 8255
MOV AL,00000001B ;INIT LCD
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,RESET ;RESET
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,DISP_ON ;DISP ON
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,ADCA ;ADC
INC AL
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,DISP_ALL ;DISP ALL
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,DISP_NOR ;DISP NOR
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
RET
INIT ENDP
;以下为汉字显示子程序
DISPCHN PROC NEAR
PUSH CX
PUSH DX
PUSH AX
PUSH DI
PUSH SI
MOV DI,BX
MOV CL,4
SHL BL,CL
MOV AL,BL
AND BL, 0FH
MOV CL,4
SHR AL,CL
ADD AL,COLHIGH
ADD BL,COLLOW
MOV BH,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BH ;COL HIGH
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;COL LOW
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV BX,DI
MOV BL,BH
SHL BL,1
ADD BL,PAGE0
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;ROW 1
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV CX,16
HIGHE:
MOV AL,00000011B
MOV DX,PORTB
OUT DX,AL
DATA1:
MOV AL,[SI]
MOV DX,PORTA
OUT DX,AL
NOP
NOP
INC SI
DATAE:
MOV AL,00000010B
MOV DX,PORTB
OUT DX,AL
NOP
NOP
LOOP HIGHE
MOV BX,DI
MOV BL,BH
SHL BL,1
ADD BL,PAGE0
INC BL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;ROW 2
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV BX,DI
MOV CL,4
SHL BL,CL
MOV AL,BL
AND BL,0FH
MOV CL,4
SHR AL,CL
ADD AL,COLHIGH
ADD BL,COLLOW
MOV BH,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BH ;COL HIGH
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;COL LOW
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
POP SI
ADD SI,16
MOV CX,16
HIGHE2:
MOV AL,00000011B
MOV DX,PORTB
OUT DX,AL
DATA2:
MOV AL,[SI]
MOV DX,PORTA
OUT DX,AL
NOP
NOP
INC SI
DATAE2:
MOV AL,00000010B
MOV DX,PORTB
OUT DX,AL
NOP
NOP
LOOP HIGHE2
POP DI
POP AX
POP DX
POP CX
RET
DISPCHN ENDP
;以下为显示半角字母、数字的子程序
DISPCHA PROC NEAR
PUSH CX
PUSH DX
PUSH AX
PUSH DI
PUSH SI
MOV DI,BX
MOV CL,4 ;4
SHL BL,CL
MOV AL,BL
AND BL,0FH ;0F
MOV CL,4 ;4
SHR AL,CL
ADD AL,COLHIGH
ADD BL,COLLOW
MOV BH,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BH ;COL HIGH
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;COL LOW
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV BX,DI
MOV BL,BH ;Y
SHL BL,1
ADD BL,PAGE0
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;ROW 1
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV CX,8
HIGHEC:
MOV AL,00000011B
MOV DX,PORTB
OUT DX,AL
DATA1C:
MOV AL,[SI]
MOV DX,PORTA
OUT DX,AL
NOP
NOP
INC SI
DATAEC:
MOV AL,00000010B
MOV DX,PORTB
OUT DX,AL
NOP
NOP
LOOP HIGHEC
MOV BX,DI
MOV BL,BH
SHL BL,1
ADD BL,PAGE0
INC BL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;ROW 2
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV BX,DI
MOV CL,4 ;4
SHL BL,CL
MOV AL,BL
AND BL, 0FH ;0F
MOV CL,4 ;4
SHR AL,CL
ADD AL,COLHIGH
ADD BL,COLLOW
MOV BH,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BH ;COL HIGH
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
MOV AL,00000001B
MOV DX,PORTB
OUT DX,AL
NOP
MOV AL,BL ;COL LOW
MOV DX,PORTA
OUT DX,AL
NOP
MOV AL,00000000B
MOV DX,PORTB
OUT DX,AL
POP SI
ADD SI,8
MOV CX,8
HIGHE2C:
MOV AL,00000011B
MOV DX,PORTB
OUT DX,AL
DATA2C:
MOV AL,[SI]
MOV DX,PORTA
OUT DX,AL
NOP
NOP
INC SI
DATAE2C:
MOV AL,00000010B
MOV DX,PORTB
OUT DX,AL
NOP
NOP
LOOP HIGHE2C
POP DI
POP AX
POP DX
POP CX
RET
DISPCHA ENDP
FULLCHA PROC NEAR
PUSH SI
PUSH DI
PUSH CX
PUSH BX
PUSH AX
MOV CX,4
MOV BX,BP
TLOP1:
MOV AX,[SI]
MOV [BX],AX
INC SI
INC SI
INC BX
INC BX
LOOP TLOP1
MOV CX,4
TLOP2:
MOV AX,[DI]
MOV [BX],AX
INC DI
INC DI
INC BX
INC BX
LOOP TLOP2
MOV CX,4
TLOP3:
MOV AX,[SI]
MOV [BX],AX
INC SI
INC SI
INC BX
INC BX
LOOP TLOP3
MOV CX,4
TLOP4:
MOV AX,[DI]
MOV [BX],AX
INC DI
INC DI
INC BX
INC BX
LOOP TLOP4
POP AX
POP BX
POP CX
POP DI
POP SI
MOV SI,BP
CALL DISPCHN
RET
FULLCHA ENDP
CODE ENDS
END START
;以上代码不是最优结果,大家可以尝试优化、合并处
理
最新发布