登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

液晶驱动问题

作者:yh830921 栏目:ARM技术
液晶驱动问题
谁能帮我看看我的SED1335的液晶驱动有什么问题?我一开始用的是EasyARM2200开发板上的配套液晶,现在因为需要,要换SED1335的液晶,驱动程序已经改成SED1335的驱动了,但是就不能显示,谁能帮我看看这个驱动程序哪有问题,谢谢!
#define  LCD_SYSTEM_SET         0x40            //初始化设置

#define  LCD_SCROLL             0x44            //显示域设置

#define  LCD_SLEEP_IN           0x53            //休闲模式

#define  LCD_DISP_ON            0x59            //显示状态开
#define  LCD_DISP_OFF           0x58            //显示状态关

#define  LCD_OVLAY              0x5B            //显示合成设置

#define  LCD_HDOT_SCR           0x5A            //点位移设置

#define  LCD_CSRRFORM           0x5D            //光标形状设置

#define  LCD_CGRAM_ADR          0x5C            //CGRAM首地址设置

#define  LCD_CSRDIR_R           0x4C            //光标向右移动
#define  LCD_CSRDIR_L           0x4D            //光标向左移动
#define  LCD_CSRDIR_U           0x4E            //光标向上移动
#define  LCD_CSRDIR_D           0x4F            //光标向下移动

#define  LCD_CSRW               0x46            //光标指针设置

#define  LCD_CSRR               0x47            //读取光标指针

#define  LCD_MWRITE             0x42            //数据写入设置

#define  LCD_MREAD              0x43            //数据读出设置

//#define  LCD_READ_FLUG
#define  paraP9                 0x28
  
