搜索
bottom↓
回复: 7

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

[复制链接]

出0入0汤圆

发表于 2010-3-25 22:13:54 | 显示全部楼层 |阅读模式
小弟这板子和液晶的接口没用总线方式,而是用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_ADR  0x5C
#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;
    }
}


*********************************************************************************/
void  WriteCmd(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
}

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

void  WriteData( 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();
}

(原文件名:P1030160.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2010-3-26 17:41:08 | 显示全部楼层
帮帮忙啦 DX们

出0入0汤圆

发表于 2010-3-26 23:04:14 | 显示全部楼层
LZ你的lpc2378用的谁的开发板

出0入0汤圆

 楼主| 发表于 2010-3-26 23:20:45 | 显示全部楼层
是自己做的啦 ,不是ZLG的,你也用过吗

出0入0汤圆

 楼主| 发表于 2010-3-26 23:24:00 | 显示全部楼层
不知道这个液晶板子上的8080时序该如何设置呢? 我看有些液晶的数据手册上写着:
(原文件名:QQ截图未命名.png)

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

出0入0汤圆

 楼主| 发表于 2010-3-26 23:25:11 | 显示全部楼层
想焊个0欧姆电阻在R24上 不知道液晶会不会over

出0入0汤圆

 楼主| 发表于 2010-3-28 18:54:33 | 显示全部楼层
帮帮忙啊

出0入0汤圆

发表于 2011-12-28 18:03:43 | 显示全部楼层
我的程序和的差不多,情况很相似,不知楼主解决了没?希望大侠们多多指点!谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 10:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表