注册 登录
编程论坛 汇编论坛

128*64LCD字符图形液晶的问题,求教!

ccmike98 发布于 2012-06-05 19:43, 1884 次点击
目的是:要在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
6 回复
#2
zklhp2012-06-06 10:26
好长啊 帮顶了
#3
bingghost2012-06-06 12:58
真心不懂  顶一个
#4
于祥2012-06-09 13:16
顶一个先,没怎么看懂了还!
#5
ououming1232012-06-10 20:35
      看到LZ的这个帖子
顿时我就觉得自学汇编一片灰暗啊- -
好难。
连接口都要特意去考虑  帮顶吧··
#6
zklhp2012-06-10 20:44
以下是引用ououming123在2012-6-10 20:35:20的发言:

      看到LZ的这个帖子
顿时我就觉得自学汇编一片灰暗啊- -
好难。
连接口都要特意去考虑  帮顶吧··
坚持总能学会

不过你得考虑一下值得不值得 像你说的 很难 所以要学会要花很长时间 至于值得不值嘛 得琢磨琢磨


[ 本帖最后由 zklhp 于 2012-6-10 20:46 编辑 ]
#7
zklhp2012-06-10 20:46
这贴很难有答案 尤其是在这里 建议散分完事了

有些问题 在不恰当的地方很难得到答案 呵呵
1