extern uint8  LCD_WriteTCommand1(uint8 command);
extern uint8  LCD_WriteTData1(uint8 dat);
void  LCD_Initialize(void)
{  
   uint8 count1;
   uint8 SYSTAB[]={0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
   #define BasePart1    0x00
   #define BasePart2    0x40
   #define BasePart3    0x80
   #define BasePart4    0x00
   uint8 SCRTAB[]={0x00,BasePart1,0xF0,0x00,BasePart2,0xF0,0x00,BasePart3,0x00,BasePart4};

   LCD_WriteTCommand1(LCD_SYSTEM_SET);
   for(count1=0;count1<8;count1++)
   {
           LCD_WriteTData1(SYSTAB[count1]);
   }
   LCD_WriteTCommand1(LCD_SCROLL);
   for(count1=0;count1<10;count1++)
   {
        LCD_WriteTData1(SCRTAB[count1]);
   }
   LCD_WriteTCommand1(LCD_HDOT_SCR);
   LCD_WriteTData1(0);
   LCD_WriteTCommand1(LCD_OVLAY);
   LCD_WriteTData1(4);
   LCD_WriteTCommand1(LCD_DISP_ON);
   LCD_WriteTData1(0x54);
}

void  LCD_FillAll(void)
{  
    uint16 count2,count3;
    LCD_WriteTCommand1(LCD_CSRDIR_R);
    LCD_WriteTCommand1(LCD_CSRW);
    LCD_WriteTData1(0);
    LCD_WriteTData1(0);
    LCD_WriteTCommand1(LCD_MWRITE);
    for(count2=32768;count2>=0;count2--)
    {
        LCD_WriteTData1(0);
    }
//    for(count3=256;count3>0;count3--)
//    {
//        LCD_WriteTData1(0);
//    }
}


void  LCD_UpdatePoint(uint32 x, uint32 y)
{  
//   uint32  addr;

   /* 找出目标地址 */
//   addr = y*(GUI_LCM_XMAX>>3) + (x>>3);
//   LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8);    // 置地址指针
   
   /* 输出数据 */
//   LCD_WriteTCommand2(LCD_INC_WR, gui_disp_buf[y][x>>3]);

    uint32 tempPtr;
    uint32 tempD,tempP;
         
    tempPtr = y * paraP9 + (x & 0x7fff)/8;    // 去除最高位(显示属性)
    LCD_WriteCommand( LCD_CSRDIR_D );                        // CSRDIR 代码(光标自动下移)
    LCD_WriteCommand( LCD_CSRW );                            // 设置光标地址
    LCD_WriteData( (tempPtr & 0xff) );
    LCD_WriteData( (tempPtr /256) );
    LCD_WriteCommand( LCD_MREAD );                            // 读显示ram指令
    tempD = LCD_ReadData();                            // 读取当前显示数据
    tempP = 1<<(7-x & 0x0007);

// 根据预定属性决定写点或擦
2楼: >>参与讨论
电子老兄
同病相怜啊,我也在EasyARM2200调SED1335驱动没成功
我同样的代码,跑1335液晶,在AVR中显示正常,在LPC2210就不会显示
AVR我是用模拟IO控制的,LPC2210我是总线控制的 

3楼: >>参与讨论
foyyof
re
SED1335挂LPC2xxx的总线,调不通过。原因主要是连续两次写命令/数据之间的延迟太短问题!

* - 本贴最后修改时间:2006-12-5 20:40:45 修改者:foyyof

4楼: >>参与讨论
yh830921
谢谢
可是我加了延时以后,还是不行啊,我调的都郁闷死了

5楼: >>参与讨论
电子老兄
我也加延时了,还是不行!谁有总线控制的1335驱动啊??
帮我看看我的代码:
#include  "config.h"

//宏定义//
#define  P_LED        0x10      //红灯(PG口)
#define     PARAP9          0x28        // 相对于320 X 240
#define  BasePart1    0x00
#define  BasePart2    0x40
#define  BasePart3    0x80
#define  BasePart4    0x00
#define  SYSETEM_SET  0x40
#define  SCROLL       0x44
#define  DISPON       0x59

#define  DISPOff      0x58
#define  OVLAY        0x5b
#define  HDOT_SCR     0x5a
#define  CsrForm      0x5d
#define  CgramAdr     0x5c
#define  CSRDIR_RIGHT 0x4c
#define  CsrDirL      0x4d
#define  CsrDirU      0x4e
#define  CSRDIRD      0x4f
#define  CSRW         0x46
#define  CSRR         0x47
#define  MWRITE       0x42
#define  MREAD        0x43


#define      LEDCON  0x00080000        /* P1.19引脚控制LED,低电平亮 */
/* 定义LCM地址 */
#define  SED1335_COM        (*((volatile unsigned SHORT *) 0x83000002))
#define  SED1335_DAT        (*((volatile unsigned SHORT *) 0x83000000))
#define  SED1335_write_data(dat)        SED1335_DAT  = (uint8)dat
#define  SED1335_write_command(command) SED1335_COM  = (uint8)command

/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly        延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint16  dly)
{  uint32  ii;
   for(ii=0; ii<dly; ii++);
}
/*======================== 清显示 32K RAM区(清屏)子程序 ======================*/

void SED1335_clear_text_layer(void)
{
    uint32 j;
    DelayNS(20);
    SED1335_write_command(CSRDIR_RIGHT);
    DelayNS(20);
    SED1335_write_command(CSRW);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_command(MWRITE);
    for( j=0; j<32768; j++ )
    {
           DelayNS(20);
           SED1335_write_data(0x00);    // space
           DelayNS(20);
    }
}
//液晶初始化//
void LcmInition( void )
{
    DelayNS(2000);
    SED1335_write_command(SYSETEM_SET);
    DelayNS(20);
    SED1335_write_data(0x30);
    DelayNS(20);
    SED1335_write_data(0x87);
    DelayNS(20);
    SED1335_write_data(0x07);
    DelayNS(20);
    SED1335_write_data(0x27);
    DelayNS(20);
    SED1335_write_data(0x42);
    DelayNS(20);
    SED1335_write_data(0xf0);
    DelayNS(20);
    SED1335_write_data(0x28);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_command(SCROLL);  //设置显示起始地址,和区域
        //SAD1显示1区首地址。SAD1确定了第1显示区的起始地址。
        //他由双字节组成.本区为显示主区间,占用8K空间
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_data(0xf0);
    //SAD2显示2区首地址。SAD2确定了第2显示区的起始地址。
    //他由双字节组成。本参数表定义这个区占用8K空间
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_data(0x40);
    DelayNS(20);
    SED1335_write_data(0xf0);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_data(0x00);
    DelayNS(20);
    SED1335_write_command(HDOT_SCR); //以点为单位的显示画面水平移动量
    DelayNS(20);
    SED1335_write_data(0x00);        
    DelayNS(20);
    SED1335_write_command(OVLAY);    //画面重叠显示的合成方式
    DelayNS(20);
    SED1335_write_data(0x0c);        //OR方式
    DelayNS(2000);
    SED1335_clear_text_layer();
    DelayNS(20);
    SED1335_write_command(DISPON);
    DelayNS(20);
    SED1335_write_data(0x15);        // 画面显示但不闪烁,光标显示但不闪烁
    DelayNS(20);
}

void DispHz_S( uint16 x1, uint8 y1, const uint8 *pz, uint8 Len)
{
    uint16 Optr;
    const uint8 *pzz;
    uint8 Count1,Count2;
    uint8 i;
    for(i=0;i<Len;i++)                 //sum
    {
        pzz = pz + ( 0x20 * i );       //( i<<4 )
        Optr = (uint16)y1 * PARAP9 + x1;
 
6楼: >>参与讨论
电子老兄
我的硬件和start up
硬件:EASYARM220
ARM芯片:LPC2210
LCD接口:原EASYARM220LCD接口(电路保证对)

startup :存储器接口Bank3总线配置:
        LDR     R0, =BCFG3        ; 设置BCFG3寄存器
        LDR     R1, =0x10002CA0         ;1100,1010,0000
        STR     R1, [R0]


7楼: >>参与讨论
dracoduan
驱动SED1335没问题的
我换了2块屏,都可以正常操作的。

感觉外部总线速度并不是问题,因为本来就不快。

我用的是ucosii,读写语句之间也没有用程序延时,都是连续操作的。调试时只要能够操作成功一个寄存器,硬件设置就因该正确了。

8楼: >>参与讨论
电子老兄
7楼,能不能上传代码参考参考,我已调了5天了,我没成功
原写了一大串代码,最后怕什么影响,多删除,光跑1335程序,多不行,再把代码移回到AVR-ATMEGAL64中,是能正常运行的,LPC2210就是不行

9楼: >>参与讨论
yh830921
我也调试了好几天了
我的显示屏初始化的时候,屏幕会闪一下,有时候还会在屏幕上显示一条直线,看了老半天,也不知道到底问题出在哪,我的驱动还要和ZLG-GUI相联系,郁闷的来,求高手来帮帮忙!!

10楼: >>参与讨论
xxqarm
re:看过信号时序吗
用示波器看看信号时序和电平再说吧,"外部总线速度"还是不要感觉的好.

11楼: >>参与讨论
yh830921
看了信号时序以后怎么办呢?
 
12楼: >>参与讨论
zlgarm
可能是总线速度配置的问题
LPC2200的总线速度过大,可能LCD读写速度跟不上,请重新配置一下BCFG。
    建议先将其配置成1000FFEF,调试成功后再根据需要将其配置成其它值,提高总线的读写速度。

13楼: >>参与讨论
yh830921
改过了
改过了BCFG,我把所有的BCFG都改成1000FFEF了,可是屏幕上还是什么都没有,救命啊!!!

14楼: >>参与讨论
xxqarm
时序满足要求吗?
如果时序不能满足要求,调整延时时间呀.

15楼: >>参与讨论
yh830921
改过了
延时时间改过了   可是还是不行啊?
我想问一下,这个不能显示,与连接显示屏和实验板之间的数据线的长度有没有关系的?是不是之间线的长度长了,就不能显示啊???

16楼: >>参与讨论
cjj3543
Fcclk 太高了
 
17楼: >>参与讨论
yh830921
呵呵  我是菜鸟
不好意思,我刚开始学这个,请问Fcclk是什么啊?还有,这个显示屏能否显示和线的长度有没有关系啊???

18楼: >>参与讨论
cjj3543
我的是这样配置的,19264的液晶和LPC2138相连,已经调试完了
/* SYSTEM configuration .Fosc、Fcclk、Fcco、Fpclk must be defined */
/* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
#define Fosc            11059200                    //CRYSTAL frequence,10MHZ~25MHZ,should be the same as actual status.
                            //应当与实际一至晶振频率,10MHZ~25MHZ,应当与实际一至
#define Fcclk           (Fosc * 3)                  //SYSTEM frequence,should be (1~32)multiples of Fosc,and should be equal or less  than 60MHZ.html">60MHZ.
                            //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco            (Fcclk * 8)                 //CCO frequence,should be 2、4、8、16 multiples of Fcclk, ranged from 156MHz to 320MHz.
                            //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk           (Fcclk / 4) * 1             //VPB clock frequence , must be 1、2、4 multiples of (Fcclk / 4).
                            //VPB时钟频率,只能为(Fcclk / 4)的1、2、4倍

参与讨论
昵称:
讨论内容:
 
 
相关帖子
谁来看下,PWM音乐输出实验中关于sizeof的问题
easyjtag调试,程序运行出错
请问IAR EWARM 中怎么调试IRQ中断呀,很急,请高手帮帮忙拉
请问,LPC2214如何把某个函数放在指定的flash地址空间?
LPC2214
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号