打印

请教:128×64液晶读“忙"问题

[复制链接]
2459|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wbygmm|  楼主 | 2007-9-10 14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
液晶模块是AMPIRE12864,控制器是KS0108.电路图如下图所示。
使用查询“忙状态”指令结果BUSY位总为1,陷入死循环,如果用延时,那么整个程序的结果就是正确的,所以问题出在查询忙上,在KEIL里一步一步执行也可以看出这一点.
程序如下:

;TEST 12864
;CONTROLLER: KS0108
;SIDE: 128 X 64 DOTS
;DRAW: WHY
;****************************************************************
CS1     EQU     P3.2            ;定义左半屏       
CS2     EQU     P3.3            ;定义右半屏
RS    EQU     P3.4            ;定义数据指令线
RW      EQU     P3.5            ;定义读写线
E       EQU     P3.6            ;使能端

    ORG    00H
    AJMP    MAIN
    ORG    50H
MAIN:
    LCALL    BUSY
    CLR    CS1        ;开左半屏显示
    SETB    E
    CLR    RS
    CLR    RW
    MOV    P1,#3FH        ;开显示
    CLR    E
    LCALL    CLEAR        ;调用清屏子程序

    LCALL    BUSY
    CLR    CS2        ;开右半屏显示
    SETB    E
    CLR    RS
    CLR    RW
    MOV    P1,#3FH        ;开显示
    CLR    E
    LCALL    CLEAR        ;清右半屏


    AJMP    $


;BUSY:    MOV    R5,#0FH        ;延时以避开忙状态
;LOOP:    MOV    R6,#0FH
;    DJNZ    R6,$
;    DJNZ    R5,LOOP
;    RET

BUSY:
;    MOV    P1,#0ffH    ;看到别人的程序有的有这一句,照抄了试验还是不对
    CLR    RS        
    SETB    RW
    SETB    E
    MOV    A,P1
    CLR    E
    JB    ACC.7,BUSY
    RET


CLEAR:    MOV    R0,#8H        ;清屏子程序
    MOV    R1,#0B8H
TEST:    LCALL    BUSY
    SETB    E
    CLR    RS
    CLR    RW
    MOV    P1,R1        ;从第一页开始
    CLR    E

    MOV    R2,#40H
    MOV    R3,#40H
TRY:    LCALL    BUSY
    SETB    E
    CLR    RS
    CLR    RW
    MOV    P1,R3        ;从第一列开始
    CLR    E

    LCALL    BUSY
    SETB    E
    SETB    RS
    CLR    RW
    MOV    P1,#00H        ;往每个显示地址送0,即清屏
    CLR    E
    INC    R3
    DJNZ    R2,TRY

    INC    R1
    DJNZ    R0,TEST
    RET

    END

相关帖子

沙发
wbygmm|  楼主 | 2007-9-10 15:05 | 只看该作者

现在知道了多一点,

是否因为128×64,使用了2个列控制器KS0108,所以忙状态要分左右分别查询?
不过,我对CS1,CS2分别用可能的四种状态00,01,10,11都试了,还是没有反应。
BUSY:SETB  CS1
     CLR   CS2
     CLR    RS        
     SETB    RW
     SETB    E
     MOV    A,P1
     CLR    E
     JB    ACC.7,BUSY
     RET

使用特权

评论回复
板凳
wujianbo| | 2007-9-12 15:59 | 只看该作者

好像proteus里面的液晶模型的确有点跟现实不一样

读判断忙的方**导致死循环
可以采用延时的方法
甚至可以不判断忙
proteus里面的模型太理想了
实际当中
延时也非常关键

使用特权

评论回复
地板
NE5532| | 2007-9-12 19:01 | 只看该作者

晕,拿仿真研究单片机……

使用特权

评论回复
5
东莞不败| | 2007-9-13 00:01 | 只看该作者

试试

BUSY:
;    MOV    P1,#0ffH    ;看到别人的程序有的有这一句,照抄了试验还是不对
    CLR    RS        
    SETB    RW
    SETB    E
    MOV    A,P1
    MOV    A,P1
    MOV    A,P1
    MOV    A,P1

    MOV    A,P1
    MOV    A,P1
    MOV    A,P1
    MOV    A,P1
    CLR    E
    JB    ACC.7,BUSY
    RET

使用特权

评论回复
6
huangqi412| | 2007-9-13 18:26 | 只看该作者

网上找个现成的ks0108试一下吧

使用特权

评论回复
7
wbygmm|  楼主 | 2007-9-14 09:05 | 只看该作者

果然还是要出银子买回来测才行

to5楼 东莞不败:
3Q,试过了,不行。

看来果然还是要出银子买回来测才行,好像PROTEUS里的模型时序有点不太对劲。

使用特权

评论回复
8
xwj| | 2007-9-14 09:12 | 只看该作者

是的,proteus里面的12864模型数据读不出来的

T6963的没问题

使用特权

评论回复
9
qjy_dali| | 2007-9-14 10:59 | 只看该作者

哇呀,那个软件画的图真好看

使用特权

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

本版积分规则

2

主题

27

帖子

0

粉丝