打印

点阵型液晶显示模块应用求助

[复制链接]
1799|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
华仔2007|  楼主 | 2009-7-8 09:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我刚开始学习单片机,在做点阵型液晶模块实验时,遇到点问题,请大家不吝赐教,谢谢
液晶模块型号:HG12605-C
接口:20针 并口通讯
液晶实验想在屏幕左上角显示一个“范”字

问题:为什么左半屏是黑色的,和复位有关系吗,我把液晶模块的复位端接5v和悬空效果一样

程序如下:
          COMMAND EQU 30H       ;存指令
          D_DATA EQU 31H        ;存数据
          DI EQU P1.0
          RW EQU P1.1
          E EQU P1.2            ;连线方式
          ORG 0000H              
          AJMP START             
          ORG 0033H              
START:    MOV SP,#60H           
          SETB P1.3              
          CLR P1.4              ;片选信号
          MOV COMMAND,#00111111B
          ACALL W_COMMAND       ;开显示
          MOV COMMAND,#11000000B
          ACALL W_COMMAND       ;设置显示起始行
          MOV COMMAND,#10111000B
          ACALL W_COMMAND       ;行地址
          MOV COMMAND,#01000000B
          ACALL W_COMMAND       ;列地址
          MOV DPTR,#FAN1
          MOV R0,#00H
NEXT1:    MOV A,R0
          MOVC A,@A+DPTR
          MOV D_DATA,A
          ACALL W_DATA
          INC R0
          CJNE R0,#10H,NEXT1
          MOV COMMAND,#10111001B
          ACALL W_COMMAND
          MOV COMMAND,#01000000B
          ACALL W_COMMAND
          MOV DPTR,#FAN2
          MOV R0,#00H
NEXT2:    MOV A,R0
          MOVC A,@A+DPTR
          MOV D_DATA,A
          ACALL W_DATA
          INC R0
          CJNE R0,#10H,NEXT2
          AJMP $
BUSY:     MOV P0,#0FFH          ;读忙标志位  
          SETB RW
          CLR DI
          SETB E
          JB P0.7,$
          RET
W_COMMAND:ACALL BUSY            ;写指令 
          CLR RW                         
          CLR DI                      
          SETB E                         
          MOV P0,COMMAND      
          CLR E                         
          RET                          
W_DATA:   ACALL BUSY            ;写数据
          CLR RW
          SETB DI
          SETB E
          MOV P0,D_DATA
          CLR E
          RET
FAN1:     DB 04H,44H,94H,24H,6FH,04H,0E4H,24H
          DB 24H,24H,2FH,0F4H,24H,06H,04H,00H
FAN2:     DB 04H,04H,0FDH,04H,02H,00H,3FH,40H
          DB 40H,42H,44H,43H,40H,40H,70H,00H
          END

相关帖子

沙发
bjc125| | 2009-7-8 10:29 | 只看该作者

时序错了!

所有读取指令的 SETB E 位置不对 
读忙标志的时不能在那瞎等而是重新读  
LCD不同,你的LCD初始化我不知道对不对
楼主应该根据自己的LCD资料上的时序严格控制好每个LCD显示控制位
下面的程序在我的LCD上可以(晶振:11.059MH)
          COMMAND EQU 30H       ;存指令
          D_DATA EQU 31H        ;存数据
          DI EQU P1.2
          RW EQU P1.1
          E EQU P1.0            ;连线方式
          ORG 0000H              
          AJMP START             
          ORG 0100H              
START:  ;  MOV SP,#60H           
          SETB P1.3              
          CLR P1.4              ;片选信号
          MOV COMMAND,#00110000B
          ACALL W_COMMAND       ;function set--8bit operation and 2 lines
          MOV COMMAND,#0x0c
          ACALL W_COMMAND       ;display on:The whole ALL_ON
          MOV COMMAND,#0x01
          ACALL W_COMMAND       ;Clear LCD
          MOV     A,#250    
      ACALL   DELAY_A       ;≈5ms

          MOV COMMAND,#0x06
          ACALL W_COMMAND       ;Entry Mode Set:DDRAM Sddress COUNTER(ac)+1
              MOV COMMAND,#0x81
          ACALL W_COMMAND       ;设置第一行显示起始位置

          MOV DPTR,#FAN1
          MOV R0,#00H
