128*64LCD字符图形液晶的问题,求教!
目的是:要在LCD上显示“32位微机教学实验系统正在演示中”接线是这样的:PA7~PA0 /8255 接 D7~D0 /LCD
PC0 /8255 接 D/I LCD
PC1 /8255 接 RW /LCD
PC2 /8255 接 E /LCD
LCD字符图形液晶工作于并行模式
然后程序在下面,接线盒程序都是书上的写的,我汇编实在菜,不知道是接线错误,还是程序错误。。求好人帮我看下吧。
谢谢了
;LCD.ASM
IO8255A equ 288h
IO8255C equ 28Ah
IO8255KZ equ 28bh
DATA SEGMENT
HZ_TAB DW 0A3B3H,0A3B2H,0CEBBH,0CEA2H,0BBFAH,0BDCCH,0D1A7H,0CAB5H
DW 0D1E9H,0CFB5H,0CDB3H,0D5FDH,0D4DAH,0D1DDH,0CABEH,0D6D0H
HZ_ADR DB ? ;存放显示行起始端口地址
DATA ENDS
code segment
assume cs:code,ds:data
START: MOV AX,DATA
MOV DS,AX
MOV DX, IO8255KZ
MOV AL,80H
OUT DX,AL ;8255初始化
CALL CLEAR ;LCD 清除
LEA BX, HZ_TAB
MOV CH,2 ;显示第2行信息
CALL LCD_DISP
LEA BX, HZ_TAB
MOV CH,3 ; 显示第3行信息
CALL LCD_DISP
mov ah,4ch ;退出
int 21h
CLEAR PROC
MOV AL,0CH
MOV DX, IO8255A
OUT DX,AL ;设置CLEAR命令
CALL CMD_SETUP ;启动LCD执行命令
RET
CLEAR ENDP
LCD_DISP PROC
LEA BX, HZ_TAB
CMP CH, 2
JZ DISP_SEC
MOV BYTE PTR HZ_ADR, 88H ;第三行起始端口地址
ADD BX,16 ;指向第二行信息
JMP next
DISP_SEC: MOV BYTE PTR HZ_ADR,90H
next: mov cl,8
continue: push cx
MOV AL,HZ_ADR
MOV DX, IO8255A
OUT DX, AL
CALL CMD_SETUP ;设定DDRAM地址命令
MOV AX,[BX]
PUSH AX
MOV AL,AH ;先送汉字编码高位
MOV DX, IO8255A
OUT DX,AL
CALL DATA_SETUP ;输出汉字编码高字节
CALL DELAY ;延迟
POP AX
MOV DX, IO8255A
OUT DX, AL
CALL DATA_SETUP ;输出汉字编码低字节
CALL DELAY
INC BX
INC BX ;修改显示内码缓冲区指针
INC BYTE PTR HZ_ADR ;修改LCD显示端口地址
POP CX
DEC CL
JNZ CONTINUE
RET
LCD_DISP ENDP
CMD_SETUP PROC
MOV DX, IO8255C ;指向8255端口控制端口
NOP
MOV AL,00000000B ;PC1置0,pc0置0 (LCD I端=0,W端=0)
OUT DX, AL
call delay
NOP
MOV AL,00000100B ;PC2置1 (LCD E端=1)
OUT DX, AL
NOP
call delay
MOV AL, 00000000B ;PC2置0,(LCD E端置0)
OUT DX, AL
call delay
RET
CMD_SETUP ENDP
DATA_SETUP PROC
MOV DX, IO8255C ;指向8255控制端口
MOV AL,00000001B ;PC1置0,PC0=1 (LCD I端=1)
OUT DX, AL
NOP
call delay
MOV AL,00000101B ;PC2置1 (LCD E端=1)
OUT DX, AL
NOP
call delay
MOV AL, 00000001B ;PC2置0,(LCD E端=0)
OUT DX, AL
NOP
call delay
RET
DATA_SETUP ENDP
DELAY PROC
push cx
push dx
MOV CX, 0ffffh
x1: loop x1
pop dx
pop cx
RET
DELAY ENDP
code ends
end start