Assembly 初始化16x2 LCD后,如何使用8051在LCD中显示字符?
我的LCD接口程序有点问题。我知道它是有效的,因为它与我的Arduino Leonardo配合得很好。我写了一个8051汇编程序来连接它。然而,我从LCD上得到的只是一个闪烁的光标。我读了很多教程。但我还没有找到解决办法。这是我的节目。我在等你的帮助。多谢各位Assembly 初始化16x2 LCD后,如何使用8051在LCD中显示字符?,assembly,8051,lcd,Assembly,8051,Lcd,我的LCD接口程序有点问题。我知道它是有效的,因为它与我的Arduino Leonardo配合得很好。我写了一个8051汇编程序来连接它。然而,我从LCD上得到的只是一个闪烁的光标。我读了很多教程。但我还没有找到解决办法。这是我的节目。我在等你的帮助。多谢各位 ORG 0 ;---------DECLERATIONS--------- EN EQU P3.2 RW EQU P3.3 RS
ORG 0
;---------DECLERATIONS---------
EN EQU P3.2
RW EQU P3.3
RS EQU P3.4
BF EQU P3.5
DATAP EQU P1
CLRDSP EQU 01H ;Clear display
RETHM EQU 02H ;Return home
LFTSHT EQU 06H ;Write to left
DSPCTRL EQU 0FH ;Display on, cursor on and blinking
CRSRSFT EQU 14H ;Shift cursor
MODE EQU 38H ;Two line display, 5x8 chars, 8-bit bus
INITPOS EQU 80H ;Set cursor to first position
SJMP MAIN
;---------SUBROUTINES---------
SENDCMD: CLR RS ;Select instruction register
CLR RW ;Select write mode
CLR EN ;Prepare for pulse
MOV DATAP,A ;Bring data into data port
SETB EN ;Apply pulse
CLR EN
RET
SENDDATA: SETB RS ;Select data register
CLR RW ;Select write mode
CLR EN ;Prepare for pulse
MOV DATAP,A ;Bring data into data port
SETB EN ;Apply pulse
CLR EN
RET
WAIT: CLR RS ;Select instruction register
SETB RW ;Select read mode
SETB BF ;Set busy flag as input
CLR EN ;Prepare for pulse
SETB EN ;Apply pulse
CLR EN
HERE: JB BF,HERE ;Wait for busy flag
RET
INIT: CLR EN
MOV A,#MODE
ACALL SENDCMD
ACALL WAIT
MOV A,#DSPCTRL
ACALL SENDCMD
ACALL WAIT
MOV A,#LFTSHT
ACALL SENDCMD
ACALL WAIT
MOV A,#CLRDSP
ACALL SENDCMD
ACALL WAIT
MOV A,#RETHM
ACALL SENDCMD
ACALL WAIT
RET
MAIN: MOV P1,#0FFH
MOV P3,#0FFH
ACALL INIT
MOV A,#'H'
ACALL SENDDATA
ACALL WAIT
MOV A,#'E'
ACALL SENDDATA
ACALL WAIT
MOV A,#'L'
ACALL SENDDATA
ACALL WAIT
MOV A,#'L'
ACALL SENDDATA
ACALL WAIT
MOV A,#'O'
ACALL SENDDATA
ACALL WAIT
INFLOOP: SJMP $
END
谢谢你的回答。我刚刚找到了解决办法。我在检查忙标志后添加了一些延迟。在这之后,它就像一个符咒一样工作。也许检查有问题的代码会有所帮助。确保接线在级别方面是正确的,确保您在代码中实际编程了正确的位,确保计时正确。请指定您正在使用的LCD以及数据表链接,并尽可能显示电路图。另外,还要检查一下你是否在等待过程中挂断了电话。谢谢你的帮助。我使用的LCD是TC1602B-08R。数据表在中提供。电路图如下:。我的LCD有一个20SPLC780D控制器。其数据表如下:。我仔细检查了接线,并将检查等待程序是否出现挂断。可能是时间问题。开发板和电路的时钟速度有很大的变化吗?是的,可能有。也许我也应该尝试延迟,但我没有使用开发板。我的AT89C4051的振荡器频率是12MHz。嗯,你忽略电气问题的可能性不是零。检查输出是否通过~10千欧电阻器上拉。