|
回复 沙发ltbytyn 的帖子
背光我用可调电阻调了,没有什么反应。
LCD_CMD: ;;;带检查忙标志的写命令
JSR.A LCD_CHECK
BCLR RS ;;;置0 RS
JSR.A DELAY_2US
BCLR RW ;;;置0 RW
JSR.A DELAY_2US
MOV.B LM_CMD,p2
JSR.A DELAY_20US
BSET EN
JSR.A DELAY_200US
BCLR EN
JSR.A DELAY_200US
RTS
;***********************************************************************
LCD_DATA: ;;;;带检查忙标志的写数据
JSR.A LCD_CHECK
BSET RS
JSR.A DELAY_2US
BCLR RW
JSR.A DELAY_2US
MOV.B LM_DATA,p2
JSR.A DELAY_20US
BSET EN
NOP
NOP
JSR.A DELAY_200US
BCLR EN
JSR.A DELAY_200US
RTS
;***********************************************************************
LCD_CHAR: ;;;;写字符,要换成ASSIC码
AND.B #00H,LM_DATA
MOV.B LM_HANG,R0L
SUB.B #01H,R0L ;;判断在哪一行,是第一行不
JZ CHAR_1
MOV.B LM_HANG,R0L
SUB.B #02H,R0L
JNZ CHAR_ERROR
MOV.B #0C0H,LM_ADDRESS ;;;判断为第二行,第二行开始地址为40+80=C0H
JMP.B CHAR_2
CHAR_1:
MOV.B #80H,LM_ADDRESS ;;;判断为第一行,第一行的开始地址为00+80=80H
CHAR_2:
ADD.B LM_LIE,LM_ADDRESS ;;;;地址=起始地址+列\
MOV.B LM_ADDRESS,LM_CMD
MOV.B LM_DATA1,LM_DATA
ADD.B #30H,LM_DATA ;;;;;调整为ASSIC码
JSR.A LCD_CMD
JSR.A LCD_DATA
CHAR_ERROR:
RTS
;***********************************************************************
LCD_CHECK: ;;;检查忙标志
BSET prc2 ;;;设置为输入
MOV.B #00H,pd2
BCLR prc2
LCD_CHECK1:
MOV.B #11111111B,p2
BCLR RS
NOP
NOP
BSET RW
JSR.A DELAY_20US
BSET EN
JSR.A DELAY_200US
MOV.B p2,LM_FLAG
BCLR EN
AND.B #80H,LM_FLAG ;;;判断最高位是否为1,来判断是否在忙
JNZ LCD_CHECK1
BSET prc2 ;;;;设置为输出
MOV.B #11111111b,pd2
BCLR prc2
RTS
;***********************************************************************
上面是我的主要驱动程序,我查了两天了,感觉没什么问题啊。麻烦各位给看看。另外延时我曾经加到500US。 |
|