begin 发表于 2010-3-25 22:13:54

求助!!lpc2378 GPIO模拟8080总线时序驱动sed1335 只有几条白线

小弟这板子和液晶的接口没用总线方式,而是用gpio模拟8080时序,程序如下,比较简单,调试只出现几条白线,不知哪里出了错误,向大家求助!啊 谢谢 !


#include "config.h"

const uint8 SystemTab[]={0x30,0x87,0x07,0x27,0x42,0xF0,0x28,0x00};             //参数P1-P8
const uint8 ScrollTab[]={0x00,0x00,0xF0,0x00,0x10,0xF0,0x00,0x70,0x00,0x00};   //参数P1-P10
      
#define LCD_A0 (1<<26)
#define LCD_CS (1<<25)
#define LCD_RD (1<<24)
#define LCD_WR (1<<23)

#define SYSTEM_SET 0x40
#define SLEEP_IN   0x53
#define DISP_ON    0x59
#define DISP_OFF   0x58
#define SCROLL   0x44
#define OVLAY      0x5B
#define CGRAM_ADR0x5C
#define HDOT_SCR   0x5A
#define CSRFORM    0x5D
#define CSRDIR_R   0x4C
#define CSRDIR_L   0x4D
#define CSRDIR_U   0x4E
#define CSRDIR_D   0x4F
#define CSRW       0x46
#define CSRR       0x47
#define MWIRTE   0x42
#define MREAD      0x43

/*********************************************************************************
void ReadBState(void)            //读忙状态0x40忙 0x00不忙
{
        uint8 temp;
       
        FIO3CLR=LCD_CS;
        FIO3CLR=LCD_A0;
        FIO3SET=LCD_WR;
        FIO3CLR=LCD_RD;
        temp=0x40;
        while( (temp & 0x40)==0x40 )
        {   
                temp=FIO3PIN;
    }
}


*********************************************************************************/
voidWriteCmd(uint8 dat)         //写命令
{
        uint8 i;
        //ReadBState();      //忙判断
        FIO3CLR=LCD_CS;      //片选         
    FIO3SET=LCD_A0;      //A0=1,写命令
    FIO3CLR=0xff;      //数据输出   
    FIO3SET=dat;
    FIO3SET=LCD_RD;      //RD=1
    FIO3CLR=LCD_WR;               //WR=0
    for(i=0;i<10;i++);    //delay
    FIO3SET=LCD_WR;               //WR=1
    FIO3SET=LCD_CS;             //CS=1
    FIO3CLR=LCD_WR;      //WR=0
}

/*********************************************************************************/

voidWriteData( uint8 dat)         //写数据
{
        uint8 i;
//        ReadBState();                     //忙判断
        FIO3CLR=LCD_CS;                   //CS=0,片选
        FIO3CLR=LCD_A0;                                          //A0=0,写数据
        FIO3CLR=0xff;                                          //数据输出
        FIO3SET=dat;         
        FIO3SET=LCD_RD;                                          //RD=1
        FIO3CLR=LCD_WR;                                  //WR=0
        for(i=0;i<10;i++)                                 //delay
        FIO3SET=LCD_WR;                                          //WR=1
        FIO3SET=LCD_CS;                             //CS=1
        FIO3CLR=LCD_WR;                                   //WR=0
}


/**********************************************************************************/

uint8 ReadData(void)               //读数据
{   
    uint8 data;
    FIO3CLR=LCD_CS;
        FIO3CLR=LCD_A0;
        FIO3SET=LCD_WR;
        FIO3CLR=LCD_RD;
//        ReadBState();
        data=FIO3PIN;
        return(data);
}

/***********************************************************************************/


void LcdInit(void)                   //初始化函数
{
        uint8 i;
        PINSEL6=0;                     //P3.0-P3.7设为GPIO
    PINSEL7=0;                                  //P3.23-P3.26设为GPIO
    FIO3DIR=FIO3DIR|0x078000FF;      //设P3.0-P3.7和P3.23-P3.26为输出
       
        WriteCmd(0x40);                  // SYSTEM SET 代码,写入指令代码
    for(i=0;i<20;i++)   
    WriteData(SystemTab);         //写入System Set 参数
   
    i=0;
    WriteCmd(0x44);                  // SCROLL SET 代码,写入指令代码
    for(i=0;i<20;i++)   
    WriteData(ScrollTab);         //写入SCROLL SET 参数
   
    WriteCmd(0x5a);                  //写入HDOT SCR 代码和参数
    WriteData(0x0);
   
    WriteCmd(0x5b);                  //写入OVLAY 代码和参数
    WriteData(0x0);                  //设置参数:一三区为文本属性
   
    WriteCmd(0x59);                  // 写入DISP ON/OFF 代码和参数
    WriteData(0x54);               //设置参数:显示一~四区开显示,光标闪
   
}

/**********************************************************************************/
void LcdClear(void)               //清屏函数
{
    uint32 i;
      
    WriteCmd(CSRW);                  // 写入CSRW 代码和参数
    WriteData(0x00);               //光标地址 0x00
    WriteData(0x00);
    WriteCmd(CSRDIR_R);            // 写入CSRDIR代码
   
    WriteCmd(MWIRTE);                //写入MWRITE 代码和参数
    for(i=0;i<240*41;i++)
                {
             WriteData(0x0);
                }
        WriteCmd(CSRW);                  //重置光标地址
        WriteData(0x00);
        WriteData(0x00);
}


/***********************************************************************************/


int main()
{
        LcdInit();
        LcdClear();
}
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_541057.JPG
(原文件名:P1030160.JPG)

begin 发表于 2010-3-26 17:41:08

帮帮忙啦 DX们

liouravr 发表于 2010-3-26 23:04:14

LZ你的lpc2378用的谁的开发板

begin 发表于 2010-3-26 23:20:45

是自己做的啦 ,不是ZLG的,你也用过吗

begin 发表于 2010-3-26 23:24:00

不知道这个液晶板子上的8080时序该如何设置呢? 我看有些液晶的数据手册上写着:http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_541482.png
(原文件名:QQ截图未命名.png)

也是320240的 外形应该都差不多 不知道控制板是不是相同的我看我这板子的R24 和R25就什么都没接

begin 发表于 2010-3-26 23:25:11

想焊个0欧姆电阻在R24上 不知道液晶会不会over

begin 发表于 2010-3-28 18:54:33

帮帮忙啊

qimingxing 发表于 2011-12-28 18:03:43

我的程序和的差不多,情况很相似,不知楼主解决了没?希望大侠们多多指点!谢谢
页: [1]
查看完整版本: 求助!!lpc2378 GPIO模拟8080总线时序驱动sed1335 只有几条白线