NEXT1:    MOV A,R0
          MOVC A,@A+DPTR
          MOV D_DATA,A
          ACALL W_DATA
          INC R0
          CJNE R0,#10H,NEXT1
          MOV COMMAND,#0x91
          ACALL W_COMMAND       ;设置第二行显示起始位置
          MOV DPTR,#FAN2
          MOV R0,#00H
NEXT2:    MOV A,R0
          MOVC A,@A+DPTR
          MOV D_DATA,A
          ACALL W_DATA
          INC R0
          CJNE R0,#10H,NEXT2
          AJMP $
BUSY:     MOV P0,#0FFH          ;读忙标志位  
          SETB RW
          CLR DI
          CLR E   
      NOP
      NOP    
          SETB E                    
       NOP
      NOP               
          JB P0.7,BUSY    
      NOP
      NOP    
          CLR E  
      NOP
      NOP
          RET
W_COMMAND:ACALL BUSY            ;写指令 
          CLR RW                         
          CLR DI 
          CLR E                      
       NOP
      NOP               
          MOV P0,COMMAND      
      NOP
      NOP    
          SETB E   
      NOP
      NOP
      CLR E  
          MOV     A,#4          ;有读取忙标志指令时可以不用
          LCALL   DELAY_A         ;≈80us                               
          RET                          
W_DATA:   ACALL BUSY            ;写数据
          CLR RW
          SETB DI
          CLR E      
      NOP
      NOP                             
          MOV P0,D_DATA  
      NOP
      NOP      
           SETB E   
      NOP
      NOP
      CLR E  
          MOV     A,#4           ;有读取忙标志指令时可以不用
          LCALL   DELAY_A         ;≈80us
          RET
FAN1:     DB 0X54,0X52,0X49,0X42,0X4C,0X45,0XC6,0XB5

          DB 0X54,0X52,0X49,0X42,0X4C,0X45,0XC6,0XB5

FAN2:     DB 0XD4,0XF5,0X49,0X42,0X4C,0X45,0XC6,0XB5

          DB 0X54,0X52,0X49,0X42,0X4C,0X45,0XC6,0XB5
    RET
;========================A*20us延时程序==================
DELAY_A:
    MOV     R3,A
DELAY20us:
    MOV     R2,#9           ;≈20us
    DJNZ    R2,$
    DJNZ    R3,DELAY20us
    RET        
;=======================================================
          END


使用特权

评论回复
板凳
华仔2007|  楼主 | 2009-7-8 11:26 | 只看该作者

回2楼的老师

为了降低实验成本,显示模块从老设备上拆的,型号HG12605-C,在网上找不到对应的资料,只找到一个相似型号的资料,HG12605NY-LY,我把资料传上来,里面好像没有关于设置8位总线及清屏等命令,关于时序的问题,我再查一下,谢谢
相关链接:https://bbs.21ic.com/upfiles/img/20097/200978112243121.pdf

使用特权

评论回复
地板
bjc125| | 2009-7-8 14:26 | 只看该作者

你这种LCD跟我们一般用的不一样

 E 上升沿后LCD才会执行功能 所以每个操作模块最好先置低后置高
初始化好像是对的
你的LCD的显示是不是点阵直接显示的,好像不是输入码值
你这个程序时不是只显示2个字 ?
那个范字怎么来的?
初始化不变,后面按我说的改下看看

使用特权

评论回复
5
华仔2007|  楼主 | 2009-7-8 14:37 | 只看该作者

不是字符型液晶显示模块,是点阵型液晶模块

时序改下看看

使用特权

评论回复
6
华仔2007|  楼主 | 2009-7-10 10:22 | 只看该作者

谢谢bjc125

读写时序确实有问题,已经更正了,读忙标志子程序也修正了,解决了部分问题,黑屏问题还没有解决,有的网友说就是这样,我编写了一个清屏的子程序,呵呵,笨人有笨办法,可以说基本搞定,花了我3天时间,总而言之谢谢你

使用特权

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

本版积分规则

22

主题

83

帖子

0

粉丝