打印

2004液晶,请高手帮忙

[复制链接]
1308|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qujianp|  楼主 | 2009-6-21 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序及连线图:
89C51
;连线图: *LCM---89C51* *LCM---89C51* *LCM------------89C51*
;        *DB0---P1.0* *DB4---P1.4* *RS-------------P3.0*
;        *DB1---P1.1* *DB5---P1.5* *RW-------------P3.1*
;        *DB2---P1.2* *DB6---P1.6* *E--------------P3.5*  (参考于说明书)
;        *DB3---P1.3* *DB7---P1.7* *VLCD接10K可调电阻到GND*
;**************************************************************************
RSPIN  EQU    P3.0
RWPIN  EQU    P3.1
EPIN    EQU    P3.5
XPOS    EQU    20H        ;列方向地址指针(用于LCDPOS子程序)
YPOS    EQU    21H        ;行方向地址指针(用于LCDPOS子程序)
        ORG    0000H
        JMP    START
START:  MOV    SP,#60H
        CLR    EPIN
MAIN:
        MOV    R7,#'0'    ;测试主程序
MN_PA:                    ;整屏循环显示"0"到"9"及空格
        CALL    LCDRESET
        MOV    A,R7
        CALL    LCDFILL
        CALL    DELAY400MS
        INC    R7
        MOV    A,R7
        CJNE    A,#'9'+1,MN_PA
        MOV    A,#' '
        CALL    LCDFILL
        CALL    DELAY400MS
        JMP    MAIN
LCDFILL:      
        MOV    B,A
        MOV    YPOS,#0
LFL_PB: MOV    XPOS,#0    ;整屏显示A中所代表字符
LFL_PA: MOV    A,B
        CALL    LCDWRITE
        INC    XPOS
        MOV    A,XPOS
        CJNE    A,#20,LFL_PA
        INC    YPOS
        MOV    A,YPOS
        CJNE    A,#4,LFL_PB
        RET
LCDPOS:                        ;设置第(XPOS,YPOS)个字符的DDRAM地址
        PUSH    ACC
        CLR    C              ;X位置范围(0到19)
        MOV    A,XPOS
        SUBB    A,#20
        JC      LPS_LBX
        MOV    XPOS,#0
LPS_LBX:ANL    YPOS,#03H      ;Y位置范围(0到3)
        MOV    A,YPOS        ;(XPOS,YPOS)对应DDRAM地址
        CJNE    A,#00,LPS_LA1
        MOV    A,XPOS        ;(第一行)X: 第0----19个字符
        JMP    LPS_LAX        ;    DDRAM:  0----13H
LPS_LA1:CJNE    A,#01,LPS_LA2
        MOV    A,XPOS        ;(第二行)X: 第0----19个字符
        ADD    A,#40H        ;    DDRAM:  40----53H
        JMP    LPS_LAX        ;
LPS_LA2:CJNE    A,#02,LPS_LAY
        MOV    A,XPOS        ;(第三行)X: 第0----19个字符
        ADD    A,#14H        ;    DDRAM:  14----27H
        JMP    LPS_LAX
LPS_LAY:MOV    A,XPOS        ;(第四行)X: 第0----19个字符
        ADD    A,#54H        ;    DDRAM:  54----67H
LPS_LAX:ORL    A,#80H        ;设置DDRAM地址
        CALL    LCDWC
        POP    ACC
        RET
LCDWRITE:                      ;定位写字符子程序
        CALL    LCDPOS        ;定位显示地址
        CALL    LCDWD          ;写字符
        RET
LCDRESET:                      ;初始化程序
        CALL    DELAY5MS        ;延时15MS
        CALL    DELAY5MS
        CALL    DELAY5MS
        MOV    A,#38H          ;显示模式设置(不检测忙信号)
        CALL    LCDWCN          ;共三次
        CALL    DELAY5MS
        MOV    A,#38H
        CALL    LCDWCN
        CALL    DELAY5MS
        MOV    A,#38H              
        CALL    LCDWCN
        MOV    A,#38H          ;显示模式设置(以后均检测忙信号)
        CALL    LCDWC
        MOV    A,#08H          ;显示关闭
        CALL    LCDWC
        MOV    A,#01H          ;显示清屏
        CALL    LCDWC
        MOV    A,#06H          ;显示光标移动设置
        CALL    LCDWC
        MOV    A,#0CH          ;显示开及光标设置
        CALL    LCDWC
        RET
LCDWC:                          ;送控制字子程序(检测忙信号)
        CALL    WAITIDLE
LCDWCN:                        ;送控制字子程序(不检测忙信号)
        CLR    RSPIN          ;RS=0 RW=0 E=高脉冲
        CLR    RWPIN
        MOV    P1,A
        SETB    EPIN
        NOP
        CLR    EPIN
        RET
LCDWD:                              ;写字符子程序
        CALL    WAITIDLE
        SETB    RSPIN              ;RS=1 RW=0 E=高脉冲
        CLR    RWPIN
        MOV    P1,A
        SETB    EPIN
        NOP
        CLR    EPIN
        RET
WAITIDLE:
        PUSH    ACC                ;正常读写操作之前必须检测LCD控制器状态
        MOV    P1,#0FFH
        CLR    RSPIN              ;RS=0 RW=1 E=高电平
        SETB    RWPIN
        SETB    EPIN
WTD_PA: NOP                        ;DB7:    0  LCD控制器空闲
        JB      P1.7,WTD_PA        ;        1  LCD控制器忙
        CLR    EPIN
        POP    ACC
        RET
DELAY5MS:
        MOV    R1,#25              ;延时子程序(5MS)
DL5_PA: MOV    R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL5_PA
        RET
DELAY400MS:
        MOV    R0,#20              ;延时子程序(400MS)
DL4_PA: MOV    R1,#100
DL4_PB: MOV    R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL4_PB
        DJNZ    R0,DL4_PA
        RET
        END

请问:这个程序是不是正确的?如果是正确的,就应该显示0-9及空格依次显示.
但经过我反复实验,都不能达到这种效果,请问是什么原因呢?

相关帖子

沙发
qujianp|  楼主 | 2009-6-21 17:44 | 只看该作者

2004液晶,请高手帮忙

急,急//。。。。。。。。请高手帮帮忙

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

17

帖子

0

粉丝